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