智能型紅外遙控器的設計
引言
本文引用地址:http://www.j9360.com/article/82284.htm空調已進入千家萬戶,空調遙控器作為空調的用戶界面,其設計的原理已成熟。目前,對學習型智能遙控器的研制開展了大量的工作,旨在提高遙控器的智能化和通用性,取得了較大的進展,并有部分產品進入市場。當前研制開發的學習型智能遙控器主要采用38KHz固定載波頻率,遙控器編碼不壓縮或簡單壓縮。空調遙控器不同于其它家電遙控器(如彩電),空調遙控器發出的編碼包含當前狀態的多種信息,而彩電遙控器的編碼是一鍵一碼。把空調遙控器所有可能的狀態都要學習和存儲,需要花費大量的時間和存儲空間。為此,提出了一種基于溫度控制的編碼狀態轉換算法,為基于單片機的智能型紅外空調遙控器的設計提供了可能。
1 紅外遙控碼型分析
1.1 紅外遙控碼型研究分析
目前,各電器生產廠家對遙控脈沖編碼及碼流還沒有形成統一的標準。通過對市面上比較普遍的幾十種遙控器的碼型結構進行研究分析,總結其特點如下:
(1)碼型多樣:脈沖流中一般包括:幀頭、系統碼、操作碼、同步碼、幀間隔碼、幀尾。且同步碼與幀間隔碼出現的位置不固定。針對這些靈活多變的碼型格式,很難區分各種脈沖流的含義。
(2)載波頻率不固定:常用的遙控器采用38KHz作為載波頻率,有的采用36KHz-42KHz之間的載頻。
(3)編碼長短不一:彩電類產品一般只有幾十位,空調遙控器編碼長達上百位。
(4)不同的發送方式:常用有三種方式,即:完整幀只發送一次(如圖1a)、完整幀重復發送兩次(如圖1b)、先發一個完整幀,后重復發送幀頭和一個脈沖(如圖1c)。
圖1 紅外編碼完整幀格式
由于編碼方式的多樣化,若區分每種碼流的含義進行學習,其復雜性極高且占用很大的內存空間。本系統避開了各種形色碼流的干擾,總結了紅外遙控器編碼的共性,只需了解脈沖的時間寬度,無需關心它的實際意義。因此,在系統中沒有引導碼、0碼、1碼、同步幀、反碼等,定義了用0、1、2等數字表示各種時間寬度不等的脈沖流的算法。
1.2 空調紅外遙控碼型研究分析
空調遙控器開發的關鍵是溫度狀態的轉化。對多種類型空調遙控器紅外編碼進行大量研究分析,找出了其編碼規律:在空調的每一個編碼中,其中有4位二進制表示開始溫度(溫度1),另外4位二進制表示按鍵后的末溫度(溫度2),當遙控器進行溫度控制時,前一按鍵的末狀態跳轉到后一按鍵的初狀態,從而可以對空調的溫度進行連續控制。對空調遙控器紅外編碼進行提取,取出有關表示溫度的部分(各種空調遙控器的編碼規律類似),如下表所示:
空調溫度部分編碼表
圖2 空調溫度編碼狀態轉換圖
2 遙控器硬件結構
遙控器由STC系列STC89C51RD+單片機、紅外編碼發射與接收電路、鍵盤、顯示屏、SD卡接口等外圍器件組成。其中SD卡用來存放和保存學習的遙控器編碼,并能與PC機進行交流;遙控器編碼的識別是通過接收電路和整形電路來實現,為了能識別一定范圍內的載頻,編碼接收電路中不含解調電路,載頻的提取是用單片機來實現。
圖3 遙控器硬件結構
3 軟件設計
3.1 編碼狀態轉換算法與實現
空調遙控器編碼復雜,主要有制熱、制冷、除濕、通風等模式,有些模式下還有不同的風速級別,并在每一種風速下,其溫度狀態變化規律不同。為此,對空調遙控器的編碼創建了狀態轉換算法。算法中通過建立空調遙控器工作模式、風速等級和溫度值序列三層關系模型,設計了對應的數組序列,每一個數組序列中存放著各種模式下不同風速等級時的溫度值編碼,通過指針方式進行調用。例如:圖2中的二進制數據:{0000,0001,0011,0010,0100,0101,0111,0110,1100,1101,1111,1110,1000,1001,1011,1010}轉換成十進制后,初始化數組data1,則:data1[i]={0,1,3,2,4,5,7,6,12,13,15,14,8,9,11,10};指針P = data1[i%16]。結合data1和指針P,空調遙控器在一級風速時的編碼狀態轉換流程見圖4:
圖4 編碼狀態轉換流程
3.2載波信號精密檢測
遙控器載頻通常在36KHz-42KHz范圍之間,如簡單的用38KHz的載頻調制,對有些遙控設備不能正確控制。為此,遙控器自學習時,需要精確檢測編碼的載波頻率[1]。
通常用單片機定時器檢測的最高頻率和遙控器的載波頻率屬同一量級,無法精確測量載波脈沖的頻率。為此,提出了均值算法。將定時器1和定時器2(捕獲功能)配合使用,通過編碼脈沖寬度和載波脈沖數的測量,通過計算,得到精確的載波頻率。載波信號精確測量流程見圖5:
圖5 載波信號精確測量流程圖
3.3 信號識別、編碼分類與發送
遙控器編碼長度為幾十位到上百位,而且,每個編碼的信息量較大。遙控器自學習時,所有的編碼狀態都要按照脈沖寬度方式存儲,要求較大的存儲空間。為此,提出了一種編碼壓縮技術[2][3]。遙控器編碼內容包括:幀頭、機器碼、操作碼、同步碼、幀間隔和尾幀等類型,自學習時,對識別的遙控器編碼進行分類,并按類型號進行存儲,見圖6所示:
圖6 信號識別、編碼分類示意圖
遙控器自學習編碼識別和分類過程:
(1) 紅外編碼和載波識別
紅外編碼和載波周期相差較大,先設定一個脈沖周期的門限值THRESHOLD1。每當有脈沖下降沿到時,啟動定時器開始定時,在下一個下降沿時定時為t。當0THRESHOLD1時,為紅外編碼脈沖。此時記錄T1的值為t,同理可檢測到T2,T3,T4…編碼脈沖的值。
(2) 數組建立
char sigdata[i];
typedef struct {
union intchar bith;
union intchar bitl;
uchar bitl1;
} timer[m];
其中:sigdata[i]存放編碼中順序出現幀的類別;
timer[m]存放 sigdata[i] 中幀的不同類別的時間值。
(3) 編碼幀類別識別
將T(i+1)的t1、t2與T(i)的t1、t2分別進行比較,若相等,timer[m]數組中不寫入新的內容,此時,sigdata[i+1]=sigdata[i];否則,timer[m]中寫入T(i+1)的時間值,且sigdata[i+1]中寫入新的類別號。例如學習一個按鍵編碼后:timer[m]={9000,4500,540,0,540,540,540,540,1650,0,……};sigdata[i]={1,2,3,3,4,……}。
(4) 紅外編碼完整幀格式確定
兩個完整幀之間有較長的時間間隔,且這段時間間隔大于編碼中任何低電平的時間。為此,可定義THRESHOLD2為兩完整幀之間的間隔值;可定義THRESHOLD3為編碼脈沖結束后停止幀長度。當THRESHOLD3> t2 >THRESHOLD2時,判斷為第二幀的開始。再比較T(i+1)中t1,t2與T2中t1,t2的值,若相等,為一次發送兩個完整幀。否則,一次發一幀加幀頭和一個脈沖;當t2 >THRESHOLD3,編碼接收完成,為一次只發送一個完整幀的情況。
(5) 發送載波頻率初始值計算
載波頻率= ,6分頻時n=2;12分頻時n=4。得(RCAP2H,RCAP2L)=3*freq(freq為學習時檢測出的載波脈沖寬度)。
4 結論
通過對空調遙控器編碼的精簡,創建了狀態信息轉換表,當每進入一種模式時,只需發射與溫度狀態信息相關的編碼,簡化了發射編碼、提高了傳輸效率。開發的遙控器自學習功能,通過編碼學習與原機進行對比,每種脈沖流的時間僅差1個時鐘周期;采用均值算法,使發送的載波頻率誤差小于0.5KHz;設計的遙控器編碼矢量壓縮算法,存儲一個鍵碼(200個編碼)僅需134個存貯單元,壓縮比達8:1。上述技術為采用單片機實現智能空調遙控器創建了基礎,其中,“狀態信息轉換表的創建”和“高精度載波頻率測量”是本文的主要創新。
參考文獻:
[1] 江玉潔.新型頻率測量方法的研究[M]. 儀器儀表學報,2004,22:30-33
[2] 李冬梅等.通用學習式紅外遙控器中數據壓縮與識別算法[M]. 清華大學學報(自然科學版),2000,40:85-88
[3] 張鳴瑞等.編碼理論[M ]. 北京:航空航天大學出版社,1990.
[4] 安穎、劉麗娜.具有學習功能的智能遙控器.微計算機信息,2005 No.3
[5] VITERBI,A.J.K.OMURA,Principle of digital communication and coding, McGraw-Hill Book Company,New York,1979
紅外遙控器相關文章:紅外遙控器原理萬能遙控器相關文章:萬能遙控器代碼
脈沖點火器相關文章:脈沖點火器原理
評論