周一帆+陳赤
摘 要: 為了便于編碼芯片PT2262在門禁控制系統(tǒng)領(lǐng)域中的應(yīng)用,從PT2262與韋根信號(hào)的編碼原理和波形特征入手,通過軟硬件結(jié)合的方法實(shí)現(xiàn)了將PT2262編碼發(fā)射器的無(wú)線信號(hào)接收并轉(zhuǎn)換為韋根26信號(hào)輸出,并給出了相應(yīng)的系統(tǒng)框圖、電路原理圖以及單片機(jī)程序。測(cè)試表明,此方案應(yīng)用方便,可靠性好,成本較低,具有較高的實(shí)用價(jià)值。
關(guān)鍵字: PT2262; MSP430; 超外差接收模塊; 韋根26信號(hào)
中圖分類號(hào): TN911.7?34 文獻(xiàn)標(biāo)識(shí)碼: A 文章編號(hào): 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編解碼芯片用作門禁系統(tǒng)的無(wú)線身份識(shí)別器時(shí)具有容量不足、互換性不強(qiáng)的缺點(diǎn)。為克服此不足,從PT2262編碼發(fā)射的信號(hào)特征入手,利用單片機(jī)直接對(duì)超外差電路接收到的信號(hào)進(jìn)行處理,并將解碼出的PT2262全部編碼信息轉(zhuǎn)換為韋根26信號(hào)輸出,使其便利地應(yīng)用于各類門禁控制系統(tǒng)中。
1 韋根26通信協(xié)議
韋根26協(xié)議廣泛應(yīng)用于各類門禁系統(tǒng)中,其波形如圖1所示。韋根數(shù)據(jù)輸出由兩根線組成,DATA0與DATA1[1]。沒有信號(hào)輸出時(shí)兩根線的電壓為+5 V;當(dāng)有信號(hào)0輸出時(shí), DATA0產(chǎn)生負(fù)脈沖;當(dāng)有信號(hào)1輸出時(shí), DATA1產(chǎn)生負(fù)脈沖。
韋根26信號(hào)的格式為:
E XXXX XXXX XXXX XXXX XXXX XXXX A
E為前12位的偶校驗(yàn)位,A為后12位的奇校驗(yàn)位[2]。以上數(shù)據(jù)從左至右順序發(fā)送。高位在前,低位在后。1和0分別從D1OUT,D0OUT以負(fù)脈沖的形式輸出。
圖1 韋根信號(hào)波形圖
2 PT2262編碼發(fā)射原理
PT2262編碼發(fā)射器原理如圖2所示。
圖2 PT2262編碼發(fā)射器原理框圖
無(wú)線編碼輸出信號(hào)含有PT2262的地址碼與數(shù)據(jù)碼。每一次發(fā)射至少發(fā)射4組數(shù)據(jù)[3],每組數(shù)據(jù)的長(zhǎng)度大約為16 ms,其中包括12位數(shù)據(jù)以及一個(gè)長(zhǎng)度約為5 ms的同步碼組成;每一位數(shù)據(jù)由兩個(gè)脈沖組成,高電平表示為兩個(gè)寬脈沖,低電平表示為兩個(gè)窄脈沖,懸空表示為一個(gè)寬脈沖一個(gè)窄脈沖,其輸出波形如圖3所示。根據(jù)其發(fā)射的格式,最多可以發(fā)射531 441種無(wú)線信號(hào)[4]。用超外差接收模塊接收的話,其接收到的數(shù)據(jù)為24個(gè)脈沖組成,可根據(jù)需要對(duì)其進(jìn)行硬件或軟件解碼。
圖3 編碼發(fā)射電路輸出波形圖
3 接收解碼與編碼輸出硬件電路
系統(tǒng)的硬件電路如圖4所示,315 MHz無(wú)線超外差接收模塊將無(wú)線信號(hào)轉(zhuǎn)換為TTL電平,送由MSP430單片機(jī)[5]進(jìn)行解碼與編碼輸出,LED管用來(lái)指示信號(hào)是否正常輸出[6]。
圖4 接收解碼與編碼輸出電路
4 單片機(jī)程序流程圖
單片機(jī)對(duì)來(lái)自超外差模塊的信號(hào)采用中斷接收的方式[7],如圖5所示。
圖5 中斷接收程序流程圖
考慮到接收環(huán)境中的干擾信號(hào)會(huì)不斷激發(fā)該中斷產(chǎn)生;當(dāng)有韋根信號(hào)輸出時(shí)就會(huì)受到中斷的干擾,使得輸出變慢,輸出波形變得不連續(xù)[8],可靠性下降。為解決此問題,在輸出韋根信號(hào)時(shí),先關(guān)閉全局中斷;正確輸出韋根信號(hào)之后,再打開全局中斷,如圖6所示。本文將把24個(gè)脈沖信號(hào)轉(zhuǎn)換為12位的三進(jìn)制數(shù)之后再將其轉(zhuǎn)換為24位二進(jìn)制數(shù)[9];不足24位的將高位全部補(bǔ)0,得到標(biāo)準(zhǔn)的韋根26信號(hào)后將其輸出。
圖6 發(fā)送程序流程圖
5 MSP430單片機(jī)的程序
以下為單片機(jī)的程序代碼[10]:
#include "io430g2231.h"
#include "in430.h"
#define DELAY 4 //修改韋根信號(hào)數(shù)據(jù)間隔時(shí)間
unsigned char rev_flag=0; //正確接收信號(hào)標(biāo)志
signed int Count=0; //接收信號(hào)數(shù)量
unsigned char dataCom=0; //無(wú)線信號(hào)接收標(biāo)志
unsigned long user_id=0; //無(wú)線接收碼
unsigned long user_id1=0; //無(wú)線接收碼 比較用
signed int ReceiveCount=0; //已接受數(shù)據(jù)數(shù)量
void delay_ms(unsigned int n) //10n個(gè)微秒的延時(shí)函數(shù)
{
int a,b;
for(a=0;a { for(b=0;b<1;b++); } } void delay(unsigned int n) //n個(gè)毫秒的延時(shí)函數(shù) { 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; //設(shè)置P0.0為輸出 P1DIR|=BIT6|BIT7; //設(shè)置P0.6和P0.7為輸出,連接DATA0和DATA1 P1DIR&=~BIT4; //設(shè)置P0.4為輸入,連接超外差接收模塊RXD } void IOInterrupt_Config(void) //IO中斷配置函數(shù) { P1IE|=BIT4; //開啟P1.4的IO中斷 P1IES|=BIT4; //設(shè)置P1.4的IO中斷為下降沿觸發(fā) P1IFG&=~BIT4; //清除P1.4中斷標(biāo)志位 } //IO中斷服務(wù)函數(shù) #pragma vector=PORT1_VECTOR //中斷向量,表示此函數(shù)是P1的中斷服務(wù)函數(shù) __interrupt void IOInterrupt(void) { signed int i; signed int j; if(P1IFG&BIT4) //D1管腳中斷 { P1IFG&=~BIT4; //清除中斷標(biāo)志位 if(dataCom==1) //正在接收數(shù)據(jù) { j=0; while((P1IN&BIT4)==0) { delay_ms(1); j++; } if((j>100)|(j<10)) //脈沖長(zhǎng)度不符合 { Init(); } if((j<100)&(j>30)) //接收長(zhǎng)脈沖 { Count++; user_id<<=1; //左移一位 user_id|=0x01; //把當(dāng)前位置1 } if((j<20)&(j>10)) //接收短脈沖 { Count++; user_id<<=1; //把當(dāng)前位置0 } if(Count==24) //24個(gè)脈沖接收完畢 { 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) //脈沖數(shù)量不正常
{
Init();
}
}
if(dataCom==0) //確認(rèn)是否接收數(shù)據(jù)
{
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; //拉低數(shù)據(jù)線
delay(DELAY); //延時(shí)
P1OUT|=BIT6; //拉高數(shù)據(jù)線
}
void SendDATA1(void)
{
P1OUT&=~BIT7; //拉低數(shù)據(jù)線
delay(DELAY); //延時(shí)
P1OUT|=BIT7; //拉高數(shù)據(jù)線
}
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) //發(fā)送韋根數(shù)據(jù)
{
unsigned char i;
unsigned char start=0; //韋根信號(hào)偶校驗(yàn)位
unsigned char end=0; //韋根信號(hào)奇校驗(yàn)位
signed int Even=0; //前2~13位偶校驗(yàn)計(jì)數(shù)
signed int Odd=0; //后14~25位奇校驗(yàn)計(jì)數(shù)
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) //判斷偶校驗(yàn)位
{
SendDATA1(); //發(fā)送D1
}
else
{
SendDATA0(); //發(fā)送D0
}
delay(DELAY);
for(i=24;i>0;i--) //循環(huán)發(fā)送韋根信號(hào)
{
if((sendid2>>(i-1))&0x01) //判斷第i-1位是否為1
{
SendDATA1();
}
else
{
SendDATA0();
}
delay(DELAY); //延時(shí)
}
if(end) //判斷奇校驗(yàn)位
{
SendDATA1();
}
else
{
SendDATA0();
}
P1OUT&=~BIT0; //打開ED1
delay(1000); //延時(shí)1 s
P1OUT|=BIT0; //關(guān)閉ED1
}
int main( void )
{
WDTCTL = WDTPW + WDTHOLD; //關(guān)閉看門狗
GPIO_Config(); //配置GPIO
IOInterrupt_Config(); //配置IO中斷
_EINT(); //使能全局中斷
while(1)
{
if(rev_flag) //判斷是否正確接收無(wú)線數(shù)據(jù)
{
_DINT(); //關(guān)閉全局中斷
rev_flag=0; //清除完成標(biāo)志
SendWiegandData(user_id); //輸出韋根信號(hào)
Init(); //重新初始化
_EINT(); //使能全局中斷
}
}
}
6 結(jié) 語(yǔ)
本方案實(shí)現(xiàn)的PT2262無(wú)線編碼信號(hào)到韋根26輸出信號(hào)的轉(zhuǎn)換準(zhǔn)確可靠,可以與人臉識(shí)別、指紋識(shí)別、讀卡機(jī)等各種韋根信號(hào)輸出設(shè)備進(jìn)行替換,不需要進(jìn)行任何硬件設(shè)備的改變,可方便地應(yīng)用于各類門禁系統(tǒng)中。
參考文獻(xiàn)
[1] 柴卉,萬(wàn)振凱.韋根協(xié)議在門禁系統(tǒng)中的應(yīng)用[J].儀器儀表用戶,2007(5):129?130.
[2] 岳云峰,王睿,孫海濤.韋根(Wiegand)協(xié)議及其應(yīng)用[J].齊齊哈爾大學(xué)學(xué)報(bào),2002(2):58?60.
[3] 王曉東.用軟、硬件結(jié)合的方法實(shí)現(xiàn)對(duì)PT2262的解碼[J].山西電子技術(shù),2008(5):41?42.
[4] 何萬(wàn)庫(kù),潘小飛,劉儒來(lái).基于315MHz無(wú)線模塊的智能車輛管理系統(tǒng)[J].數(shù)據(jù)采集與處理,2010(S1):206?208.
[5] 張揚(yáng),魏瑩,劉新力,等.PIC、MSP430單片機(jī)的比較與分析[J].自動(dòng)化技術(shù)與應(yīng)用,2007(5):144?146.
[6] 何立民.MCS2?51 單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)[M].北京:航空航天大學(xué)出版社,1990.
[7] 梅麗鳳,王艷秋,任國(guó)臣,等.單片機(jī)原理及接口技術(shù)[M].北京:清華大學(xué)出版社,2009.
[8] 任曉榮.基于單片機(jī)的脈沖信號(hào)采集與處理[J].計(jì)算機(jī)測(cè)量與控制,2003(5):59?62.
[9] 康華光,鄒壽彬,秦臻.電子技術(shù)基礎(chǔ)(數(shù)電部分)[M].北京:高等教育出版社,2010.
[10] 秦龍.MSP430單片機(jī)C語(yǔ)言應(yīng)用程序設(shè)計(jì)實(shí)例精講[M].北京:電子工業(yè)出版社,2006.
}
else
{
start=1;
}
if(Odd%2)
{
end=1;
}
else
{
end=0;
}
if(start) //判斷偶校驗(yàn)位
{
SendDATA1(); //發(fā)送D1
}
else
{
SendDATA0(); //發(fā)送D0
}
delay(DELAY);
for(i=24;i>0;i--) //循環(huán)發(fā)送韋根信號(hào)
{
if((sendid2>>(i-1))&0x01) //判斷第i-1位是否為1
{
SendDATA1();
}
else
{
SendDATA0();
}
delay(DELAY); //延時(shí)
}
if(end) //判斷奇校驗(yàn)位
{
SendDATA1();
}
else
{
SendDATA0();
}
P1OUT&=~BIT0; //打開ED1
delay(1000); //延時(shí)1 s
P1OUT|=BIT0; //關(guān)閉ED1
}
int main( void )
{
WDTCTL = WDTPW + WDTHOLD; //關(guān)閉看門狗
GPIO_Config(); //配置GPIO
IOInterrupt_Config(); //配置IO中斷
_EINT(); //使能全局中斷
while(1)
{
if(rev_flag) //判斷是否正確接收無(wú)線數(shù)據(jù)
{
_DINT(); //關(guān)閉全局中斷
rev_flag=0; //清除完成標(biāo)志
SendWiegandData(user_id); //輸出韋根信號(hào)
Init(); //重新初始化
_EINT(); //使能全局中斷
}
}
}
6 結(jié) 語(yǔ)
本方案實(shí)現(xiàn)的PT2262無(wú)線編碼信號(hào)到韋根26輸出信號(hào)的轉(zhuǎn)換準(zhǔn)確可靠,可以與人臉識(shí)別、指紋識(shí)別、讀卡機(jī)等各種韋根信號(hào)輸出設(shè)備進(jìn)行替換,不需要進(jìn)行任何硬件設(shè)備的改變,可方便地應(yīng)用于各類門禁系統(tǒng)中。
參考文獻(xiàn)
[1] 柴卉,萬(wàn)振凱.韋根協(xié)議在門禁系統(tǒng)中的應(yīng)用[J].儀器儀表用戶,2007(5):129?130.
[2] 岳云峰,王睿,孫海濤.韋根(Wiegand)協(xié)議及其應(yīng)用[J].齊齊哈爾大學(xué)學(xué)報(bào),2002(2):58?60.
[3] 王曉東.用軟、硬件結(jié)合的方法實(shí)現(xiàn)對(duì)PT2262的解碼[J].山西電子技術(shù),2008(5):41?42.
[4] 何萬(wàn)庫(kù),潘小飛,劉儒來(lái).基于315MHz無(wú)線模塊的智能車輛管理系統(tǒng)[J].數(shù)據(jù)采集與處理,2010(S1):206?208.
[5] 張揚(yáng),魏瑩,劉新力,等.PIC、MSP430單片機(jī)的比較與分析[J].自動(dòng)化技術(shù)與應(yīng)用,2007(5):144?146.
[6] 何立民.MCS2?51 單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)[M].北京:航空航天大學(xué)出版社,1990.
[7] 梅麗鳳,王艷秋,任國(guó)臣,等.單片機(jī)原理及接口技術(shù)[M].北京:清華大學(xué)出版社,2009.
[8] 任曉榮.基于單片機(jī)的脈沖信號(hào)采集與處理[J].計(jì)算機(jī)測(cè)量與控制,2003(5):59?62.
[9] 康華光,鄒壽彬,秦臻.電子技術(shù)基礎(chǔ)(數(shù)電部分)[M].北京:高等教育出版社,2010.
[10] 秦龍.MSP430單片機(jī)C語(yǔ)言應(yīng)用程序設(shè)計(jì)實(shí)例精講[M].北京:電子工業(yè)出版社,2006.
}
else
{
start=1;
}
if(Odd%2)
{
end=1;
}
else
{
end=0;
}
if(start) //判斷偶校驗(yàn)位
{
SendDATA1(); //發(fā)送D1
}
else
{
SendDATA0(); //發(fā)送D0
}
delay(DELAY);
for(i=24;i>0;i--) //循環(huán)發(fā)送韋根信號(hào)
{
if((sendid2>>(i-1))&0x01) //判斷第i-1位是否為1
{
SendDATA1();
}
else
{
SendDATA0();
}
delay(DELAY); //延時(shí)
}
if(end) //判斷奇校驗(yàn)位
{
SendDATA1();
}
else
{
SendDATA0();
}
P1OUT&=~BIT0; //打開ED1
delay(1000); //延時(shí)1 s
P1OUT|=BIT0; //關(guān)閉ED1
}
int main( void )
{
WDTCTL = WDTPW + WDTHOLD; //關(guān)閉看門狗
GPIO_Config(); //配置GPIO
IOInterrupt_Config(); //配置IO中斷
_EINT(); //使能全局中斷
while(1)
{
if(rev_flag) //判斷是否正確接收無(wú)線數(shù)據(jù)
{
_DINT(); //關(guān)閉全局中斷
rev_flag=0; //清除完成標(biāo)志
SendWiegandData(user_id); //輸出韋根信號(hào)
Init(); //重新初始化
_EINT(); //使能全局中斷
}
}
}
6 結(jié) 語(yǔ)
本方案實(shí)現(xiàn)的PT2262無(wú)線編碼信號(hào)到韋根26輸出信號(hào)的轉(zhuǎn)換準(zhǔn)確可靠,可以與人臉識(shí)別、指紋識(shí)別、讀卡機(jī)等各種韋根信號(hào)輸出設(shè)備進(jìn)行替換,不需要進(jìn)行任何硬件設(shè)備的改變,可方便地應(yīng)用于各類門禁系統(tǒng)中。
參考文獻(xiàn)
[1] 柴卉,萬(wàn)振凱.韋根協(xié)議在門禁系統(tǒng)中的應(yīng)用[J].儀器儀表用戶,2007(5):129?130.
[2] 岳云峰,王睿,孫海濤.韋根(Wiegand)協(xié)議及其應(yīng)用[J].齊齊哈爾大學(xué)學(xué)報(bào),2002(2):58?60.
[3] 王曉東.用軟、硬件結(jié)合的方法實(shí)現(xiàn)對(duì)PT2262的解碼[J].山西電子技術(shù),2008(5):41?42.
[4] 何萬(wàn)庫(kù),潘小飛,劉儒來(lái).基于315MHz無(wú)線模塊的智能車輛管理系統(tǒng)[J].數(shù)據(jù)采集與處理,2010(S1):206?208.
[5] 張揚(yáng),魏瑩,劉新力,等.PIC、MSP430單片機(jī)的比較與分析[J].自動(dòng)化技術(shù)與應(yīng)用,2007(5):144?146.
[6] 何立民.MCS2?51 單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)[M].北京:航空航天大學(xué)出版社,1990.
[7] 梅麗鳳,王艷秋,任國(guó)臣,等.單片機(jī)原理及接口技術(shù)[M].北京:清華大學(xué)出版社,2009.
[8] 任曉榮.基于單片機(jī)的脈沖信號(hào)采集與處理[J].計(jì)算機(jī)測(cè)量與控制,2003(5):59?62.
[9] 康華光,鄒壽彬,秦臻.電子技術(shù)基礎(chǔ)(數(shù)電部分)[M].北京:高等教育出版社,2010.
[10] 秦龍.MSP430單片機(jī)C語(yǔ)言應(yīng)用程序設(shè)計(jì)實(shí)例精講[M].北京:電子工業(yè)出版社,2006.