基于单片机的韦根信号的接收

控制/MCU

1878人已加入

描述

Wiegand,即韦根传感器是一种当交变磁场经过时产生输出电压脉冲的传感器。脉冲的幅度是由激励磁场的场强决定的。因此,韦根传感器不需要外界电源供电。由于韦根传感器非常容易和数字系统相匹配,并且系统没有可动的部件或半导体器件,这使得它们能适用于恶劣的环境和长期无人监控的场所。
    在设计读卡器时,读卡控制器既需要与上位机串行通信,又需要与读卡器串行通信。大多数单片机只有一个串行通信口,而设计者希望控制器与读卡器的通信不占用串行接口,因此,应用韦根信号是一个不错的选择。文章介绍了一种基于单片机的韦根信号接收的实现方法。

1 韦根信号的格式说明
    韦根信号在数据的传输中只需要两条数据线,分别是DATA0和DATA1。当空闲时,两线相对于0 V的电源都是TTL电平的水平,即5 V;当有数据传输时,两线交替发送400μs的低脉冲。当DATA0线发送脉冲时,数据输出是‘0’;当DATA1线发送脉冲时,数据输出是‘1’。两根线不可同时发送脉冲。脉冲的间隔是1ms,宽度是100μs,周期是600μs。图1中脉冲宽度在20μs~200μs之间,两个脉冲间的时间间隔在200μs~200ms之间。

 

单片机

    由于标准韦根26-bit格式是一个开放式的格式,这就意味着任何人都可以购买某一特定格式的HID卡,并且这些特定格式的种类是公开可选的。26-bit格式就是一个广泛使用的工业标准,并且对所有HID的用户开放。
    韦根的数据一般由三部分组成:校验位、出厂码和数据位。不同的韦根格式有不同的组成。Weigand协议是国际上统一的标准,格式有很多种,标准的weigand26,即26-bit是最常用的格式。标准的26位韦根输出是由26位二进制数组成,其中第1位和第26位是校验位,2-9位是厂家码,10-25位是卡号位,其输出格式如下:
    12      9 10      25 26
    E XXXX XXXX XXXX…XXXX 0
    第1位是前12bit的偶校验位;前12位(第2-9位)对应电子卡HID码的低8位,后12位(第10-25位)对应电子卡的PID码,第26位是后12bit的奇校验位。数据从左至右顺序发送,高位在前。
    如果电卡的地区码位2个字符,即8位则可用那设置255个地区码((15×16)+15=255);电子卡的卡号位4个字符,即16位则可设置65 536个卡号((15×16×16×16)+(15×16×16)+(15×16)+15=65 535)。
    例如:一个HID:16 385,PID:00004的电子卡其26位韦根输出为:
    10000000100000000000001000
    检验位HID=16 385(二进制的低8位)PID=4(二进制)检验位。
    这26位数据在读出器的韦根输出线DATA0,DATA1上输出。

2 接收电路的设计
    韦根信号的接受有两种方法,分别是查询法和中断法,如果用查询的方法接收会出现丢帧的现象;所以作者选择外部中断的方法来实现韦根信号的接受,接收电路如图2所示。接收电路选用了美国Atmel公司的89S51作为主控芯片。读卡器使用了远距离125 kHz射频读卡器,读卡控制器为自行设计。读卡控制器与上位机通信选用RS485总线;单片机为含WDT的89S51;存储器为128 k字节的非易失存储芯片HK1245-7,读卡控制器还配置实时时钟电路、门禁控制电路、数码管显示驱动电路等等。

单片机

3 程序代码的实现

    中断接收韦根码程序如下:
    ;外中断0服务程序,接收DATA0
    DTO: PUSH PSW
          USH ACC
          SETB RS1
          CLR RS0         ;第二组寄存器
          CLR C           ;DATA0
          MOV R7,#4      ;26位码用4字节
          MOV R0,#WGBUF  ;缓冲器首地址
    DTO1:MOV A,@R0
          RLC A
          MOV@R0,A
          INC R0
          DJNZ R7,DTO1
          DJNZ WXH0,DTOE
          MOV WXH0,#26   ;韦根数据位数
          ACALL WG26      ;26位接收完毕?
    DTOE:POP ACC
          POP PSW
          RETI
    ;外中断1服务程序,接收DATA1

 DT1: PUSH PSW        ;
          PUSH ACC
          SETB RS1
          CLR RS0         ;第二组寄存器
          SETB C          ;DATA1
          MOV R7,#4      ;26位用4字节
          MOV R0,#WGBUF  ;缓冲器首地址
    DT11:MOV A,@R0
          RLC A
          MOV@R0,A
          INC R0
          DJNZ R7,DT11
          DJNZ WXH0,DTlE  ;26位接收完毕?
          MOV WXH0,#26    ;韦根数据位数
          ACALL WG26       ;韦根处理
    DT1E:POP ACC
          POP PSW
          RETI             ;中断返回
    提供的两个中断服务程序可共同完成26位韦根码的接收。其中,外中断0负责DATA0的接收;外中断1负责DATA1的接收。
    当26位的韦根码接收完整后调用子程序WG26,在子程序中进行韦根码的奇偶校验、存储、发送等处理。程序使用4个字节作为韦根码存储单元,即前三个字节的全部和第四字节的最低2位。

4 结束语
    应用单片机的中断技术实现了韦根信号的接受,设计的电路和程序均已通过调试,并设计调试方案如图3所示。

 

单片机

    经测试,读卡成功率100%,未发现差错,通信正确率100%。设计完全达到预期效果,并在实际项目实施过程中运行正常。文章中给出了完整的接收程序。由于篇幅所限,初始化程序、信号处理程序未与列出,需要者可与作者联系,愿予提供、交流。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分