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