張惠興,鐘文濤,張耿旭
(TCL集團股份有限公司,廣東 惠州 516006)
紅外信號是由“有載波”和“無載波”兩種數(shù)據(jù)按一定編碼方式形成的信號,如圖1所示。進行紅外信號學習時,一方面要精確獲取所需要學習的紅外信號的載波頻率,另一方面也要精確獲取所學信號的各個“有載波”及“無載波”區(qū)的時長。在使用臺灣Mstar公司的MS6A801芯片平臺(軟件系統(tǒng)為Andrion4.0)開發(fā)一款產(chǎn)品時,需要通過紅外信號控制外圍設備,因此需要學習外圍設備遙控器的紅外信號。外圍設備紅外信號的載波頻率有38 kHz,56 kHz或其他頻率。為了精確獲取所學紅外信號的頻率,需要使用5 μs以下的定時中斷。當使用Android系統(tǒng)的μs級定時器進行紅外信號學習時,發(fā)現(xiàn)無法獲得精確的定時中斷,中斷時刻有時提前有時延后,造成學習結(jié)果不準確,同一信號有時需要學習多次才成功,另一方面,學習過程中如果有干擾也會造成學習結(jié)果不準確。
Android的定時器有高精度定時器(Hrtimer)和低精度定時器(Jiffies),Hrtimer也可設置為高精度模式和低精度模式,在MS6A801平臺,高精度模式可以達到ns級的分辨率。當要獲取高精度的時間差時,將Hrtimer設置成高精度模式,通過hrtimer.base->get_time()在起始和結(jié)束時刻各獲取一次系統(tǒng)時間,相減則得到兩個時刻的高精度時間差[1-2]。

圖1 紅外信號的波形(截圖)
通過20個(可視情況整)有效的載波時長的平均值計算載波頻率,采集時不要求采集連續(xù)的20個周期的載波,可以跨“有載波”區(qū)域,方法如下:
1)設定一個20單元的無符號整數(shù)數(shù)組,用于存儲認可的20個載波的周期時長。
2)當紅外輸入引腳有上升沿中斷(非首次),計算與上一次上升沿中斷時刻的時間差,也就是一個周期時長。
3)判斷這個周期時長是否可信:將這個時長與數(shù)組中上一次采集的數(shù)據(jù)的時長進行比較,如果誤差較大(例如大于1%,可設置)且數(shù)組中的歷史數(shù)據(jù)小于6,將數(shù)組的歷史數(shù)據(jù)清零,以這個數(shù)據(jù)為起點重新存儲;如果誤差較大(例如大于1%,可設置)且數(shù)組中的歷史數(shù)據(jù)大于6,則將新的周期時長拋棄。
4)如果本次“有載波”的時段里面沒有完成20次載波周期時長的采集,那么在下一個“有載波”時段繼續(xù),直到數(shù)組存滿。
5)將已存滿的數(shù)組中的數(shù)據(jù)取平均值,計算出平均時長,從而計算出信號的載波頻率。
實現(xiàn)載波采集的上升沿中斷子函數(shù)的流程如圖2所示。

圖2 上升沿中斷子函數(shù)的流程圖
1)檢測紅外學習信號輸入引腳的上升沿電平,通過Hrtimer精確獲得當前時間(hrtimer.base-> get_time()),當“有載波”時段開始時,記錄當前系統(tǒng)時間,記t1。
2)記錄最后一次上升沿中斷的時刻,記為t2。
3)當連續(xù)較長的時間(這個時間可設置)沒有檢測到載波,則記T有載波=t2-t1為“有載波”的時長并存儲,而“無載波”的時段起始則為t3=t2;
4)當重新檢測到載波的時候,存入t2,記“無載波”時長T無載波=t2-t3并存儲,t2作為下一個“有載波”的起始存入t1,重復1)~4),直到一幀信號采集結(jié)束。
實現(xiàn)“有載波”和“無載波”時長采集的定時中斷的子函數(shù)流程如圖3所示(注:為了區(qū)分有跳變位的紅外信號,采用對一個紅外信號采集兩次的方法)。

圖3 定時中斷的子函數(shù)流程圖
在測試室將進行改善前產(chǎn)品及改善后的產(chǎn)品進行測試對比。待學習的紅外信號選用型號為RC410的遙控器的MUTE鍵的信號,將待學習的遙控器的發(fā)射管與采集信號的接收管正對,距離保持20 cm,各重復學習500次并發(fā)射學習信號控制外圍設備進行驗證,結(jié)果如表1所示。

表1 近距離重復測試結(jié)果
從測度結(jié)果可以看出,本文的改善方法對近距離紅外學習的準確性有很大提高。
如圖4所示,在一平臺上用白色的紙標好角度及距離,將待學習的遙控器置于不同的位置,使其發(fā)射管保持指向采集信號的接收管,每個位置學習驗證2次,只要有1次失敗就算失敗,測試結(jié)果如表2和表3所示,格中打×的表示失敗。

圖4 多距離多角度測試示意圖(截圖)

表2 改善前多距離多角度測試結(jié)果

表3 改善后多距離多角度測試結(jié)果
從測試結(jié)果可以看出,改善后的產(chǎn)品在±30°范圍內(nèi)學習準確性有提高,在大角度范圍時50 cm內(nèi)學習準確性有提高。
本文提出的改善方法,一方面對定時精度進行改進,另一方面通過跨區(qū)域?qū)d波進行采集[3],加上平均濾波[4],提高容錯性。測試結(jié)果表明,本方法對改善紅外學習的準確性有很大的提高。
[1] 苗忠良,曾旭,宛斌.深入Android應用開發(fā):核心技術解析與最佳實踐[M].北京:機械工業(yè)出版社,2012.
[2] 楊豐盛.Android技術內(nèi)幕:系統(tǒng)卷[M].北京:機械工業(yè)出版社,2011.
[3] 康保壽.學習型紅外遙控器的實現(xiàn)[J].信息通信,2011(4):189-190.
[4] 于飛,華宇寧.波段紅外信號采集和處理系統(tǒng)[J].沈陽理工大學學報,2011(4):27-30.