PT2262解码并转换为韦根26信号方法的研究

2014-11-07 11:24周一帆陈赤
现代电子技术 2014年21期
关键词:王芳中断脉冲

周一帆+陈赤

摘 要: 为了便于编码芯片PT2262在门禁控制系统领域中的应用,从PT2262与韦根信号的编码原理和波形特征入手,通过软硬件结合的方法实现了将PT2262编码发射器的无线信号接收并转换为韦根26信号输出,并给出了相应的系统框图、电路原理图以及单片机程序。测试表明,此方案应用方便,可靠性好,成本较低,具有较高的实用价值。

关键字: PT2262; MSP430; 超外差接收模块; 韦根26信号

中图分类号: TN911.7?34 文献标识码: A 文章编号: 1004?373X(2014)21?0068?05

Research on PT2262 signal decoding and converted to Wiegand?26 signal method

ZHOU Yi?fan, CHEN Chi

(School of Electronic Engineering, Guangxi Normal University, Guilin 541004, China)

Abstract: To facilitate the application of encoding chip PT2262 in the field of entrance guard control system, proceeding from the coding principle and waveform characteristic of PT2262 and Wiegand signal, the reception of the wireless signal from PT2262 encoding transmitter and conversion of the signal into Wiegand signal output were implemented with the method of combining the software and hardware. The corresponding system block diagram, circuit principle diagram and single?chip microcomputer program are given in this paper. The testing results show that the scheme has convenient application, good reliability, low cost and high practical value.

Keywords: PT2262; MSP430; super heterodyne receiver module; Wiegand?26 signal

0 引 言

PT2262/PT2272编解码芯片用作门禁系统的无线身份识别器时具有容量不足、互换性不强的缺点。为克服此不足,从PT2262编码发射的信号特征入手,利用单片机直接对超外差电路接收到的信号进行处理,并将解码出的PT2262全部编码信息转换为韦根26信号输出,使其便利地应用于各类门禁控制系统中。

1 韦根26通信协议

韦根26协议广泛应用于各类门禁系统中,其波形如图1所示。韦根数据输出由两根线组成,DATA0与DATA1[1]。没有信号输出时两根线的电压为+5 V;当有信号0输出时, DATA0产生负脉冲;当有信号1输出时, DATA1产生负脉冲。

韦根26信号的格式为:

E XXXX XXXX XXXX XXXX XXXX XXXX A

E为前12位的偶校验位,A为后12位的奇校验位[2]。以上数据从左至右顺序发送。高位在前,低位在后。1和0分别从D1OUT,D0OUT以负脉冲的形式输出。

图1 韦根信号波形图

2 PT2262编码发射原理

PT2262编码发射器原理如图2所示。

图2 PT2262编码发射器原理框图

无线编码输出信号含有PT2262的地址码与数据码。每一次发射至少发射4组数据[3],每组数据的长度大约为16 ms,其中包括12位数据以及一个长度约为5 ms的同步码组成;每一位数据由两个脉冲组成,高电平表示为两个宽脉冲,低电平表示为两个窄脉冲,悬空表示为一个宽脉冲一个窄脉冲,其输出波形如图3所示。根据其发射的格式,最多可以发射531 441种无线信号[4]。用超外差接收模块接收的话,其接收到的数据为24个脉冲组成,可根据需要对其进行硬件或软件解码。

图3 编码发射电路输出波形图

3 接收解码与编码输出硬件电路

系统的硬件电路如图4所示,315 MHz无线超外差接收模块将无线信号转换为TTL电平,送由MSP430单片机[5]进行解码与编码输出,LED管用来指示信号是否正常输出[6]。

图4 接收解码与编码输出电路

4 单片机程序流程图

单片机对来自超外差模块的信号采用中断接收的方式[7],如图5所示。

图5 中断接收程序流程图

考虑到接收环境中的干扰信号会不断激发该中断产生;当有韦根信号输出时就会受到中断的干扰,使得输出变慢,输出波形变得不连续[8],可靠性下降。为解决此问题,在输出韦根信号时,先关闭全局中断;正确输出韦根信号之后,再打开全局中断,如图6所示。本文将把24个脉冲信号转换为12位的三进制数之后再将其转换为24位二进制数[9];不足24位的将高位全部补0,得到标准的韦根26信号后将其输出。

图6 发送程序流程图

5 MSP430单片机的程序

以下为单片机的程序代码[10]:

#include "io430g2231.h"

#include "in430.h"

#define DELAY 4 //修改韦根信号数据间隔时间

unsigned char rev_flag=0; //正确接收信号标志

signed int Count=0; //接收信号数量

