在許多基于單片機的應用系統(tǒng)中,系統(tǒng)需要實現遙控功能,而紅外通信則是被采用較多的一種方法。一般市場上的遙控器協(xié)議簡單、保密性不強、抗干擾能力較弱。這里,我們介紹一種基于字節(jié)傳輸的紅外遙控系統(tǒng),可以適合于各種復雜的應用場合。
紅外通信的基本原理
紅外通信的基本原理是發(fā)送端將基帶二進制信號調制為一系列的脈沖串信號,通過紅外發(fā)射管發(fā)射紅外信號。常用的有通過脈沖寬度來實現信號調制的脈寬調制(PWM)和通過脈沖串之間的時間間隔來實現信號調制的脈時調制(PPM)兩種方法。本系統(tǒng)采用的為脈時調制方法。數據比特的傳送仿照不帶奇偶校驗的RS232通信,首先產生一個同步頭,然后接著8位數據比特,如圖1所示。

硬件電路設計
復費率電能表系統(tǒng)可分為手持遙控器和復費率電能表兩部分。手持遙控器為發(fā)射部分,其基本電路如圖2所示。采用塑封的SE303ANC-C發(fā)射二極管,波長為940nm。CPU按照協(xié)議規(guī)定導通或截止發(fā)射二極管,從而產生特定頻率的發(fā)射信號,這里選用的頻率為38.9kHz。復費率電能表紅外接收部分的基本電路如圖3所示。接收管采用日本光電子公司的PIC-12043,其接收頻率為37.9kHz,它直接將37.9kHz的調制信號解調為基帶信號,提供給接收CPU。該芯片接收靈敏度高,性能穩(wěn)定。其基本工作過程為:當接收到37.9kHz信號時,輸出低電平,否則輸出為高電平。電能表部分采用的是51系列單片機,以中斷方式檢測接收信號。這里的非門對接收信號起整形作用。


軟件設計
發(fā)射部分的程序相對來說非常簡單,主要是產生不同時間間隔的37.9kHz脈沖串信號去控制發(fā)射管的通斷。在發(fā)射端,CPU不斷掃描鍵盤,一旦發(fā)現有鍵按下,即啟動發(fā)射子程序將相應的數值發(fā)送出動。在我們的設計中,采用的是4×4的小鍵盤,正好和0~F編碼對應,為了提高可靠性,采用最簡單的糾錯編碼——將每位數重復發(fā)送一次,即和鍵盤數字對應的編碼為00~FF。這樣,一個鍵值要發(fā)送8比特。接收端接收滿8比特信號后,再進行糾錯處理,不正確的編碼認為無效。收足規(guī)定的號碼后,即調用號碼分析程序進行處理。當每收到一個脈沖串信號后即啟動一個定時器。下次中斷發(fā)生時,通過定時器的計數值判斷是0還是1。如果定時器溢出,則清除本次接收的號碼,恢復到接收初始狀態(tài)。接收部分的基本程序流程如圖4所示。

在程序設計時,應該注意MCU的中斷方式采用下邊沿觸發(fā);接收端通過T0計數值來判斷發(fā)送比特,一般采用硬判決,即取0和1比特時寬的平均值為判決門限A,當T0值大于A時判接收信號為0,小于A時判為1。
復費率電能表中的紅外接收程序如下(MCU為Intel 8052,采用C語言編寫):
#include
#include
#include
#pragma OPTIMIZE(5,SPEED)
sbit RECV=“P3”^3;
bdata unsigned char SIGN, RECVBYTE;
sbit RECVBG=“SING”^0;
sbit US1AT=SIGN^6;
sbit RECVBITO=“RECVBYTE”^0;
unsigned char RECVBIT;
//-------------------------------------
timer0() interrupt 1 //entrance: 8*n+3=0Bh;
{
IE=“0”×8d; //1(EA)0(X)0(X)0(X)_1(ET1)1(EX1)0(ET0)1(EX0)
Recvbg=“0”;
}
//--------------------------------------
EX_
INT1() interrupt 2 //接收紅外信號
{
TCON=“0”×45; //0(TF1)1(TR1)0(TF0)1(TR0)_0(IE1)1(IT1)0(IE0)1(IT0)
If(RECVBG==0) {RECVBG=1;
RECVBIT=“8”;
}
else{ RECVBYTE=“RECVBYTE”<<1;
if(TH0<=4)RECVBIT0=1;
else RECVBIT0=0;
RECVBIT--;
if(RECVBIT==0) { RECVBG=“0”;
US1AT=1;
}
}
TH0=0;
TL0=0;
TCON=“0”×55; //0(TF1)1(TR1)0(TF0)1(TR0)_0(IE1)1(IT1)0(IE0)1(IT0)
IE=“0”×8f; //Enable the timer0 interrupt
}
//----------------------------------------------------
void main() {
RECVBYTE=“0”;
SIGN=“0”;
TMOD=“0”×11;
TCON=“0”×55;//0(TF1)1(TR1)0(TF0)1(TR0)_0(IE1)1(IT1)0(IE0)1(IT0)
IP=“0”×00;
IE=“0”×8d; //1(EA)0(X)0(X)0(X)_1(ET1)1(EX1)0(ET0)1(EX0)
//基本循環(huán)程序
while(1){
if(US1AT==1) { //紅外接收處理
}
}
}
結語
以上設計方案在復費率電能表中應用后,效果良好,達到了設計要求。整個系統(tǒng)外圍元件少,調試方便;軟件工作量也較小。如果應用來傳送大量數據時,還可以根據需要改變相應的編碼形式,提高數據傳送速率。
責任編輯:gt
-
單片機
+關注
關注
6075文章
45466瀏覽量
667824 -
接口
+關注
關注
33文章
9499瀏覽量
156710 -
遙控器
+關注
關注
18文章
877瀏覽量
71454
發(fā)布評論請先 登錄
復費率電能表中 鋰電池的使用一般應考慮哪些因素
基于PIC單片機的復費率電能表時鐘誤差分析儀系統(tǒng)
基于MSP430單片機的多功能復費率三相電能表
一款三相預付費復費率電能表的設計
一款三相預付費復費率電能表的設計
FM3116 鐵電存儲器在復費率電能表中的應用
應用M68HC908LJ12設計單相復費率電能表?
多費率電能表的工作原理及設計
應用在復費率電能表中的紅外通信接口的應用方案
評論