对于数字锁控制电路,首先,要求是安全可靠,即锁的密码破译可能性尽可能小;其次,要加强系统的可靠性。
1.编码总量的确定
电子密码锁随机开锁成功的概率定义为,其中P为随机开锁成功概率,NT为密码编码总量。显然要使密码锁保密安全性高,NT应尽可能大,使P趋于0。但NT越大,相应的电路就越复杂,密码的记忆与操作也越麻烦,故NT应有合理的上限和下限。若每一次开锁操作时间为t,则下限NTL的选择应使密码落在随机开锁可能成功的操作时区以外。为便于进行随机试验,将NT分为n段并期望在段的1/2处开锁成功。此时,则随机开锁试验期望成功的时间为
假设系统设计不考虑误码输入的保护,密码锁在无保护的情况下使操作人员任意作随机开锁试验的时间为TEN,则
NTL=(2n×TEN/t)x (5-3)
式中,x为最低安全系数,式(5-3)可改写成
显然,若使NT≥NTL,则Tx>TEN,分段随机试验不易成功。一般来说,当NT选定之后,NT的上限NTH原则上是越大越安全,但一般设计时取NTH=(10~1000)NTL较为合理。
2.编码制式的选择
编码制式应根据NT的大小选取,可分为如下三种:
(1)密码的各位都可以重码:NT1=ai;
(2)密码的非相邻位可以重码:NT2=a(a-1)i;
(3)密码的任何一位都不能重码:NT3=a(a-1)…(a-i+1)。式中,a为基数;i为位数;a和i的选取应该满足NT≥NTL;a=2,3,4,10,12,14,16。
以最常用的a=10,i=6为例,可以计算出NT2=0.53NT1,NT3=0.15NT1。所以,编码制式如何选择,是否考虑重码,对NT有很大影响。另外,相同制式下不同的基底对编码总量NT会有影响,而且基底的选择也会影响到硬件电路的设计。
3.功能描述
(1)密码锁采用串行累加计数的方式输入十进制数字口令,可设置任意4位密码。
(2)输入的口令及口令的位数均正确即可开锁。
(3)允许密码输入错误的最大次数为三次,口令错误次数超过三次则进入死锁状态,并发出警报。
(4)开锁后可以重新上锁,再次上锁后只有再次输入正确的密码才能开锁。
(5)密码锁有计时系统设计,在开锁状态及报警状态一段时间后,能自动进入初始状态,开锁时间及报警时间可以任意设置。
(6)有cancel功能,输入错误密码时可以清除密码重新输入。
4.数字密码锁系统主控制流程设计
系统控制流程如图5-33所示。
5.主机状态机部分的设计
此模块的主要功能是实现各种工作状态之间的转换。密码锁的工作状态有三种,分别为输入密码时密码锁的等待状态(waits)、输入密码正确时密码锁的开锁状态(pass)、以及输入密码错误时密码锁的报警状态(alarm)。为实现三种状态之间的相互转换,首先要明确三种状态相互转换所需要的条件。
(1)设计思想 设计密码锁的初始状态为等待状态,密码锁在没有达到报警或开锁的条件时,密码锁将持续保持这个状态不变。在此状态下,当收到密码正确的信号时(correct=1),则开始变为开锁状态;当收到密码错误信号(error=1)且输入密码错误次数为三次时,则开始变为报警状态,否则就保持等待状态不变。当密码锁变为开锁状态后,系统开始检测,当开锁时间到达设计的时间后,密码锁自动转变回等待状态,报警状态的转换方式和开锁状态一样,密码锁的工作状态将保持这种转换方式持续工作,其状态转换图如图5-34所示。
图5-33 系统控制流程图
图5-34 主有效状态机的状态转换图
(2)主机状态机部分的代码设计 设计代码详见光盘附件5-3。
设置的激励波形如图5-35所示。
通过仿真得到的结果如图5-36所示。
由图5-36所示的仿真结果可知,此模块可以实现在设计条件下的模块之间的转换。当主状态为waits时,如果收到正确信号,则输出开锁命令,如果收到错误信号,且错误次数为三次,即输出报警命令,除此之外则保持waits状态不变;当主状态为开锁状态pass时,计时器达到设定时间后,停止开锁,自动进入锁定状态,否则就保持开锁状态;当主状态为报警时,与开锁状态类似。
图5-35 激励波形图
图5-36 仿真结果图
6.输出控制模块(www.xing528.com)
此模块的作用是控制各种状态下的输出信号。在初始状态下,系统的报警输出和开锁输出都为0,即没有信号输出;当密码锁为开锁状态时,只输出开锁命令(passed=1);当密码锁进入报警状态时,则只输出报警命令(alarmed=1);其他状态时,输出都保持输出状态不变。
根据此模块的功能设计的代码详见光盘附件5-4。
设置的激励波形如图5-37所示。
图5-37 激励波形图
通过仿真得到的结果如图5-38所示。
由图5-38可以看出,复位时,报警信号和解锁信号都为0,当主状态为开锁时,仅输出开锁信号;当主状态为报警时,则只输出报警信号;其他时间,系统默认为无输出。
图5-38 仿真结果
7.报警及开锁定时器模块
本模块主要用于报警及开锁的定时。当输入密码错误次数为三次时开始报警,但密码锁不能一直的报警,需要对密码锁报警的时间加以限制。采用一个计时器(实际上是一个计数器),对时钟信号计数后再乘以时钟信号的周期则为密码锁的报警时间,如果要修改报警时间则只需修改对时钟信号计数的判定条件即可。同样,密码锁开锁后也不能一直保持开锁状态,否则就失去了密码锁的意义,这时需要进行计时判定。当到达规定时间后,密码锁自动回到初始状态。
根据此模块的功能设计的代码详见光盘附件5-5。
设置的激励波形如图5-39所示。
图5-39 激励波形图
仿真结果如图5-40所示。
图5-40 仿真结果
由图5-40所示的结果可以看出,在报警状态下,系统开始计时。当报警停止时计时也停止,并且清零。
8.密码记录模块
此模块的功能为记录并存储输入的密码,用于与原始密码的对比。首先是编码的考虑,密码锁的输入有0~9、enter、cancel共11个按键,因此至少需要4位二进制数进行编码。这里采用常见的8421BCD码,再加1位按键数输入判定位来表示一个输入。当按键输入判定位为1时则表示有按键输入,则把4位BCD码放入16位密码寄存器中;当按键输入判定位为0时,则不论此时BCD码为多少都不存入密码寄存器,密码锁会依次记录四次按键输入的值存入密码寄存器中。
本模块的功能实现代码详见光盘附件5-6。
设置的激励波形如图5-41所示。
图5-41 激励波形图
仿真结果如图5-42所示。
图5-42 仿真结果
由图5-42可以看出,本模块的功能实现正确,用户输入的4位密码被依次记录在pass-word里,在复位之前会一直保存数据,复位后清零。
9.比较密码模块
本模块的功能为将密码寄存器中的值和原始密码进行比较,然后产生正确或错误信息。当按键输入为enter时,系统开始比较寄存器记录的密码和原始密码,相等时输出一个正确信号;当主模块收到此信号时执行开锁命令、密码不一致时,系统输出一个错误信号,此信号会被错误次数计数器所记录;当记录次数为为3时,主模块将执行报警命令。
比较密码模块的设计代码详见光盘附件5-7。
设置的激励波形如图5-43所示。
仿真结果如图5-44所示。
由图5-44可以看出,本模块功能正确,当输入正确密码时产生正确信号,输入密码错误时产生错误信号。
图5-43 激励波形图
图5-44 仿真结果
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。