摘 要: 提出了一種用于智能家居的學(xué)習(xí)型空調(diào)遙控器解決方案。該方案在軟件設(shè)計(jì)時(shí)采用測(cè)量脈沖寬度的原理并對(duì)測(cè)量數(shù)據(jù)進(jìn)行了編碼壓縮,同時(shí)用軟件形式模擬38 kHz載波信號(hào)的發(fā)送,實(shí)現(xiàn)了對(duì)各種空調(diào)遙控器的自學(xué)習(xí)功能。測(cè)試結(jié)果表明,本編碼壓縮方法簡(jiǎn)化了編碼信息,減少了存儲(chǔ)空間,可以代替各種遙控器。
關(guān)鍵詞: 紅外遙控;載頻;編碼狀態(tài)轉(zhuǎn)換;自學(xué)習(xí)
現(xiàn)代科學(xué)技術(shù)的發(fā)展,尤其是計(jì)算機(jī)技術(shù)和網(wǎng)絡(luò)技術(shù)的高速發(fā)展,不僅改變了人們的工作方式,也逐漸地改變了人們的生活方式,智能家居即是在這樣的背景下產(chǎn)生的。無(wú)線控制的智能家居系統(tǒng)可以不破壞原有裝修,只要在一些插座等處安裝相應(yīng)的模塊即可實(shí)現(xiàn)智能控制,更不會(huì)對(duì)原來(lái)房屋墻面造成破壞,即便家居已裝修也可輕松升級(jí)為智能家居。但是對(duì)主要由遙控器控制的空調(diào)系統(tǒng)需設(shè)計(jì)專門(mén)的學(xué)習(xí)型紅外遙控器以便接入智能家居系統(tǒng)。為此,本文提出一種此類型的空調(diào)遙控器解決方案。
1 紅外遙控碼型分析
通過(guò)對(duì)市面上比較普遍的幾十種遙控器的碼型結(jié)構(gòu)進(jìn)行研究分析發(fā)現(xiàn),各空調(diào)生產(chǎn)廠家對(duì)其遙控器的收發(fā)信號(hào)的脈沖編碼、碼型和碼流沒(méi)有統(tǒng)一的標(biāo)準(zhǔn),存在如下?tīng)顩r:
(1)幀格式多樣:脈沖流中一般包括:幀頭、系統(tǒng)碼、操作碼、同步碼、幀間隔碼、幀尾,且同步碼與幀間隔碼出現(xiàn)的位置不固定。對(duì)這些靈活多變的幀格式,很難區(qū)分各種脈沖流的含義。
(2)碼型多樣,如圖1所示。
(3)載波頻率誤差大:標(biāo)準(zhǔn)載波頻率為38 kHz,誤差范圍±2 kHz。
(4)編碼長(zhǎng)短不一致:彩電類產(chǎn)品一般只有幾十位,而空調(diào)遙控器編碼長(zhǎng)達(dá)上百位。
(5)發(fā)送方式不同:最常用的發(fā)送方式有:完整幀如圖2(a)只發(fā)送1次、完整幀如圖2(b)重復(fù)發(fā)送2次、如圖2(c)先發(fā)1個(gè)完整幀,后重復(fù)發(fā)送1個(gè)幀頭和1個(gè)脈沖。
本系統(tǒng)避開(kāi)了各種形式的碼型和幀格式,不考慮其實(shí)際意義,只檢測(cè)脈沖的時(shí)間寬度[1],再對(duì)測(cè)量的數(shù)據(jù)進(jìn)行壓縮,即可存儲(chǔ)遙控命令,發(fā)送時(shí)進(jìn)行解壓來(lái)重構(gòu)命令數(shù)據(jù)。
2 遙控器硬件結(jié)構(gòu)
學(xué)習(xí)型紅外遙控器由紅外一體化接收電路、反相器、溫度傳感器、單片機(jī)、紅外發(fā)送電路、E2PROM存儲(chǔ)器、鍵盤(pán)及LED指示燈構(gòu)成,如圖3所示。
單片機(jī)AT89S52構(gòu)成紅外遙控的處理器,其數(shù)據(jù)存儲(chǔ)器RAM(258B)用來(lái)存儲(chǔ)學(xué)習(xí)過(guò)程中編碼信號(hào)的脈沖寬度和編碼。
(1)紅外發(fā)射電路:38 kHz方波直接由單片機(jī)模擬產(chǎn)生,經(jīng)過(guò)三極管放大后,驅(qū)動(dòng)紅外發(fā)光二極管(注意:38 kHz載波不能用AT89S52定時(shí)器產(chǎn)生,因?yàn)?8 kHz載波信號(hào)的周期只有26 μs,考慮到有載波時(shí)的占空比為1/3,即定時(shí)器的最小中斷時(shí)間間隔只有8 μs,在執(zhí)行中斷時(shí)中斷處理過(guò)程(如保護(hù)現(xiàn)場(chǎng)等)實(shí)際運(yùn)行時(shí)間根據(jù)中斷點(diǎn)的不同需要的時(shí)間也不同,有時(shí)會(huì)大于8 μs,這樣不能保證38 kHz信號(hào)的穩(wěn)定性),在軟件處理過(guò)程中應(yīng)用延時(shí)程序模仿38 kHz的紅外載波信號(hào)。
(2)紅外一體化接收頭:接收器選用一體化紅外接收器MK0038,該接收器是黑色環(huán)氧聚光透鏡,能夠?yàn)V除可見(jiàn)光的干擾,集紅外接收和放大于一體,內(nèi)含紅外線PIN接收管、選頻放大器和解調(diào)器。不需任何外接元件,就能完成從紅外遙控信號(hào)(38 kHz的載波信號(hào))中分離出基帶信號(hào),輸出與TTL電平兼容的所有工作。在與單片機(jī)連接時(shí),將接收來(lái)的紅外遙控信號(hào)反相,其正向信號(hào)接外部中斷0,反相信號(hào)接外部中斷1。通過(guò)記錄2個(gè)中斷間的間隔時(shí)間來(lái)測(cè)量紅外遙控信號(hào)的高低電平的脈寬值。
(3)外接E2PROM存儲(chǔ)器:用于存放學(xué)習(xí)到的控制命令的編碼和高低電平信號(hào)的脈寬值。
(4)按鍵盤(pán):?jiǎn)?dòng)一個(gè)學(xué)習(xí)過(guò)程。
(5)溫度傳感器:用于測(cè)量室內(nèi)溫度,根據(jù)已學(xué)習(xí)的溫度控制命令自動(dòng)開(kāi)啟或關(guān)閉空調(diào)。
(6)LED指示燈:用于顯示遙控器的工作狀態(tài)。
3 系統(tǒng)軟件設(shè)計(jì)
學(xué)習(xí)型遙控器的設(shè)計(jì)性能及實(shí)現(xiàn)與其軟件設(shè)計(jì)編寫(xiě)具有密切的關(guān)系,在設(shè)計(jì)中采用內(nèi)部定時(shí)器對(duì)信號(hào)高低電平計(jì)時(shí)的方法來(lái)采集數(shù)據(jù)并保存。當(dāng)系統(tǒng)識(shí)別到起始碼的低電平時(shí),系統(tǒng)啟動(dòng)內(nèi)部定時(shí)器對(duì)輸入低電平計(jì)時(shí),當(dāng)起始碼的低電平結(jié)束時(shí)保存定時(shí)器此時(shí)的值,記錄下起始碼的低電平信號(hào)脈沖寬度值;然后依次保存采集到的編碼信號(hào)脈沖寬度值,如果采集到編碼信號(hào)位數(shù)大于設(shè)定值M(程序中設(shè)定值),就認(rèn)為編碼采集已經(jīng)結(jié)束,即學(xué)習(xí)子程序結(jié)束。
在軟件設(shè)計(jì)過(guò)程中,使用了2個(gè)外部中斷和2個(gè)內(nèi)部定時(shí)器,外部中斷0啟動(dòng)定時(shí)器0停止定時(shí)器1計(jì)數(shù)并保存定時(shí)器1的數(shù)據(jù),外部中斷1啟動(dòng)定時(shí)器1停止定時(shí)器0計(jì)數(shù)并保存定時(shí)器0的數(shù)據(jù),用定時(shí)器0記錄紅外解調(diào)信號(hào)的高電平時(shí)長(zhǎng)。用定時(shí)器1記錄紅外解調(diào)信號(hào)的低電平時(shí)長(zhǎng),本文采用12 MHz晶振,1個(gè)機(jī)器周期是1 μs,計(jì)數(shù)器采用16位計(jì)數(shù)器。如果在外部中斷0和外部中斷1之間不發(fā)生內(nèi)部定時(shí)器中斷,可以記錄的最大時(shí)間間隔為65.5 ms;如果在外部中斷0和外部中斷1之間發(fā)生內(nèi)部定時(shí)器中斷則可以記錄的最大時(shí)間間隔是n×65.5 ms,其中n為中斷次數(shù)。其值保存在設(shè)定的數(shù)據(jù)存儲(chǔ)器中,然后寫(xiě)入到外部E2PROM存儲(chǔ)器中。發(fā)射過(guò)程再?gòu)耐獠康腅2PROM存儲(chǔ)器讀出,通過(guò)用軟件模仿38 kHz載波信號(hào)發(fā)送編碼信息。
3.1 數(shù)據(jù)壓縮編碼
在設(shè)計(jì)過(guò)程中研究發(fā)現(xiàn):盡管空調(diào)遙控器存在幀格式多樣、碼型多樣、編碼長(zhǎng)短不同、發(fā)送方式不同等問(wèn)題,但對(duì)于某一個(gè)獨(dú)立的空調(diào)遙控器還是有規(guī)律可依的。在系統(tǒng)設(shè)計(jì)方案時(shí),選擇通用性好的就能解決這個(gè)問(wèn)題。例如測(cè)得一款空調(diào)遙控器的1個(gè)命令碼如下:
低電平(有紅外發(fā)送載波)信號(hào)碼時(shí)長(zhǎng)數(shù)據(jù)是:
0x7368 0x0578 0x0577 0x0563 0x0555 0x0584 0x0564 0x0545 0x0572 0x0554……
高電平(無(wú)紅外發(fā)送載波)信號(hào)碼時(shí)長(zhǎng)數(shù)據(jù)是:……0x0578 0x1377 0x0563 0x0555 0x1384 0x0564 0x0545 0x1382 0x0554 0x01345……
盡管碼型有幀頭、系統(tǒng)碼、操作碼、同步碼、幀間隔碼、幀尾,但不論是低電平(有紅外發(fā)送載波)信號(hào)碼時(shí)長(zhǎng)或是高電平(無(wú)紅外發(fā)送載波)信號(hào)碼時(shí)長(zhǎng)其結(jié)構(gòu)都相對(duì)簡(jiǎn)單。但是1個(gè)幀如此多的數(shù)據(jù)占據(jù)了大量的內(nèi)存空間,增加了硬件成本和程序運(yùn)行時(shí)間,有必要在數(shù)據(jù)分析的基礎(chǔ)上采取數(shù)據(jù)壓縮。
數(shù)據(jù)壓縮根據(jù)使用場(chǎng)合和要求的不同分有損和無(wú)損壓縮。為了在數(shù)據(jù)發(fā)送時(shí)準(zhǔn)確再現(xiàn)接收到的紅外數(shù)據(jù),本文采用無(wú)損壓縮的方法,使用的編碼方式是改進(jìn)型的游程編碼,根據(jù)游程編碼的原理,游程長(zhǎng)度(游程或游長(zhǎng))RL(Run-Length)指的是由信號(hào)采樣值構(gòu)成的數(shù)據(jù)流中各個(gè)數(shù)據(jù)重復(fù)重現(xiàn)的長(zhǎng)度,只要給出重復(fù)的數(shù)據(jù)、數(shù)據(jù)長(zhǎng)度和位置就可以恢復(fù)原來(lái)的數(shù)據(jù)流[2-3]。其具體實(shí)現(xiàn)過(guò)程如下:
(1)在接收紅外信號(hào)時(shí)分別按高電平和低電平不同的時(shí)間長(zhǎng)度編號(hào)(時(shí)間長(zhǎng)度規(guī)定一定的誤差范圍),每1次測(cè)得的數(shù)據(jù)根據(jù)電平持續(xù)時(shí)間記錄其編號(hào),再將同編號(hào)的數(shù)據(jù)相加求平均值作為標(biāo)準(zhǔn)時(shí)間長(zhǎng)度,根據(jù)紅外信號(hào)格式的不同,可以選擇4 bit壓縮方式和2 bit壓縮方式,即壓縮比達(dá)到1/4和1/8。在接收紅外數(shù)據(jù)時(shí)采用的是中斷方式,不占用過(guò)多的CPU時(shí)間,還可以一邊學(xué)習(xí)一邊存入E2PROM以達(dá)到節(jié)省內(nèi)存空間的目的。
將上述空調(diào)遙控器的1個(gè)命令碼(其中紅外編碼長(zhǎng)度為150 bit,壓縮比為1/8)的數(shù)據(jù)存儲(chǔ)在E2PROM中的數(shù)據(jù)格式如下:
01100101……(共10個(gè)字節(jié)低電平數(shù)據(jù));
11010101……(共10個(gè)字節(jié)高電平數(shù)據(jù));
0x96(字節(jié)總長(zhǎng)度);
0x1377 0x0560 0x0572 0x370(4個(gè)不同的時(shí)長(zhǎng));
(2)發(fā)送紅外數(shù)據(jù)時(shí),先從E2PROM中讀出字節(jié)總長(zhǎng)度、4個(gè)不同的時(shí)長(zhǎng)及部分高低電平數(shù)據(jù),在發(fā)送高電平時(shí)(即不發(fā)送紅外載波信號(hào))且時(shí)長(zhǎng)大于1 ms,再讀E2PROM數(shù)據(jù),這樣更可以節(jié)省內(nèi)存空間。
3.2 軟件設(shè)計(jì)
根據(jù)上述原理其軟件流程圖如圖4所示。
本文提出的學(xué)習(xí)型紅外遙控器的設(shè)計(jì)方案。由于在數(shù)據(jù)處理和存儲(chǔ)時(shí)采用了無(wú)損壓縮的改進(jìn)型游程編碼技術(shù),簡(jiǎn)化了數(shù)據(jù)結(jié)構(gòu),節(jié)省了存儲(chǔ)空間,存儲(chǔ)1個(gè)鍵碼(如150 個(gè)雙字節(jié)信息)僅需29 個(gè)字節(jié),壓縮比達(dá)7:1。同時(shí)采用均值算法,消除了載波頻率誤差大的影響,使發(fā)送的載波頻率誤差小于0.5 kHz。本設(shè)計(jì)能自動(dòng)學(xué)習(xí)市面上流行的各種紅外遙控器的遙控指令,從而控制各種不同類型的紅外遙控設(shè)備。比較接收和發(fā)送的紅外波形結(jié)果是兩波形完全一致。通過(guò)對(duì)海爾、澳柯瑪、三星等紅外空調(diào)遙控器的測(cè)試,都達(dá)到了理想的準(zhǔn)確率,有效的遙控距離可達(dá)8~10 m[4]。本設(shè)計(jì)作為一個(gè)節(jié)點(diǎn)再連接上通信模塊即可實(shí)現(xiàn)智能家居系統(tǒng)中空調(diào)的智能控制。
參考文獻(xiàn)
[1] 陳祖爵,王建毅.智能型紅外遙控器的設(shè)計(jì)[J].微計(jì)算機(jī)信息,2008,24(1-2):305-307.
[2] 徐志,何明華,林武,等.一類基于軟件載波的學(xué)習(xí)型遙控器的設(shè)計(jì)與實(shí)現(xiàn)[J].現(xiàn)代電子技術(shù),2009(2):36-38.
[3] SALOMON D.?dāng)?shù)據(jù)壓縮原理與應(yīng)用[M].吳樂(lè)南,譯.北京:電子工業(yè)出版社,2003.
[4] 丁躍華,陳艷峰,龍箏.紅外遙控系統(tǒng)的一種設(shè)計(jì)方法[J].現(xiàn)代電子技術(shù),2007(7):71-75.