1、门禁系统设计智能卡门禁系统设计11 设计要求智能卡的应用并不是简单的读写卡操作,而是一个综合性的工程项目。它不仅包括卡和读写模块的选择,还涉及到读写模块的控制、数据的传输、数据的处理和存储;既需要有硬件应用的知识、也还必须具有软件方面的能力。下面我们以一个完整的应用系统为例,详细地描述了各组成部分的设计要求、完成的功能及具体的实现方法。智能卡门禁系统设计任务:1 智能卡门禁系统门禁机模块的设计(1) 非接触式IC卡读写头部分主要内容:读头部分采用非接触智能卡读写模块,由读卡器读入数据并加以保存,智能卡按常规要具有加密和数据分区存储功能,读写头的读写距离在5-10厘米左右,必须具有掉电保护、精确
2、时间记时和显示,3K5K的临时数据存储。(2) 门禁机主控模块 主要内容:智能门禁机主控模块是智能门禁机系统的核心部分,主要包括MCU、键盘、显示、电子时钟、外部数据存储器及掉电保护和看门狗电路,有精确时间记时和显示。 2 智能卡门禁系统系统管理模块的设计(1) 系统管理主控模块设计主要内容:设计门禁上层软件的主控模块,其主要实现的功能是最高权限卡对管理员和一般用户发卡,管理员对一般用户发卡。能对丢失的卡进行挂失,对找回的卡进行解挂,同时还要具备查找功能。(2) 系统管理的数据库管理软件设计 主要内容:运用高级语言编程,制作数据库管理软件。采集下位机的数据并保存,然后管理采集到的数据,具有采集
3、、数据更新、查询统计和报表的打印功能 3 智能卡门禁系统数据传输模块的设计主要内容:完成中央控制电脑与门禁读写器之间的数据传输协议的设计,能实现主、从机的双向数据传输及一对一、一对多的数据传输。 2 总体方案根据设计要求,整个智能卡门禁系统分为三大部分:其一是读写器部分,包括MCU、复位电路、时钟电路、显示电路、键盘、数据存储等主控模块及非接触IC卡读写模块和电锁驱动部分;其二是中央控制电脑的软件管理系统模块;其三是中央控制电脑与读写器之间的数据传输模块。其总体方案见图5.1。图1 非接触式IC卡门禁系统框图3 非接触式IC卡门禁机的设计系统采用Philips公司的非接触智能IC卡Mifare
4、 1卡,以M1卡作为用户卡,以用户卡的序列号SN(全球唯一)为依据控制门的开启。因为它是一个高频卡(工作频率为13.5MHZ),有较强的抗干扰能力、读写距离远(5MM10MM)。首先,在发卡系统(中央控制PC机)里把用户的卡号及个人信息输入系统数据库,并将该卡号作为合法卡号下载给所有门禁机。当有一张M1卡在门禁机的有效工作范围内时,系统会自动向卡发出命令,卡接收到命令后向门禁机反馈其SN, 门禁机判断收到的卡号是否合法,合法则驱动电磁门锁开门,并实时上传其开门记录;如果是非法卡(XX或已挂失的卡)则拒绝开门并上传报警信息。只有最高授权者(掌握授权密码)才可以发管理员卡,管理员必须用管理员卡方可
5、登录发卡系统进行发卡/下传合法卡号、挂失、解挂、下传黑名单等操作。附录二 门禁机硬件原理图由于采用了Philips公司的非接触式Mifare 1卡,所以卡的读写模块也采用了以Philips公司最新推出的Mifare读写芯片MF RC500为核心开发的ZLG500A读写模块。门禁机模块的硬件原理图见附录二。通过AT89C52对ZLG500A的控制达到对卡的读写。系统结构简单,成本较低且具有信息量大和安全保密性好等特点。外围配有RS232转RS485接口能与PC机互连成网络,可以完成读卡、显示卡号和出入时间、身份识别、开锁以及保存和上传出入记录、下载黑名单、设置开门权限等功能。门禁机模块的主控软件
6、主要完成门禁机模块的初始化、卡的识别、开启门锁及保存有关数据和数据的传输等五大功能。其总体工作流程如图5.2所示:图3 非接触式IC卡门禁机总体工作流程在完成整个门禁机模块的设计和制作前, 首先必须明确非接触式IC卡读写模块的功能特性、接口规范和控制方式。本系统选用MIFARE 1卡作为门禁钥匙,相应地,选用广州周立功公司的ZLG500A读写模块作为卡与门禁机交换数据的接口模块。1. ZLG500A读写模块特性1)功能特性图5.3为ZLG500A非接触式IC卡读写模块,该模块采用最新PHILIPS高集成ISO14443读卡芯片MF RC500,能读写RC500内EEPROM,提供三线SPI接口
7、,并具有控制线输出口,能与任何MCU接口。此外,该模块四层电路板设计,双面表贴,EMC性能优良;并自带无源蜂鸣器信号输出,能用软件控制输出频率及持续时间。 J1 J2 图4 ZLG500A模块实物图如图5.3所示J1 为与天线的接口J2 为与MCU 的接口,J1、J2的管脚排列和功能说明见表5.1:表5.1 ZLG500A非接触式IC卡读写模块管脚说明(一)管脚符号描述J1-1GND地J1-2TX1天线发送1J1-3GND地J1-4TX2天线发送2J1-5GND地J1-6RX天线接收表5.1 ZLG500A非接触式IC卡读写模块管脚说明(二)管脚符号类型描述J2-1SCLK输入三线SPI 接口
8、时钟线总是由外部MCU 产生J2-2SDATA双向数据线可双向传输J2-3SS双向传输启动线接MCU 外部中断J2-4VCCPWR电源正端J2-5RST复位内部MCU 复位端高电平有效J2-6GNDPWR电源负端J2-7CTRL输出控制线输出J2-8BZ输出蜂鸣器信号输出 ZLG500 模块可方便地与任何MCU 进行接口,如图5.4所示为ZLG500与MCS-51 单片机图5.4 ZLG500与MCS-51单片机接口图的典型接口。SCLK、SDATA、SS为ZLG500A与MCU相联接的控制线,分别为片选SS、时钟线SCLK 和数据线SDATA。主控制器的MCU 和读卡模块内的MCU 通过此三
9、线相连,三根线上的实际电平是双方口线状态逻辑线与的结果。2) ZLG500三线串行读卡模块接口规范(1) 接口原理接口空闲时主机SS=1 SCLK=0 SDATA=0 从机SS=1 SCLK=1 SDATA=0 。其中SS和DATA是双向的而时钟线SCLK是单向的,即时钟只能由主控制器产生,该信号必须严格遵守时序规范,否则将出现通信错误读卡模块必须释放该线。SS为数据发送使能,若一方有数据要发送给另一方,则该方控制SS线为低并在发送结束后将该线置高,接收数据方不得控制该线,双方必须遵守通信协议不得同时控制该线。SDATA为数据线,由数据发送端控制数据,接收端必须释放该线。该线在一次传输开始时还
10、同时作为数据接收端的响应信号。(2)时序图如图5.5所示,无论数据传输的方向如何,SPI 线上信号的波形总是如下;图5 ZLG500时序图由图中可以看出,在SS为低的情况时,时钟和数据线上的信号才有效。且在SCLK为低时SDATA变化,在SCLK为高时SDATA应保持稳定。以上传输中从数据发送器请求开始至数据接收器响应的时间是不确定的,取决接收器内的MCU 是否忙,有必要设置一个看门狗定时器对数据接收器的响应进行监视,一旦接收器响应,则MCU 必须根据数据传输的方向,严格控制以下几个时间,以确保数据传输无误。t1数据接收器响应至MCU 产生第一个SCLK 上升沿的时间。t2两个字节传输之间SC
11、LK 低电平的持续时间。t3传输最后一个字节的最后一位的SCLK 信号的上升沿至SS 上升沿的时间。tHSCLK 信号的高电平持续时间。tLSCLK 信号的低电平持续时间。在数据传输的方向不同时,对时间t1 t3 tH 和tL 都有各自不同的要求。(3) 通信协议MCU与ZLG500的通信必须先由MCU发送命令和数据给ZLG500,ZLG500执行命令完毕后,将命令执行的状态和响应数据发回MCU。开始通信前,收发双方必须处于空闲状态。首先由MCU发出SS下降沿信号,然后等待ZLG500载SDATA线上的响应,若在50ms内为检测到此信号,则退出本次传输。若正确响应,则MCU可将命令和数据发送出
12、去。然后MCU等待ZLG500发回的状态和响应数据。也即等待SS线上的下降沿信号,若在50ms内为检测到此信号,则退出本次传输,若正确检测到SS信号,则可以接收状态和数据。ZLG500初始化的子程序如下:SCLK BIT P1.0SDATA BIT P1.1SS BIT P1.2RST BIT P3.3Zlg500: SETB RST ; ZLG500内部复位 LCALL DELAY_50MS CLR RST LCALL DELAY_50MS SETB SS ; 处于空闲状态 CLR SDATA CLR SCLK MOV 58H,#11H MOV 59H,#11H MOV 5AH,#11H M
13、OV 5BH,#11H LCALL CONFIG ; 配置 LCALL REQUEST ; 发送请求 LCALL ANTICOLL ; 防碰撞;* IF HAVE CARD * MOV A,52H CJNE A,#04H,SA123 ; A=04 IS NO CARD LJMP SA234SA123: RETSA234: LCALL READ_BLOCK ; 从存储器中读取数据 LCALL DELAY_100MS MOV R2,#20 MOV R0,#58H MOV R1,#80H LCALL COMPARE ; 进行卡号的比较和验证REL13: SETB FLAG LCALL REL123
14、JB FLAG,REL13 RET上述程序中CONFIG子程序为RC500的复位和配置子程序,是由MCU向ZLG500发出的不带数据的命令程序;REQUEST子程序是MCU向ZLG500发出的带一个字节数据的命令程序,主要是检查在有效范围内是否有卡存在;ANTICOLL子程序是防冲突操作,必须在执行了REQUEST命令后立即执行。 MCU与ZLG500之间的通信一般遵循如下的数据格式 MCU向ZLG500发出的命令模式的格式如下: SeqNr Command Len Data0N BCC INFO0 INFOn 其中: SeqNr: 1 Byte 是数据交换包的序号 Command: 1 By
15、te 是命令字符 Len: 1 Byte 是数据的长度 Data Len Byte 是数据字节 BCC: 1 Byte 是一个字节的BCC效验 SeqNr Status Len Data0N BCCINFO0 INFOn 其中: SeqNr: 1 Byte 是数据交换包的序号 status: 1 Byte 是状态字符 Len: 1 Byte 是数据的长度 Data Len Byte 是数据字节 BCC: 1 Byte 是一个字节的BCC效验按照上述数据格式传输编制的CONFIG、REQUEST和ANTICOLL子程序清单如下:; * CONFIG *CONFIG: MOV 60H,#00H ;
16、 数据交换包的序号 MOV 61H,#52H ; 配置命令字符代码 MOV 62H,#00H ; 数据的长度为0 LCALL BCC_SUM0 ; BCC效验子程序 MOV 63H,A ; BCC_SUM MOV A,#00H MOV R2,#04H MOV R0,#60H ; 发送首地址 LCALL SPI_SEND MOV R0,#30H ; 接收起始地址 LCALL _SPI_RCV RET; * REQUEST *REQUEST: MOV 60H,#00H ; 数据交换包的序号 MOV 61H,#41H ; 请求命令字符代码 MOV 62H,#01H ; 数据的长度为1 MOV 63H
17、,#01H ; 请求模式的数据mode=01H LCALL BCC_SUM MOV 64H,A MOV A,#00H MOV R2,#05H ; 发送5个字节数 MOV R0,#60H ; 60H_64H的数据发送 LCALL SPI_SEND ; MOV R0,#40H ; 接收起始地址 LCALL SPI_RCV RET; * ANTICOLL *ANTICOLL: MOV 60H,#00 ; 数据交换包的序号 MOV 61H,#42H ; 防碰撞命令字符代码 MOV 62H,#01 ; 数据的长度为1 MOV 63H,#00H ; 数据值为0 LCALL BCC_SUM MOV 64H,
18、A MOV A,#00H MOV R2,#05H ; 发送5个字节数 MOV R0,#60H ; 60H_64H的数据发送 LCALL SPI_SEND MOV R0,#50H ; 存放数据 LCALL SPI_RCV MOV A,52H CJNE A,#04H,L0 MOV 58H,53H MOV 59H,54H MOV 5AH,55H MOV 5BH,56H MOV A,58H XRL A,59H XRL A,5AH XRL A,5BH MOV 5CH,A MOV A,#00H CLR P3.4 LCALL DELAY_50MS LCALL DELAY_50MS LCALL DELAY_5
19、0MS LCALL DELAY_50MS SETB P3.4L0: RET3) 写数据 MCU ZLG500除响应信号外,三根线上的信号全由MCU 产生。MCU 在SS 线上产生一个下降沿,发出请求数据传输的信号,等待ZLG500 响应后本次数据传输开始,ZLG500 将在SCLK 为高时读取SDATA线上的数据,传输完毕后MCU应在SS 线上产生一个上升沿结束本次传输。写数据的具体步骤可见表5.2。表5.2 ZLG500A读写模块写数据步骤序号动作发出者动 作动作接收者动作说明1MCUSDATA=1 SCLK=0 SS=下降沿ZLG500本次数据传输开始请求2ZLG500SDATA=上升沿M
20、CU本次数据传输响应3MCUSDATA=串行数据ZLG500数据传输4MCUSCLK=上升沿、延时、下降沿ZLG500产生时钟ZLG500 读数据5MCU重复动作3、4 传送N 8 位ZLG500数据传输N 字节6MCUSS=上升沿SDATA=0 SCLK=0ZLG500本次数据传输结束传输过程中必须严格遵守以下时间要求:t17s,t214s,tH7s,tL9s,t3=任意下面是MCU向ZLG500写入数据的子程序,为满足上述时间要求,可通过加入空操作来实现。SPI_SEND: ANL P3,#0F7H ; 恢复SS的输出功能,传输开始请求 DEC R0 ; 发送数据的首地址 SETB SDA
21、TA CLR SCLK JB SDATA,$ ; SADATA仍为高则等待 CLR SS MOV R5,#100DL33: MOV R6,#7DHDL44: JB SDATA,ASDF ; MCU等待SDATAD的上升沿 DJNZ R6,DL44 DJNZ R5,DL33 AJMP SPI_SENDASDF: ANL P1,#0FDH ; STADA 恢复输出SENDBYTE: NOP INC R0 NOP NOP MOV A,R0 MOV R3,#8 ; 设置一个字节的位数 NOP NOPSENDBIT: NOP RLC A MOV SDATA,C ; 发送数据位 NOP NOP SETB
22、SCLK: NOP NOP CLR SCLK DJNZ R3,SENDBIT DJNZ R2,SENDBYTE SETB SS ; 本次数据传输结束 CLR SDATA NOP JB SS,$ RET4) 读数据 ZLG500MCU响应信号SCLK信号由MCU 产生,SS 信号和SDATA信号由ZLG500 产生。ZLG500会在SS 线上产生一个下降沿发出请求数据传输的信号,等待MCU响应后本次数据传输开始,MCU 将在SCLK 为高时读取SDATA 线上的数据,传输完毕后ZLG500 将会在SS 线上产生一个上升沿结束本次传输。读数据的具体步骤可见表5.3表5.3 ZLG500A读写模块读
23、数据步骤动作序号动作发出者动作动作接收者动作说明1ZLG500SDATA=1 SS=下降沿MCU本次数据传输开始请求2MCUSDATA=上升沿ZLG500本次数据传输响应3ZLG500SDATA=串行数据MCU数据传输4MCUSCLK=上升沿、延时、下降沿ZLG500MCU产生时钟,且读取数据5双方重复动作3、4 传送N 8 位双方数据传输N字节6ZLG500SS=上升沿,SDATA=0MCU本次数据传输结束传输过程中必须严格遵守以下时间要求t114s, t216s, tH6s, tL6s, t39s下面是MCU从ZLG500读取数据的子程序,同理,为满足上述时间要求,可通过加入空操作来实现。
24、SPI_RCV: ORL P3,#08H ; SS 设置为输入 ANL P1,#0FDH ; SDATA设置为输出 DEC R0 CLR SCLK SETB SDATA NOP ORL P1,#02 ; SDATA设置为输入 NOP NOPRCVBYTE: MOV R3,#8 INC R0RCVBIT: NOP NOP SETB SCLK NOP NOP MOV C,SDATA ; 读取一位 RLC A NOP NOP CLR SCLK NOP NOP DJNZ R3,RCVBIT MOV R0,A ; 读取的一个字节存入指定地址 NOP NOP JNB SS,RCVBYTE ANL P1,#
25、0FDH ;SDATA设置为输出 CLR SDATA RET2 门禁机主控模块 上面我们对ZLG500A读写模块的功能特性、接口规范和控制方式作了比较详细地讲解,在此基础上,可以进一步完成MCU对ZLG500A的读写和控制,如果附加上周边的辅助功能和驱动控制,就可以形成一个完整的智能卡读写器。首先,我们看一下MCU部分的设计和控制的实现。图5.6是MCU控制框图,从图中可以看出MCU除了完成对ZLG500A读写模块的控制外,还要承担其它功能的控制,主要包括四大部图6 门禁机控制框图分:键盘和显示部分、实时时钟和掉电保护部分、数据存储和数据传输部分、驱动控制部分。1) 键盘和显示部分键盘和显示是
26、一般智能化仪器仪表均须具有的功能,是人机交互最主要的方式。不同的智能仪器,随着其功能、MCU资源的占用、使用环境等各种条件的不同,可采用多种键盘和显示方案。本应用系统中,由于外围部件较多,MCU资源占用较大,为了尽可能的减少MCU输入输出I/O的占用,键盘的设计采用串入并出的方式,利用一片74LS164,占用MCU的四根I/O口,就可以实现16个键的全部功能。具体电路见图5.7:图7 串行口扩展的行列式键盘从系统监控软件的角度来看,仅仅完成键盘扫描,读取当前时刻的键盘状态是不够的,还有不少问题需要解决,否则,在操作键盘时就容易引起误操作、失控等现象。首先是去抖动处理。按键的触点在闭合和断开时均
27、会产生抖动,这时触点的逻辑电平是不稳定的,如不妥善处理,将会引起按键命令的错误执行或重复执行。最常用的一种方法是软件延时的方法来避开抖动阶段,延时过程一般取10ms50 ms。 其次是连击的处理。当按下某个键时,键盘处理程序便查找相应的功能号,并转到相应的功能模块程序去执行,如果这时操作者还没有释放按键,MCU就会反复执行该按键对应的功能,好像操作者在连续操作该键一样。本系统中需要按键去改变系统的实时日历,如果出现连击现象,操作者就很难设定时间。要解决连击的问题最关键是一次按键只让它响应一次,该键不释放就不执行第二次。为此要分别检测到按键按下的时刻和释放的时刻。有两种程序结构都可以解决连击的问题,一是按下键盘就执行,执行完成后等待操作者释放按键,在末放前不再执行指定的功能,从而避免了一次按键重复执行的现象。二是在按键释放后再执行指定的功能,同时可以避免连击,但与前一种相比,给人一种反应迟钝的感觉。具体采用哪种结构,可根据实际情况而定。 关于键盘控制的具体编程,可参考有关的书籍和应用说明,在此就不再说明。显示是人与计算机系统打交道所必不可少的部分,本系统要求门禁在不打卡时具备显示当前时间,打卡时显示该卡卡号及打卡时间。为此,选用了具有有良好的显示界面的图形点阵液晶显
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1