張惠興,鐘文濤,張耿旭
(TCL集團(tuán)股份有限公司,廣東 惠州 516006)
紅外信號是由“有載波”和“無載波”兩種數(shù)據(jù)按一定編碼方式形成的信號,如圖1所示。進(jìn)行紅外信號學(xué)習(xí)時(shí),一方面要精確獲取所需要學(xué)習(xí)的紅外信號的載波頻率,另一方面也要精確獲取所學(xué)信號的各個(gè)“有載波”及“無載波”區(qū)的時(shí)長。在使用臺灣Mstar公司的MS6A801芯片平臺(軟件系統(tǒng)為Andrion4.0)開發(fā)一款產(chǎn)品時(shí),需要通過紅外信號控制外圍設(shè)備,因此需要學(xué)習(xí)外圍設(shè)備遙控器的紅外信號。外圍設(shè)備紅外信號的載波頻率有38 kHz,56 kHz或其他頻率。為了精確獲取所學(xué)紅外信號的頻率,需要使用5 μs以下的定時(shí)中斷。當(dāng)使用Android系統(tǒng)的μs級定時(shí)器進(jìn)行紅外信號學(xué)習(xí)時(shí),發(fā)現(xiàn)無法獲得精確的定時(shí)中斷,中斷時(shí)刻有時(shí)提前有時(shí)延后,造成學(xué)習(xí)結(jié)果不準(zhǔn)確,同一信號有時(shí)需要學(xué)習(xí)多次才成功,另一方面,學(xué)習(xí)過程中如果有干擾也會造成學(xué)習(xí)結(jié)果不準(zhǔn)確。
Android的定時(shí)器有高精度定時(shí)器(Hrtimer)和低精度定時(shí)器(Jiffies),Hrtimer也可設(shè)置為高精度模式和低精度模式,在MS6A801平臺,高精度模式可以達(dá)到ns級的分辨率。當(dāng)要獲取高精度的時(shí)間差時(shí),將Hrtimer設(shè)置成高精度模式,通過hrtimer.base->get_time()在起始和結(jié)束時(shí)刻各獲取一次系統(tǒng)時(shí)間,相減則得到兩個(gè)時(shí)刻的高精度時(shí)間差[1-2]。
圖1 紅外信號的波形(截圖)
通過20個(gè)(可視情況整)有效的載波時(shí)長的平均值計(jì)算載波頻率,采集時(shí)不要求采集連續(xù)的20個(gè)周期的載波,可以跨“有載波”區(qū)域,方法如下:
1)設(shè)定一個(gè)20單元的無符號整數(shù)數(shù)組,用于存儲認(rèn)可的20個(gè)載波的周期時(shí)長。
2)當(dāng)紅外輸入引腳有上升沿中斷(非首次),計(jì)算與上一次上升沿中斷時(shí)刻的時(shí)間差,也就是一個(gè)周期時(shí)長。
3)判斷這個(gè)周期時(shí)長是否可信:將這個(gè)時(shí)長與數(shù)組中上一次采集的數(shù)據(jù)的時(shí)長進(jìn)行比較,如果誤差較大(例如大于1%,可設(shè)置)且數(shù)組中的歷史數(shù)據(jù)小于6,將數(shù)組的歷史數(shù)據(jù)清零,以這個(gè)數(shù)據(jù)為起點(diǎn)重新存儲;如果誤差較大(例如大于1%,可設(shè)置)且數(shù)組中的歷史數(shù)據(jù)大于6,則將新的周期時(shí)長拋棄。
4)如果本次“有載波”的時(shí)段里面沒有完成20次載波周期時(shí)長的采集,那么在下一個(gè)“有載波”時(shí)段繼續(xù),直到數(shù)組存滿。
5)將已存滿的數(shù)組中的數(shù)據(jù)取平均值,計(jì)算出平均時(shí)長,從而計(jì)算出信號的載波頻率。
實(shí)現(xiàn)載波采集的上升沿中斷子函數(shù)的流程如圖2所示。
圖2 上升沿中斷子函數(shù)的流程圖
1)檢測紅外學(xué)習(xí)信號輸入引腳的上升沿電平,通過Hrtimer精確獲得當(dāng)前時(shí)間(hrtimer.base-> get_time()),當(dāng)“有載波”時(shí)段開始時(shí),記錄當(dāng)前系統(tǒng)時(shí)間,記t1。
2)記錄最后一次上升沿中斷的時(shí)刻,記為t2。
3)當(dāng)連續(xù)較長的時(shí)間(這個(gè)時(shí)間可設(shè)置)沒有檢測到載波,則記T有載波=t2-t1為“有載波”的時(shí)長并存儲,而“無載波”的時(shí)段起始則為t3=t2;
4)當(dāng)重新檢測到載波的時(shí)候,存入t2,記“無載波”時(shí)長T無載波=t2-t3并存儲,t2作為下一個(gè)“有載波”的起始存入t1,重復(fù)1)~4),直到一幀信號采集結(jié)束。
實(shí)現(xiàn)“有載波”和“無載波”時(shí)長采集的定時(shí)中斷的子函數(shù)流程如圖3所示(注:為了區(qū)分有跳變位的紅外信號,采用對一個(gè)紅外信號采集兩次的方法)。
圖3 定時(shí)中斷的子函數(shù)流程圖
在測試室將進(jìn)行改善前產(chǎn)品及改善后的產(chǎn)品進(jìn)行測試對比。待學(xué)習(xí)的紅外信號選用型號為RC410的遙控器的MUTE鍵的信號,將待學(xué)習(xí)的遙控器的發(fā)射管與采集信號的接收管正對,距離保持20 cm,各重復(fù)學(xué)習(xí)500次并發(fā)射學(xué)習(xí)信號控制外圍設(shè)備進(jìn)行驗(yàn)證,結(jié)果如表1所示。
表1 近距離重復(fù)測試結(jié)果
從測度結(jié)果可以看出,本文的改善方法對近距離紅外學(xué)習(xí)的準(zhǔn)確性有很大提高。
如圖4所示,在一平臺上用白色的紙標(biāo)好角度及距離,將待學(xué)習(xí)的遙控器置于不同的位置,使其發(fā)射管保持指向采集信號的接收管,每個(gè)位置學(xué)習(xí)驗(yàn)證2次,只要有1次失敗就算失敗,測試結(jié)果如表2和表3所示,格中打×的表示失敗。
圖4 多距離多角度測試示意圖(截圖)
表2 改善前多距離多角度測試結(jié)果
表3 改善后多距離多角度測試結(jié)果
從測試結(jié)果可以看出,改善后的產(chǎn)品在±30°范圍內(nèi)學(xué)習(xí)準(zhǔn)確性有提高,在大角度范圍時(shí)50 cm內(nèi)學(xué)習(xí)準(zhǔn)確性有提高。
本文提出的改善方法,一方面對定時(shí)精度進(jìn)行改進(jìn),另一方面通過跨區(qū)域?qū)d波進(jìn)行采集[3],加上平均濾波[4],提高容錯性。測試結(jié)果表明,本方法對改善紅外學(xué)習(xí)的準(zhǔn)確性有很大的提高。
[1] 苗忠良,曾旭,宛斌.深入Android應(yīng)用開發(fā):核心技術(shù)解析與最佳實(shí)踐[M].北京:機(jī)械工業(yè)出版社,2012.
[2] 楊豐盛.Android技術(shù)內(nèi)幕:系統(tǒng)卷[M].北京:機(jī)械工業(yè)出版社,2011.
[3] 康保壽.學(xué)習(xí)型紅外遙控器的實(shí)現(xiàn)[J].信息通信,2011(4):189-190.
[4] 于飛,華宇寧.波段紅外信號采集和處理系統(tǒng)[J].沈陽理工大學(xué)學(xué)報(bào),2011(4):27-30.