unsigned char dataCom=0; //无线信号接收标志

unsigned long user_id=0; //无线接收码

unsigned long user_id1=0; //无线接收码 比较用

signed int ReceiveCount=0; //已接受数据数量

void delay_ms(unsigned int n) //10n个微秒的延时函数

{

int a,b;

for(a=0;a

{

for(b=0;b<1;b++);

}

}

void delay(unsigned int n) //n个毫秒的延时函数

{

int a,b;

for(a=0;a

{

for(b=0;b<120;b++);

}

}

void Init(void) //重置

{

Count=0;

dataCom=0;

user_id=0;

user_id1=0;

ReceiveCount=0;

}

void GPIO_Config(void) //配置GPIO

{

P1DIR=BIT0; //设置P0.0为输出

P1DIR|=BIT6|BIT7;

//设置P0.6和P0.7为输出,连接DATA0和DATA1

P1DIR&=~BIT4;

//设置P0.4为输入,连接超外差接收模块RXD

}

void IOInterrupt_Config(void) //IO中断配置函数

{

P1IE|=BIT4; //开启P1.4的IO中断

P1IES|=BIT4; //设置P1.4的IO中断为下降沿触发

P1IFG&=~BIT4; //清除P1.4中断标志位

}

//IO中断服务函数

#pragma vector=PORT1_VECTOR

//中断向量,表示此函数是P1的中断服务函数

__interrupt void IOInterrupt(void)

{

signed int i;

signed int j;

if(P1IFG&BIT4) //D1管脚中断

{

P1IFG&=~BIT4; //清除中断标志位

if(dataCom==1) //正在接收数据

{

j=0;

while((P1IN&BIT4)==0)

{

delay_ms(1);

j++;

}

if((j>100)|(j<10)) //脉冲长度不符合

{

Init();

}

if((j<100)&(j>30)) //接收长脉冲

{

Count++;

user_id<<=1; //左移一位

user_id|=0x01; //把当前位置1

}

if((j<20)&(j>10)) //接收短脉冲

{

Count++;

user_id<<=1; //把当前位置0

}

if(Count==24) //24个脉冲接收完毕

{

Count=0;

dataCom=0;

ReceiveCount++;

if(ReceiveCount==1)

{

user_id1=user_id;

user_id=0;

}

if(ReceiveCount==2)

{

ReceiveCount=0;

if(user_id1==user_id)

{

user_id1=0;

rev_flag=1;

}

else

{

user_id1=user_id;

user_id=0;

ReceiveCount=1;

}

}

}

if(Count>24) //脉冲数量不正常

{

Init();

}

}

if(dataCom==0) //确认是否接收数据

{

i=0;

while((P1IN&BIT4)==0)

{

delay_ms(1);

i++;

}

if((i>350)&(i<650))

{

dataCom=1;

user_id=0;

}

}

}

}

void SendDATA0(void)

{

P1OUT&=~BIT6; //拉低数据线

delay(DELAY); //延时

P1OUT|=BIT6; //拉高数据线

}

void SendDATA1(void)

{

P1OUT&=~BIT7; //拉低数据线

delay(DELAY); //延时

P1OUT|=BIT7; //拉高数据线

}

unsigned long convert(unsigned long userid)

{

unsigned char i;

unsigned char j;

unsigned char k;

signed int number=0;

unsigned long quartic=1;

unsigned long sendid=0;

for(i=12;i>0;i--)

{

for(j=2;j>0;j--)

{

if((userid>>(2*(12-i)+(2-j)))&0x01) //判断是否为1

{

number++;

}

}

if(number==0)

{

for(k=12;k>i;k--)

{

quartic=quartic*3;

}

sendid=sendid+2*quartic;

quartic=1;

}

if(number==1)

{

for(k=12;k>i;k--)

{

quartic=quartic*3;

}

sendid=sendid+1*quartic;

quartic=1;

}

if(number==2)

{

for(k=12;k>i;k--)

{

quartic=quartic*3;

}

sendid=sendid+0*quartic;

quartic=1;

}

number=0;

}

return sendid;

}

void SendWiegandData(unsigned long userid) //发送韦根数据

{

unsigned char i;

unsigned char start=0; //韦根信号偶校验位

unsigned char end=0; //韦根信号奇校验位

signed int Even=0; //前2~13位偶校验计数

signed int Odd=0; //后14~25位奇校验计数

unsigned long sendid1=convert(userid);

unsigned long sendid2=sendid1;

for(i=24;i>0;i--)

{

if((sendid1>>(i-1))&0x01) //判断第i-1位是否为1

{

if((i<=24)&(i>=13))

{

Even++;

}

else if((i>=1)&(i<=12))

{

Odd++;

}

}

}

if(Even%2)

{

start=0;

}

else

{

start=1;

}

if(Odd%2)

{

end=1;

}

else

{

end=0;

}

if(start) //判断偶校验位

{

SendDATA1(); //发送D1

}

else

{

SendDATA0(); //发送D0

}

delay(DELAY);

for(i=24;i>0;i--) //循环发送韦根信号

{

if((sendid2>>(i-1))&0x01) //判断第i-1位是否为1

{

SendDATA1();

}

else

{

SendDATA0();

}

delay(DELAY); //延时

}

if(end) //判断奇校验位

{

SendDATA1();

}

else

{

SendDATA0();

}

P1OUT&=~BIT0; //打开ED1

delay(1000); //延时1 s

P1OUT|=BIT0; //关闭ED1

}

int main( void )

{

WDTCTL = WDTPW + WDTHOLD; //关闭看门狗

GPIO_Config(); //配置GPIO

IOInterrupt_Config(); //配置IO中断

_EINT(); //使能全局中断

while(1)

{

if(rev_flag) //判断是否正确接收无线数据

{

_DINT(); //关闭全局中断

rev_flag=0; //清除完成标志

SendWiegandData(user_id); //输出韦根信号

Init(); //重新初始化

_EINT(); //使能全局中断

}

}

}

6 结 语

本方案实现的PT2262无线编码信号到韦根26输出信号的转换准确可靠,可以与人脸识别、指纹识别、读卡机等各种韦根信号输出设备进行替换,不需要进行任何硬件设备的改变,可方便地应用于各类门禁系统中。

参考文献

[1] 柴卉,万振凯.韦根协议在门禁系统中的应用[J].仪器仪表用户,2007(5):129?130.

[2] 岳云峰,王睿,孙海涛.韦根(Wiegand)协议及其应用[J].齐齐哈尔大学学报,2002(2):58?60.

[3] 王晓东.用软、硬件结合的方法实现对PT2262的解码[J].山西电子技术,2008(5):41?42.

[4] 何万库,潘小飞,刘儒来.基于315MHz无线模块的智能车辆管理系统[J].数据采集与处理,2010(S1):206?208.

[5] 张扬,魏莹,刘新力,等.PIC、MSP430单片机的比较与分析[J].自动化技术与应用,2007(5):144?146.

[6] 何立民.MCS2?51 单片机应用系统设计[M].北京:航空航天大学出版社,1990.

[7] 梅丽凤,王艳秋,任国臣,等.单片机原理及接口技术[M].北京:清华大学出版社,2009.

[8] 任晓荣.基于单片机的脉冲信号采集与处理[J].计算机测量与控制,2003(5):59?62.

[9] 康华光,邹寿彬,秦臻.电子技术基础(数电部分)[M].北京:高等教育出版社,2010.

[10] 秦龙.MSP430单片机C语言应用程序设计实例精讲[M].北京:电子工业出版社,2006.

}

else

{

start=1;

}

if(Odd%2)

{

end=1;

}

else

{

end=0;

}

if(start) //判断偶校验位

{

SendDATA1(); //发送D1

}

else

{

SendDATA0(); //发送D0

}

delay(DELAY);

for(i=24;i>0;i--) //循环发送韦根信号

{

if((sendid2>>(i-1))&0x01) //判断第i-1位是否为1

{

SendDATA1();

}

else

{

SendDATA0();

}

delay(DELAY); //延时

}

if(end) //判断奇校验位

{

SendDATA1();

}

else

{

SendDATA0();

}

P1OUT&=~BIT0; //打开ED1

delay(1000); //延时1 s

P1OUT|=BIT0; //关闭ED1

}

