紅外通信的設(shè)計與實現(xiàn)
在電子消費領(lǐng)域當(dāng)中,紅外產(chǎn)品的使用較為普遍,它多用于簡單的近距離控制,如家電,玩具,各種抄表系統(tǒng)。本文以Freescale 8位高性能、低功耗單片機(jī)MC9S08GT60為載體,詳細(xì)介紹紅外通信的硬件和軟件設(shè)計過程及通信協(xié)議的使用。
HCS08系列的MCU是Freescale半導(dǎo)體公司最新推出的8位單片機(jī),具有多種低功耗模式,更高的工作頻率,并集成了片上調(diào)試器,而且資源豐富,因此采用了該系列的MC9S08GT60作為載體詳細(xì)討論了一個簡單實用的紅外通信開發(fā)系統(tǒng)。
紅外通信過程主要由紅外發(fā)射和紅外接收兩個過程,首先將數(shù)字信號送給紅外發(fā)射電路,經(jīng)該電路的調(diào)制轉(zhuǎn)變成紅外光信號在空中傳輸,然后紅外接收電路收到該紅外光信號,經(jīng)過該電路的解調(diào),將此紅外光信號還原成可被單片機(jī)處理的信號,由單片機(jī)內(nèi)部處理得到原來的數(shù)據(jù)編碼。
2 紅外通信協(xié)議
協(xié)議的目的是給收發(fā)雙方一個約定,使其能夠進(jìn)行同步,并正確的收發(fā)數(shù)據(jù)。本設(shè)計使用了類同步協(xié)議。當(dāng)紅外接收器未收到信號時,不產(chǎn)生定時操作,否則,首先接收起始位‘0’,并觸發(fā)中斷,啟動定時器接收數(shù)據(jù),然后判斷是否為起始位,如果是,則繼續(xù)接收數(shù)據(jù),否則將定時器復(fù)位,重新檢測起始位,在接收第二個停止位時,會觸發(fā)一次中斷來檢測第一次接收的停止位是否正確,如果不正確,則復(fù)位定時器,重新接收,否則已經(jīng)正確接收該數(shù)據(jù)段。
3 紅外通信的原理分析
紅外通信在空中傳輸?shù)氖?strong>載波信號,當(dāng)有載波通過時,接收端輸出數(shù)字信號‘0’,反之,輸出數(shù)字信號‘1’。因此在發(fā)射電路發(fā)送的功能指令碼,一般采用多位二進(jìn)制串行碼。本文中,紅外通信數(shù)據(jù)采用脈沖編碼,就是將每位數(shù)據(jù)信號用一個脈沖來表示,脈寬為526 μs,兩個這樣的脈沖周期表示‘1’,一個這樣的脈沖周期表示‘0’。這樣的脈沖信號都調(diào)制在頻率為38 kHz的載波上再發(fā)送出去,調(diào)制后在空中傳輸?shù)男盘柧褪蔷哂幸欢〞r間間隔的載波信號,其占空比由數(shù)據(jù)編碼決定。在紅外接收端,數(shù)據(jù)處理的過程正好相反,在接收紅外光信號之后,會經(jīng)過整形、放大、濾波、調(diào)制等一系列處理,然后在其輸出端輸出一系列的單片機(jī)能夠處理的數(shù)據(jù)信號。
4 紅外通信硬件設(shè)計原理
4.1 發(fā)送電路的硬件設(shè)計
HCS08GT60單片機(jī)內(nèi)部有兩個TPM模塊,每個模塊有兩個通道,可以用任意一個通道的PWM功能,輸出38 kHz的載波信號,本文編程設(shè)計根據(jù)實驗條件的要求采用了TPM1通道1中心脈寬輸出功能產(chǎn)生38 kHz紅外載波信號。而PTA7口作為普通的輸入輸出口,產(chǎn)生一定脈寬的方波信號,作為數(shù)據(jù)編碼信號輸入。硬件原理圖如圖1所示。
500)this.style.width=500;" border="0" />
原理圖中,電氣節(jié)點CODE跟PTA7口相連,產(chǎn)生數(shù)據(jù)編碼;電氣節(jié)點CLK跟TPM1通道1相連,產(chǎn)生38 kHz紅外載波信號。三極管基極串接的電阻和R5起到限流保護(hù)的作用,三極管本身則具有信號放大的功能,另外兩個三極管級聯(lián)將編碼調(diào)制在38 kHz的載波上通過紅外發(fā)射器發(fā)射出去。當(dāng)編碼為‘1’時,Q1,Q2截止,紅外發(fā)射器上無電流通過,發(fā)射低電平信號,當(dāng)編碼為‘0’時,Q1,Q2導(dǎo)通,此時載波信號通過Q2放大在發(fā)射器上體現(xiàn)出38 kHz的載波信號。因此在PTA7端口輸入不同的數(shù)據(jù)編碼,通過該發(fā)送電路,在發(fā)射器上會出現(xiàn)具有一定間隔的38 kHz載波信號,經(jīng)發(fā)射器將該載波信號轉(zhuǎn)化成光信號發(fā)射出去。載波脈沖調(diào)制信號的時序圖如圖2所示。
500)this.style.width=500;" border="0" />
4.2 接收電路的硬件設(shè)計
紅外接收電路中使用了HS0038A接收器,HS0038A的內(nèi)部邏輯框圖如圖3所示。
500)this.style.width=500;" border="0" />
由此可看出該接收器內(nèi)部實現(xiàn)了紅外接收、放大、濾波及解調(diào)功能,當(dāng)收到紅外載波光信號時,紅外接收器輸出低電平,反之紅外接收器輸出高電平,從而可以將時斷時續(xù)的紅外光信號調(diào)制成連續(xù)的方波信號,經(jīng)單片機(jī)內(nèi)部處理可以將其轉(zhuǎn)換成原來的數(shù)據(jù)。
硬件原理圖如圖4所示。
500)this.style.width=500;" border="0" />
由于HS0038A內(nèi)置濾波并且采用環(huán)氧塑封,可以作為紅外濾波器,因此電路中不需要另外增加濾波器,并且HS0038A具備較強(qiáng)的抗干擾能力。
紅外接收器輸出引腳RevData連接在TPM2通道0,使用了TPM的輸入捕捉功能,在上升沿時發(fā)生輸入捕捉,比較兩次捕捉發(fā)生時通道寄存器TPM2C0V的值,可以得到一個周期脈沖的寬度,根據(jù)發(fā)射數(shù)據(jù)的時序圖,就可知道不同的脈沖寬度對應(yīng)的數(shù)據(jù)是什么,由此就可將原數(shù)據(jù)還原出來。
5 紅外通信的軟件設(shè)計
5.1 38 kHz紅外載波設(shè)計
MC9S08GT60使用了外部4 MHz的晶振頻率,通過配置ICG1=0x78,ICG2=0x30,將總線頻率控制為20 MHz。MC9S08GF60內(nèi)部有定時/脈沖輸出模塊,將TPM1的狀態(tài)控制寄存器的位CPWMS置1,則TPM1工作在中心脈寬輸出模式;將TPM1通道0的狀態(tài)控制寄存器的ELS0B:ELS0A設(shè)置為10,控制發(fā)生輸出比較時將脈沖信號置高或置低。為使TPM1C1輸出38 kHz頻率的載波信號,就要對20 MHz的總線頻率進(jìn)行526分頻,即526個20 MHz的方波周期產(chǎn)生一個38 kHz的方波周期,因為是中心脈寬輸出模式,輸出脈沖寬度是通道值寄存器TPM1C1V中值的2倍,輸出脈沖周期是通道預(yù)置寄存器TPM1M0D中值的2倍,因此令TPM1C1V=131,TPM1M0D=263,啟動定時器后,定時器1的計數(shù)器TPM1CNTL在自增1計數(shù)時,當(dāng)該值跟通道值寄存器TPM1C1V中值匹配時,將脈沖輸出信號拉低,定時器1的計數(shù)器TPMlCNTL在計數(shù)值開始進(jìn)行自減1操作時,當(dāng)下降到跟通道寄存器TPMlClV時,將脈沖輸出信號拉高。中心脈寬輸出的時序圖如圖5所示。從此通道輸出的方波頻率通過示波器查看為37.9 kHz或38 kHz。
500)this.style.width=500;" border="0" />
5.2 數(shù)據(jù)編碼的設(shè)計
MC9S08GT60單片機(jī)有36個端口,大部分端口都具有雙重功能,本文使用端口PTA7,配置該端口的方向寄存器PTADD_PTADD7為1,即PTA7為輸出,根據(jù)脈沖編碼的規(guī)則,進(jìn)行不同的延時操作,使該端口輸出一定寬度的數(shù)據(jù)脈沖,通過示波器查看該端口,可看到穩(wěn)定的脈沖序列。
5.3 接收端信號的輸入捕捉設(shè)計
將TPM2的狀態(tài)控制寄存器的位CPWMS置0,則TPM2可以工作在輸入捕捉模式、輸出比較模式、邊沿脈沖輸出模式;為使TPM2通道0工作在輸入捕捉方式,需要進(jìn)一步設(shè)置TPM2通道0狀態(tài)控制寄存器,將TPM2C0SC的模式選擇位MS0B:MS0A設(shè)置為00,選擇了輸入捕捉方式,此外,要設(shè)置捕捉發(fā)生在什么條件下,那么需要設(shè)置TPM2COSC中的極性選擇位ELS0B:ELS0A,使其為01,目的是在該引腳出現(xiàn)上升沿時發(fā)生捕捉。在發(fā)生捕捉時,通道值寄存器會將定時寄存器的值進(jìn)行鎖存,因此比較兩次輸入捕捉時,通道值寄存器的內(nèi)容,根據(jù)編碼規(guī)則,可知道該值對應(yīng)的編碼是‘1’或‘0’。此外通道值寄存器是16位的,如果希望通過串口調(diào)試窗口查看比較結(jié)果,因為串口接收數(shù)據(jù)緩沖寄存器是8位的,那么可以將其分解為兩個8位的數(shù)據(jù)通過串口發(fā)送。
以下是輸入捕捉的中斷子程序:
程序功能描述:將捕捉的數(shù)據(jù)發(fā)往串口查看,這樣不管用什么發(fā)射器,都可以通過觀察串口數(shù)據(jù)得到識別碼,完成不同的功能。
500)this.style.width=500;" />
6 結(jié)語
紅外通信一般用在低數(shù)據(jù)速率,并且短距離的場合中,因此需要低功耗的運行要求。而Freescale的這款單片機(jī)工作電壓可達(dá)到1.8 V,在單片機(jī)空閑方式下,通過設(shè)置SOPT和SPMSC兩個寄存器來設(shè)計不同的停止低功耗模式,或者執(zhí)行一條WAIT指令,使單片機(jī)進(jìn)入等待的低功耗模式,這里就不再詳細(xì)講述其實現(xiàn)過程。MC9S08GT60單片機(jī)與其他低電壓、低功耗的單片機(jī)不同之處在于,它并非是以犧牲性能為代價來換取1.8 V的低電壓。因此本文使用該單片機(jī)討論了發(fā)送和接收紅外電路的設(shè)計過程及通信協(xié)議的運用,該系統(tǒng)的設(shè)計切實可行,對紅外控制開發(fā)者有一定的幫助。