引言
最近几年,随着感应卡技术的发展,门禁系统得到了飞跃式的发展。各类射频卡通过读卡器读取后,转化为二进制数据,通常通过韦根信号接口与控制设备相连。韦根信号传输距离远、处理方便,一个处理器可以对多路韦根信号进行处理,从而达到控制多路门的目的。本文从实际应用出发,探讨一种新的韦根信号采集方法。
STM32系列是专为要求高性能、低成本、低功耗的嵌入式应用设计的ARM CortexM3内核的处理器。将STM32与门禁系统结合,是中低端智能门禁系统的较好选择。
1 韦根协议与ID卡简介
韦根协议是摩托罗拉公司制定的一种通信协议。该协议适用于涉及门禁控制系统的读卡器以及卡片的多种特性,具有多种格式,其中标准的26位是最常用的格式。
韦根26位输出格式:E XXXX XXXX XXXX XXXX XXXX XXXX O
其中E表示前12位偶校验,X表示24位数据,O表示后12位奇校验,以上数据高位在前,从左至右顺序发送。24位数据中前8位为ID卡的HID(隐含码)低8位,后16位为ID卡PID(公开码)。韦根数据输出由两根数据线组成,分别为DATA0和DATA1,两根线输出为“0”或“1”。输出0时,DATA0线上出现负脉冲;输出1时,DATA1线上出现负脉冲;无信号时,两根线都为+5 V高电平。负脉冲宽度为100 μs左右,脉冲间隔为1 600 μs左右。示波器上看到的韦根26信号如图1所示。
图1 韦根26数据波形
ID卡(Identification Card)即身份识别卡,是一种不可写入感应卡。数据存储采用EEPROM,存储容量共64位,包括制造商、发行商以及用户代码。卡号在封卡前写入,之后不可再更改,确保卡号的唯一性和安全性。ID卡的载波频率为125 kHz(THRC12)或13.56 MHz(THRC13),本设计使用的是常用的125 kHz ID卡。
卡内固化了64位数据,由5个区组成:9个引导位、10个行偶校验位P0~P9、4个列偶校验位PC0~PC3、40个数据位D00~D39和1个停止位S0。9个引导位是出厂时已经掩膜在芯片内的,其值为“111111111”。当它输出数据时,先输出9个引导位,然后是10组由4个数据位及1个行偶校验位组成的数据串,其次是4个列偶校验位,最后是停止位“0”。D00~D13是一个8位晶体版本号或ID识别码。D20~D93为卡号,是8组32位的芯片信息。通常,一张白卡上有两段数据,前段数据为韦根34的卡号,后段数据为韦根26的卡号。后段数据常用逗号隔开,逗号前为一个字节的ID卡的HID码,逗号后为两个字节的ID卡的PID码。
2 系统硬件电路设计
CLRC632是NXP公司生产的应用于13.56 MHz的非接触式射频读卡芯片,本设计中采用4个CLRC632来读取4个门的刷卡数据,并送入韦根信号采集电路的相应通道中。4个读卡器所输出的数据对应为:1DATA0和1DATA1、2DATA0和2DATA1、3DATA0和3DATA1、4DATA0和4DATA1。1号门所对应的的读卡器电路如图2所示。
图2 1号门读卡器电路
其他3个门对应的读卡器电路与此类似,各门所输出的数据送入对应的韦根信号采集通道。通常,韦根信号传输的距离比较远,有很多干扰,若韦根信号线上出现低电平脉冲时受到干扰,电压可能会被抬高,因此,在本设计中,在韦根信号采集电路的设计上采用了比较器。在比较器的反相输入端接一个2 V左右的参考电压,比较器同相输入端接韦根信号。为了更好地得到韦根信号波形,在比较器的同相输入端输入信号前面,加入RC滤波电路以及TVS瞬态抑制二极管,韦根信号的脉冲宽度在100 μs左右,所以在实际设计中,R和C的取值分别为10 kΩ和1000 pF,t=RC=10 μs,滤去10 μs左右的毛刺。
在没有韦根数据到达前,韦根信号线上为高电平+5 V,比较器输出高电平;当有韦根脉冲数据到达时,韦根信号线上为低电平,比较器输出为低电平。将STM32的GPIO引脚设置为内部上拉输入,与比较器的输出端相连,每路韦根信号有两个输出,4路共8个信号分别接在STM32的GPIO的 PB8~PB15引脚上。同时,所有输出端通过二极管线与的方式接入STM32的一个GPIO引脚PC3上,这样,只要有一路信号为低电平,该GPIO引脚上就会读到低电平,在软件中将该引脚设置为外部中断输入,采用二极管线与的方式,可以节省一个与门芯片,节约了成本。二极管选用双共阳极二级管BAW56,供两路信号共用。只要处理器的GPIO端口够用,使用该方式就可以扩展出更多路的韦根信号。4路韦根信号采集电路如图3所示。
该采集电路中,比较器选用内有4个比较器的LM339,使用两片就可以满足4路韦根信号的数据采集。LM339的输出为集电极开路型,必须外加上拉电阻。LM339供电为+3.3 V,韦根信号为+5 V,但LM339内部有钳位电路,不会影响韦根信号的采集。
3 系统软件设计
3.1 4路韦根信号的采集
STM32的主频为72 MHz,中断响应很快,为μs级,而韦根信号的两个脉冲之间的时间间隔为1~2 ms。因此,在程序设计时,完全可以在每一个脉冲到来时就中断一次,并进入中断响应函数。中断响应函数所要完成的任务是:依次扫描STM32的GPIO口PB8~PB15,判断哪个GPIO口为低电平,PB8~PB15依次对应读卡器1~4的DATA0、DATA1。对8个GPIO端口依次查询是否为低电平,当DATA0数据线上出现低电平脉冲时,将相应的DATA[i](i代表读卡器号,取值范围为0~3)数组变量右移1位,同时将计数变量数据I[i]的值加1;当DATA1数据线上出现低电平脉冲时,将相应的DATA[i]数组或者0x01再右移1位,同时将计数变量数组I[i]的值加1;当计数变量数组I[i]的值等于26时,对数据进行存储。将DATA[i]数组的值向右移18位,存储在PID[i]数组中,右移两位存储在UID[i]数组中,同时将I[i]和DATA[i]数组清零。
图3 4路韦根信号采集电路
从以上4路韦根信号采集的分析中可以得出,利用上述的中断查询方法可以准确地采集各路数据,并且4个通道互不干扰,逻辑清晰。其中,中断响应函数的设计流程如图4所示。其中,4个通道依次进行采集。
图4 韦根信号采集软件流程图
3.2 4路韦根信号的处理
在本设计中,已经注册过的用户信息都保存在STM32的Flash中。STM32F103RET6的Flash地址从0x 0800 0000到0x 0808 0000(共512 KB),该系统全部程序为60 KB左右,程序设计时,从0x 0801 f800(第126K)处开始存储ID卡的数据,从0x 0801 f800开始的4个字节存储注册卡记录总数,从0x 0801 f804处开始正式存储记录数据,每4个字节为一条记录;第一个字节为门号,共4个门,门号从01~04;第二个字节为ID卡的PID码;第三和第四个字节为ID卡的UID码。
当采集到的韦根数据到达时,从Flash地址0x 0801 f800中读出注册卡的总数num,根据num依次循环检查各门的数据,如果该卡已经在该门注册过,则控制电磁锁开门,同时保存当前韦根数据和系统时间,便于向上位机上传数据。处理1号门韦根数据的程序流程图略——编者注。其余各门的操作与之类似。
结语
韦根信号采集的方法在现实门禁控制器中得到了很好的运用,该方法能准确无误地获得多路刷卡信息。该方法简便实用、容易实现,且稳定可靠,也便于扩展更多路的韦根信号采集,降低整个门禁控制器成本。