卿玉明
摘要:根據(jù)NEC紅外遙控協(xié)議的特性,采用Proteus提供的紅外信號處理模塊IRLINK,設(shè)計出一種紅外遙控仿真系統(tǒng)。對系統(tǒng)硬件和相應(yīng)的軟件進行分析并給出流程圖和關(guān)鍵代碼,實現(xiàn)對短時按鍵和長時按鍵的編碼顯示和相應(yīng)功能控制。通過單片機的定時器配合使用,對紅外遙控信號的下降沿進行判斷,以適應(yīng)不同的實際遙控發(fā)射電路,從而不用區(qū)分信號高低電平細節(jié),稍加修改就可適應(yīng)眾多的遙控協(xié)議。
關(guān)鍵詞:NEC協(xié)議;IRLINK;Proteus;仿真
中圖分類號:TP871 文獻標識碼:A 文章編號:1009-3044(2017)01-0016-03
Abstract: According to the characteristics of NEC infrared remote control protocol, IRLINK is used to design a kind of infrared remote control simulation system based on Proteus. Analyze the hardware and software of the system and give the flow chart and key code, realize the encoding display and the corresponding function control of the short key and the long time. Through the MCU timer with the use of infrared remote control signal decreased along the judge, to adapt to different practical remote control transmitter, which do not distinguish between high and low signal level detail, slightly modified can adapt to numerous remote protocol.
Key words: NEC protocol; IRLINK; Proteus; Simulation
在通信距離要求不高的場合,紅外的成本比其他無線設(shè)備要低的多。因此,紅外遙控在家電、玩具、工控、智能儀表等領(lǐng)域中廣泛使用。紅外遙控的通信協(xié)議很多,常用的就有ITT協(xié)議、NEC協(xié)議、Sharp協(xié)議、Philips RC-5協(xié)議、Sony SIRC協(xié)議等,其中應(yīng)用最多的是NEC協(xié)議。利用仿真軟件Proteus中的紅外信號處理模塊IRLINK,基于NEC協(xié)議,對紅外遙控系統(tǒng)進行仿真開發(fā),能縮短產(chǎn)品開發(fā)周期,從而提高產(chǎn)品研發(fā)效率。
1 NEC協(xié)議紅外通信原理
紅外通信,如圖1所示。即以紅外線作為通信載體,通過紅外光在空中的傳播來傳輸數(shù)據(jù)的通信方式,它由發(fā)射端和接收端來完成。在發(fā)射端,發(fā)送的數(shù)字信號經(jīng)過適當(dāng)?shù)恼{(diào)制編碼后,送入電光變換電路,經(jīng)紅外發(fā)射管轉(zhuǎn)變?yōu)榧t外光脈沖發(fā)射到空中;在接收端,紅外接收器對接收到的紅外光脈沖進行光電變換,解調(diào),再經(jīng)單片機處理,便可以恢復(fù)出原數(shù)據(jù)信號。
NEC協(xié)議編碼采用脈沖位置調(diào)制方式(PPM),利用脈沖之間的時間間隔來區(qū)分“0”和“1”。每一個“高電平”由長度為560?s的38KHz載波構(gòu)成(約21個載波脈沖,其占空比推薦值是1/4或1/5。若采用1/5占空比,則高電平的時長為5.3us,低電平時長為21us)。1位邏輯“1”的周期為2.25ms,1位邏輯“0”的周期是1.12ms,如圖2所示。
圖3是一個典型的NEC協(xié)議數(shù)據(jù)幀格式。由于在NEC協(xié)議中LSB(低位)先于MSB(高位)發(fā)送,因此圖3中傳輸?shù)氖堑刂?x59和命令0x16。每一幀波形由一個9ms的AGC同步脈沖串(引導(dǎo)碼)開始,這是用來設(shè)置早期紅外接收器的增益。緊跟著引導(dǎo)碼的是4.5ms的空閑,接著是8bit的地址和8位的命令。地址和命令發(fā)送兩次。第二次發(fā)送時,所有的位取反,用來驗證第一次發(fā)送的消息。如果開發(fā)者不用驗證,則可以忽略驗證的數(shù)據(jù),或者將地址或命令擴展為16bit。
NEC協(xié)議規(guī)定:在按鍵期間,命令信號只發(fā)送一次,如果按鍵不釋放,則每隔108ms發(fā)送一次重發(fā)碼。重發(fā)碼由9ms的脈沖串和2.25ms的空閑,以及0.56ms脈沖串組成,如圖4所示。
2 遙控系統(tǒng)仿真測試電路設(shè)計
本文采用的遙控系統(tǒng)仿真測試電路如圖5所示,電路中共使用了兩塊單片機。單片機U1部分為遙控接收,能顯示接收到的紅外編碼和進行功能控制。單片機U2部分為模擬遙控發(fā)射。單片機U2的P3.6腳輸出38KHz的NEC協(xié)議信號到IRLINK模塊,經(jīng)其解調(diào)后送到單片機U1的I/O引腳P3.7。遙控發(fā)射部分采用4×4矩陣鍵盤,當(dāng)按下某一個鍵后會發(fā)出對應(yīng)的編碼。例如按下鍵“0x12”,按照NEC協(xié)議的數(shù)據(jù)幀結(jié)構(gòu),將通過P3.6腳串行發(fā)送“0x4F,0x76,0x12,0xED”,其中“0x4F,0x76”為拔位開關(guān)設(shè)置的用戶碼,可對于不同場合的實際需要進行相應(yīng)的修改;“0x12”是代表鍵的功能,“0xED”是“0x12”的反碼,用于校驗,以提高傳輸準確性。本系統(tǒng)設(shè)置“0x12”鍵在短時按觸時,控制發(fā)光二極管D1亮滅,其遙控波形如圖6所示,根據(jù)NEC協(xié)議數(shù)據(jù)幀格式可以看出所含二進制信息為1111 0010 0110 1110 0100 1000 1011 0111,即“0x4F,0x76,0x12,0xED”;“0x12”鍵在長時按觸時,控制發(fā)光二極管D2亮滅,其遙控波形如圖7所示,這也吻合圖4的要求??傊?,只要在軟件設(shè)計中對用戶碼和按鍵功能作相應(yīng)的修改,就能使該遙控系統(tǒng)在應(yīng)用開發(fā)前進行仿真測試,從而提高開發(fā)的效率。
3 遙控發(fā)射程序設(shè)計
遙控發(fā)射的程序流程圖如圖8所示。遙控編碼發(fā)射采用定時器溢出的方式來實現(xiàn)。根據(jù)定時器T0的溢出標志TF0在不同定時初值時的溢出情況,對引腳P3.6進行控制,完成遙控編碼發(fā)射。38KHz的紅外信號發(fā)射與延時程序如下:
void TT0(bit BT,uint16 x)
{ //BT=0時,不發(fā)射38KHz載波只延時
//BT=1發(fā)射38KHz脈沖且延時
TH0 = x>>8; //輸入T0初值高8位
TL0 = x;//輸入T0初值低8位
TF0=0; //溢出標志手動清0
TR0=1; //啟動T0
if(BT == 0) while(!TF0);//是否產(chǎn)生載波
else while(1)
{ //因P3.6(IR)外接PNP管反相控制發(fā)射
//所以IR首先為低電平
IR = 0;
if(TF0)break;if(TF0)break;//兩次查詢約延時5.3us
IR = 1;
if(TF0)break;if(TF0)break; if(TF0)break;if(TF0)break;
if(TF0)break;if(TF0)break; if(TF0)break;if(TF0)break;
//8次查詢約延時21us
//經(jīng)PNP管反相,得38KHz載波,且占空比1:5
}
TR0=0; //關(guān)閉T0
TF0=0; //標志位溢出則清0
IR =1; //載波停止后,發(fā)射端口常態(tài)為高,紅外模塊不工作
}
仿真系統(tǒng)運行時,用Proteus中虛擬示波器的A、B通道分別觀察IRLINK的輸入信號和輸出信號,可得到圖6、圖7所示的波形,其中A通道波形內(nèi)含38KHz的載波,B通道波形為經(jīng)紅外信號處理模塊IRLINK解調(diào)后的信息,載波已被濾掉,“1”和“0”邏輯狀態(tài)已經(jīng)清晰可辨。
4 遙控接收程序設(shè)計
NEC遙控協(xié)議主要有四種碼值:引導(dǎo)碼、0、1、重發(fā)碼。它們的典型脈寬分別為13.5ms,1.125ms,2.25ms 和108ms 。這四種脈寬的最大公約數(shù)是0.3,也就是說定時器的最小周期為300us就可以準確地將這幾種脈寬計算出來。為了不去區(qū)分紅外編碼的高、低電平周期,以適應(yīng)不同的發(fā)射電路,而把脈寬作為區(qū)分標準。只要在信號的每個下降沿讀取計數(shù)值,減去上一個下降沿的計數(shù)值,就可以得到脈寬。這樣就可以通過單片機程序,把當(dāng)前按鍵的紅外編碼解釋出來。
利用300us定時器中斷,采用判斷下降沿間隔時長的遙控解碼方法如下:
1)在進入T0中斷定時程序后,統(tǒng)計中斷次數(shù),以便計數(shù)脈寬周期;2)根據(jù)中斷前后引腳的電平狀態(tài),判斷是否遇到下降沿;3)如果沒有遇到下降沿,就直接中斷返回,否則執(zhí)行遇到下降沿的下述步驟;4)鍵狀態(tài)默認為短時按鍵,如果下降沿周期超過108ms,且解碼有效,則解釋為長時按鍵;4)如果下降沿周期符合引導(dǎo)碼時長要求,則設(shè)置同步標志和遙控信息位數(shù);5)如果同步有效,則判斷下降沿周期是符合“0”的時長還是“1”的時長,保存相應(yīng)邏輯值,并右移1位,再根據(jù)信息位數(shù),判斷接收是否完成;6)如果接收完成,清除同步標志,還可根據(jù)需要進行數(shù)據(jù)校驗;7)如果接收沒完成,則每8位轉(zhuǎn)存一個字節(jié);8)在處理完與下降沿有關(guān)的事務(wù)后,中斷次數(shù)統(tǒng)計清零,以便計算下一個下降沿的周期;9)最后退出中斷服務(wù)程序(中斷返回)。
300us定時器中斷程序代碼如下:
void time0(void) interrupt 1
{
TL0 = TH_L; //重賦300us定時初值
TH0 = TH_H;
cntStep++; //定時中斷次數(shù)
if(IR_BT==1)if(cntStep>400)IR_BT=2;//解碼有效后,如果無長按,120ms(300us×400)后默認短按
IRb = IRa; //恢復(fù)中斷前引腳電平狀態(tài)
IRa = IR; //保存當(dāng)前引腳電平狀態(tài)
if(IRb && !IRa) //下降沿判斷
{
if(cntStep > Boot_Limit) //超過同步引導(dǎo)碼時限?
{
if(IR_BT==1)if(++cntCA>8)IR_BT=3; //解碼有效后,如果下降沿周期
//大于8倍引導(dǎo)碼時長13.5ms=108ms,則為長按
IRsync=0; //同步標志清除
}
else if(cntStep > Boot_Lower){ IRsync=1; BitN=32; }//1位時長到,同步標志置1,裝載位碼數(shù)
else if(IRsync) //當(dāng)同步時,判斷每位邏輯狀態(tài)
{
if(cntStep > Bit1_Limit)IRsync=0;
else
{
NEC[3] >>= 1; //右移一位
if(cntStep > Bit0_Limit)NEC[3] |= 0x80; //邏輯1
if(--BitN == 0) //修改接收位數(shù)
{
IRsync = 0; //同步標志清除
#if (Check_EN == 1) //根據(jù)實際所需進行條件編譯
if((NEC[0]==USER_H)&&(NEC[1]==USER_L)&&(NEC[2]==~NEC[3])) //32位校驗
{ IR_BT=1; cntCA=0; } //設(shè)置解碼有效標志
#else
if(NEC[2]==~NEC[3]){ IR_BT=1; cntCA=0; } //只校驗操作碼正反碼
#endif
}
else if((BitN & 0x07)== 0) //NEC[3]每裝滿8位,移動保存一次 { NEC[0]=NEC[1]; NEC[1]=NEC[2]; NEC[2]=NEC[3]; }
}
}
cntStep = 0; //步數(shù)計清0
}
}
5 結(jié)束語
本文設(shè)計的紅外遙控仿真系統(tǒng)具有結(jié)構(gòu)簡單、適應(yīng)強、可移植性強等優(yōu)點,能大幅度提高實際產(chǎn)品的開發(fā)效率。將該系統(tǒng)用于紅外遙控原理教學(xué)實踐,也有事半功倍的效果。
參考文獻:
[1] NEC Protocol[EB/OL].[2015-05]. http://www.sbprojects.com/knowledge/ir/nec.php.
[2] 彭偉. 單片機C語言程序設(shè)計實訓(xùn)100例[M]. 北京: 電子工業(yè)出版社, 2012.
[3] 朱志偉, 劉湘云. 基于AT89S51的紅外遙控解碼的實現(xiàn)[J]. 科技信息, 2009(34):109-112.
[4] 葉林俊. 單片機I/O口的紅外遙控軟件調(diào)制技術(shù)[J]. 單片機與嵌入式系統(tǒng)應(yīng)用, 2011, 11(12):22-24.
[5] 周文軍, 莫名韶. 紅外遙控發(fā)射器Proteus仿真研究[J]. 電子技術(shù), 2014(11):55-57.