摘 要: 提出一種基于mega128單片機(jī)學(xué)習(xí)型紅外遙控器的設(shè)計(jì)與實(shí)現(xiàn)。對(duì)該遙控器的工作原理、軟硬件進(jìn)行介紹,并對(duì)紅外編碼學(xué)習(xí)的實(shí)現(xiàn)過(guò)程進(jìn)行詳細(xì)描述。該學(xué)習(xí)型紅外遙控器是通過(guò)測(cè)量脈沖寬度的方法來(lái)復(fù)制紅外脈沖信號(hào)并進(jìn)行保存,以軟件形式實(shí)現(xiàn)38 kHz載波,最后通過(guò)紅外發(fā)射二級(jí)管發(fā)送紅外編碼來(lái)控制家用電器。
關(guān)鍵詞: mega128; 學(xué)習(xí)型紅外遙控器; 測(cè)量脈沖寬度
紅外遙控是一種無(wú)線、非接觸控制技術(shù),具有抗干擾能力強(qiáng)、信息傳輸可靠、功耗低、成本低、易實(shí)現(xiàn)等顯著優(yōu)點(diǎn),被諸多電子設(shè)備特別是家用電器廣泛采用。隨著人們生活水平的提高,家用電器的數(shù)量逐漸增加,使用紅外遙控器的頻率越來(lái)越高。但是由于各種紅外遙控器編碼格式不同[1],所以各種紅外遙控器不能兼容,這樣一個(gè)家庭就需要很多個(gè)遙控器,很不方便。
目前國(guó)內(nèi)學(xué)習(xí)型遙控器大部分采用復(fù)制遙控器紅外波形的思想,方法很多。但是由于采用專(zhuān)用遙控發(fā)射芯片,集成度高但成本也高。
本文介紹一種基于mega128單片機(jī)的具有學(xué)習(xí)型的紅外遙控器的設(shè)計(jì),其思想是通過(guò)測(cè)量經(jīng)過(guò)紅外接收芯片解調(diào)后輸出的編碼脈沖寬度[2],然后存入單片機(jī)內(nèi)部eeprom指定地址。當(dāng)要發(fā)生紅外信號(hào)時(shí),從存儲(chǔ)區(qū)還原出相應(yīng)的紅外遙控編碼,并調(diào)制到38 kHz的載波信號(hào)上,最后直接驅(qū)動(dòng)紅外發(fā)光二極管發(fā)射紅外信號(hào),實(shí)現(xiàn)一個(gè)遙控器控制多種紅外家電設(shè)備。
1 學(xué)習(xí)型紅外遙控器基本硬件結(jié)構(gòu)
學(xué)習(xí)型紅外遙控器由以下幾個(gè)模塊組成[3]:?jiǎn)纹瑱C(jī)、紅外接收模塊、紅外發(fā)射模塊和矩陣鍵盤(pán),如圖1所示。系統(tǒng)采用8 MHz晶振,直接采用mega128內(nèi)部E2PROM來(lái)存儲(chǔ)紅外遙控編碼,其容量為4 KB。
紅外接收模塊電路如圖2所示。紅外接收芯片采用HS0038A2,此芯片對(duì)接收到的紅外信號(hào)進(jìn)行放大,檢波整形并解調(diào)出紅外遙控編碼,得到TTL電平,反相輸入到mega128 的PD0和PD1口,即外部中斷0和外部中斷1口。通過(guò)上升沿和下降沿兩個(gè)邊沿觸發(fā)中斷來(lái)控制定時(shí)器的開(kāi)與關(guān),從而記錄高低電平的脈沖寬度值。
紅外發(fā)射模塊電路如圖3所示。當(dāng)系統(tǒng)進(jìn)入發(fā)射功能時(shí),單片機(jī)首先掃描矩陣鍵盤(pán),識(shí)別相應(yīng)按鍵的按下情況,然后從E2PROM中取出相應(yīng)鍵值的遙控信號(hào)[4],即通過(guò)學(xué)習(xí)后保存到E2PROM里的高低電平的寬度值。與此同時(shí),利用單片機(jī)T0定時(shí)器產(chǎn)生38 kHz的載波信號(hào)。最后將遙控信號(hào)調(diào)制到載波上,通過(guò)IO口直接驅(qū)動(dòng)紅外發(fā)射二極管發(fā)射紅外信號(hào)。這里的調(diào)制完全通過(guò)軟件實(shí)現(xiàn),取代了直接用與門(mén)來(lái)調(diào)制的方式,方便準(zhǔn)確。由于mega128 單片機(jī)IO口的驅(qū)動(dòng)能力強(qiáng),可以直接驅(qū)動(dòng)二極管,避免了傳統(tǒng)三極管放大后再驅(qū)動(dòng)的繁瑣。
2 系統(tǒng)軟件設(shè)計(jì)
2.1主程序設(shè)計(jì)
系統(tǒng)上電后不斷掃描鍵盤(pán),當(dāng)檢測(cè)到學(xué)習(xí)鍵按下時(shí),調(diào)入學(xué)習(xí)子程序,對(duì)相應(yīng)功能鍵的遙控編碼進(jìn)行學(xué)習(xí)并寫(xiě)入E2PROM;當(dāng)發(fā)射鍵按下時(shí),先識(shí)別按下的功能鍵,然后從E2PROM中讀出相應(yīng)的已經(jīng)學(xué)習(xí)到的紅外遙控編碼,然后通過(guò)發(fā)射程序發(fā)射出去。如圖4所示。
2.2 學(xué)習(xí)子程序
學(xué)習(xí)程序的功能是對(duì)紅外遙控編碼的學(xué)習(xí),即對(duì)高低脈沖寬度的測(cè)量。當(dāng)中一定會(huì)存在一定誤差,不可能毫無(wú)誤差地復(fù)制出被測(cè)的紅外編碼。不過(guò),由于所有的紅外設(shè)備在接收端都允許一定的誤差,只要保證在誤差范圍內(nèi)都可以對(duì)紅外設(shè)備進(jìn)行控制。學(xué)習(xí)程序的主要思路是通過(guò)邊沿觸發(fā)中斷來(lái)控制定時(shí)器的開(kāi)和關(guān),從而測(cè)出高低脈沖寬度。mega128單片機(jī)的外部中斷0和1口的中斷方式分別設(shè)置為下降沿和上升沿觸發(fā)中斷。當(dāng)沒(méi)有接收到紅外信號(hào)時(shí),外部中斷0、1口都為高,此時(shí)程序等待紅外信號(hào)的到來(lái)。當(dāng)紅外到達(dá)時(shí),下降沿觸發(fā)中斷,學(xué)習(xí)程序跳到下降沿中斷服務(wù)程序。在中斷服務(wù)程序里,停止定時(shí)器3,保存其寄存器的值并清零,最后啟動(dòng)定時(shí)器1,這樣開(kāi)始測(cè)量低電平。當(dāng)高電平到來(lái)時(shí),上升沿觸發(fā)中斷,程序跳到上升沿中斷服務(wù)程序里,此時(shí)停止定時(shí)器1,保存其寄存器的值并清零,最后啟動(dòng)定時(shí)器3,高電平開(kāi)始測(cè)量。當(dāng)下一個(gè)低電平到來(lái)時(shí),程序又跳到下降沿中斷服務(wù)程序,重復(fù)上面的工作。這樣,高低電平的測(cè)量就在兩個(gè)邊沿觸發(fā)中斷服務(wù)程序里面來(lái)回跳轉(zhuǎn)。最后一次跳入邊沿觸發(fā)中斷服務(wù)程序時(shí),一旦產(chǎn)生定時(shí)器溢出,則程序跳入定時(shí)器溢出中斷服務(wù)程序,只要設(shè)定一個(gè)標(biāo)志位,讓程序跳回主程序即可。到此,紅外編碼學(xué)習(xí)完畢,只需把學(xué)習(xí)到的編碼寬度值存入E2PROM即可。如圖5所示。
2.3發(fā)射子程序
發(fā)射程序是把已經(jīng)學(xué)習(xí)到的紅外編碼發(fā)射出去控制紅外設(shè)備。首先要根據(jù)所按下鍵來(lái)找到E2PROM相應(yīng)的紅外編碼。這里是通過(guò)紅外接收芯片接收到的紅外編碼經(jīng)過(guò)一個(gè)反相器,所以發(fā)射時(shí)要把原來(lái)的高低電平翻轉(zhuǎn)一下。紅外發(fā)射程序的思想是通過(guò)兩個(gè)定時(shí)器的配合來(lái)調(diào)制出38 kHz的紅外信號(hào)。定時(shí)器0產(chǎn)生38 kHz的載波信號(hào),用已經(jīng)學(xué)習(xí)到的低電平寬度來(lái)確定定時(shí)器0的定時(shí)長(zhǎng)度。當(dāng)發(fā)送低電平時(shí),啟動(dòng)定時(shí)器0;發(fā)送高電平時(shí),停止定時(shí)器0。如此就能發(fā)送一個(gè)與接收到的紅外編碼反相并且高電平是經(jīng)過(guò)38 kHz載波調(diào)制過(guò)的紅外遙控信號(hào),這個(gè)信號(hào)就是普通遙控器發(fā)送出去用來(lái)控制紅外設(shè)備的信號(hào)。如圖6所示。
3 實(shí)驗(yàn)測(cè)試
實(shí)驗(yàn)中用格力的一臺(tái)柜式空調(diào)進(jìn)行試驗(yàn)。圖7是接收波形,圖8是還沒(méi)有經(jīng)過(guò)38 kHz調(diào)制的發(fā)射波形。比較兩個(gè)波形可以看出,接收和發(fā)射的波形高低電平持續(xù)時(shí)間相同,只是波形正好相反,原因是在接收芯片里有一個(gè)反相過(guò)程。此時(shí),只需將38 kHz的波形調(diào)制到波形里,再通過(guò)紅外發(fā)光二極管發(fā)射出去,即可對(duì)空調(diào)進(jìn)行控制。把空調(diào)遙控器上的所有功能鍵都嘗試過(guò)一次,都可以對(duì)空調(diào)進(jìn)行控制。
本文所設(shè)計(jì)的學(xué)習(xí)型紅外遙控器可以準(zhǔn)確地測(cè)量并學(xué)習(xí)紅外編碼信號(hào),將所學(xué)的信號(hào)復(fù)制,保存并通過(guò)紅外發(fā)射二極管發(fā)射,可以控制紅外家用設(shè)備。不同類(lèi)型的紅外遙控器,各種編碼格式都可以對(duì)其進(jìn)行學(xué)習(xí)并對(duì)電器進(jìn)行穩(wěn)定控制。
參考文獻(xiàn)
[1] 邱士安.通用遙控器的解決方案[J].昆明理工大學(xué)學(xué)報(bào), 2001(26):197-199.
[2] 蘆健,彭軍,顏?zhàn)杂?等.自學(xué)習(xí)智能型紅外遙控器的設(shè)計(jì)[J].國(guó)外電子測(cè)量技術(shù),2006,25(8):63-65.
[3] 徐志,何明華,林武,等.一類(lèi)基于軟件載波的學(xué)習(xí)型遙控器的設(shè)計(jì)與實(shí)現(xiàn)[J].現(xiàn)代電子技術(shù),2009(2):36-38.
[4] 耿德根,宋建國(guó),馬潮,等.AVR高速嵌入式單片機(jī)原理與應(yīng)用[M].北京:北京航空航天出版社,2002.