int main( void )

{

WDTCTL = WDTPW + WDTHOLD; //关闭看门狗

GPIO_Config(); //配置GPIO

IOInterrupt_Config(); //配置IO中断

_EINT(); //使能全局中断

while(1)

{

if(rev_flag) //判断是否正确接收无线数据

{

_DINT(); //关闭全局中断

rev_flag=0; //清除完成标志

SendWiegandData(user_id); //输出韦根信号

Init(); //重新初始化

_EINT(); //使能全局中断

}

}

}

6 结 语

本方案实现的PT2262无线编码信号到韦根26输出信号的转换准确可靠,可以与人脸识别、指纹识别、读卡机等各种韦根信号输出设备进行替换,不需要进行任何硬件设备的改变,可方便地应用于各类门禁系统中。

参考文献

[1] 柴卉,万振凯.韦根协议在门禁系统中的应用[J].仪器仪表用户,2007(5):129?130.

[2] 岳云峰,王睿,孙海涛.韦根(Wiegand)协议及其应用[J].齐齐哈尔大学学报,2002(2):58?60.

[3] 王晓东.用软、硬件结合的方法实现对PT2262的解码[J].山西电子技术,2008(5):41?42.

[4] 何万库,潘小飞,刘儒来.基于315MHz无线模块的智能车辆管理系统[J].数据采集与处理,2010(S1):206?208.

