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