[5] 张扬,魏莹,刘新力,等.PIC、MSP430单片机的比较与分析[J].自动化技术与应用,2007(5):144?146.

[6] 何立民.MCS2?51 单片机应用系统设计[M].北京:航空航天大学出版社,1990.

[7] 梅丽凤,王艳秋,任国臣,等.单片机原理及接口技术[M].北京:清华大学出版社,2009.

[8] 任晓荣.基于单片机的脉冲信号采集与处理[J].计算机测量与控制,2003(5):59?62.

[9] 康华光,邹寿彬,秦臻.电子技术基础(数电部分)[M].北京:高等教育出版社,2010.

[10] 秦龙.MSP430单片机C语言应用程序设计实例精讲[M].北京:电子工业出版社,2006.

}

else

{

start=1;

}

if(Odd%2)

{

end=1;

}

else

{

end=0;

}

if(start) //判断偶校验位

{

SendDATA1(); //发送D1

}

else

{

SendDATA0(); //发送D0

}

delay(DELAY);

for(i=24;i>0;i--) //循环发送韦根信号

{

if((sendid2>>(i-1))&0x01) //判断第i-1位是否为1

{

SendDATA1();

}

else

{

SendDATA0();

}

delay(DELAY); //延时

}

if(end) //判断奇校验位

{

SendDATA1();

}

else

{

SendDATA0();

}

P1OUT&=~BIT0; //打开ED1

delay(1000); //延时1 s

P1OUT|=BIT0; //关闭ED1

}

int main( void )

{

WDTCTL = WDTPW + WDTHOLD; //关闭看门狗

GPIO_Config(); //配置GPIO

IOInterrupt_Config(); //配置IO中断

_EINT(); //使能全局中断

while(1)

{

if(rev_flag) //判断是否正确接收无线数据

{

_DINT(); //关闭全局中断

rev_flag=0; //清除完成标志

SendWiegandData(user_id); //输出韦根信号

Init(); //重新初始化

_EINT(); //使能全局中断

}

}

}

6 结 语

本方案实现的PT2262无线编码信号到韦根26输出信号的转换准确可靠,可以与人脸识别、指纹识别、读卡机等各种韦根信号输出设备进行替换,不需要进行任何硬件设备的改变,可方便地应用于各类门禁系统中。

参考文献

[1] 柴卉,万振凯.韦根协议在门禁系统中的应用[J].仪器仪表用户,2007(5):129?130.

[2] 岳云峰,王睿,孙海涛.韦根(Wiegand)协议及其应用[J].齐齐哈尔大学学报,2002(2):58?60.

[3] 王晓东.用软、硬件结合的方法实现对PT2262的解码[J].山西电子技术,2008(5):41?42.

[4] 何万库,潘小飞,刘儒来.基于315MHz无线模块的智能车辆管理系统[J].数据采集与处理,2010(S1):206?208.

[5] 张扬,魏莹,刘新力,等.PIC、MSP430单片机的比较与分析[J].自动化技术与应用,2007(5):144?146.

[6] 何立民.MCS2?51 单片机应用系统设计[M].北京:航空航天大学出版社,1990.

[7] 梅丽凤,王艳秋,任国臣,等.单片机原理及接口技术[M].北京:清华大学出版社,2009.

[8] 任晓荣.基于单片机的脉冲信号采集与处理[J].计算机测量与控制,2003(5):59?62.

[9] 康华光,邹寿彬,秦臻.电子技术基础(数电部分)[M].北京:高等教育出版社,2010.

[10] 秦龙.MSP430单片机C语言应用程序设计实例精讲[M].北京:电子工业出版社,2006.

猜你喜欢
王芳中断脉冲
他们使阿秒光脉冲成为可能
脉冲离散Ginzburg-Landau方程组的统计解及其极限行为
最佳波段组合的典型地物信息提取
王芳:带货“一姐”如何炼就?
立秋吃什么
The Application of Storytelling in English Writing
黄芩苷脉冲片的制备
跟踪导练(二)(5)
千里移防,卫勤保障不中断
AT89C51与中断有关的寄存器功能表解