基于單片機(jī)系統(tǒng)的紅外遙控器應(yīng)用
掃描二維碼
隨時(shí)隨地手機(jī)看文章
紅外遙控器由于其體積小、功耗低、功能強(qiáng)、成本低的特點(diǎn),已經(jīng)在家電產(chǎn)品設(shè)備中廣泛應(yīng)用?,F(xiàn)代智能化儀器儀表系統(tǒng)、工業(yè)設(shè)備中的控制輸入也較多地使用紅外遙控器。本文給出紅外遙控器信號(hào)發(fā)射原理、紅外接收器的連接方式和單片機(jī)軟件解碼應(yīng)用程序,并提供了一種對(duì)未知格式的遙控器信號(hào)碼檢測(cè)的應(yīng)用程序。
1 紅外遙控器信號(hào)發(fā)射原理簡(jiǎn)介
通用紅外發(fā)射器由指令鍵、指令信號(hào)產(chǎn)生電路、調(diào)制電路、驅(qū)動(dòng)電路及紅外發(fā)射器組成。如圖1所示。
遙控器所產(chǎn)生的脈沖編碼的格式一般為:
引導(dǎo)脈沖(頭)─識(shí)別碼(用戶碼)─鍵碼─鍵碼的反碼
其引導(dǎo)脈沖為寬度是10 ms左右的一個(gè)高脈沖和一個(gè)低脈沖的組合,用來標(biāo)識(shí)指令碼的開始。識(shí)別碼、鍵碼、鍵碼的反碼均為數(shù)據(jù)編碼脈沖,用二進(jìn)制數(shù)表示。“0”和“1”均由ms量級(jí)的高低脈沖的組合代表。識(shí)別碼(即用戶碼)是對(duì)每個(gè)遙控系統(tǒng)的標(biāo)識(shí)。通過對(duì)識(shí)別碼的檢驗(yàn),每個(gè)遙控器只能控制一個(gè)設(shè)備動(dòng)作,有效的防止了多個(gè)設(shè)備之間的串?dāng)_。當(dāng)指令鍵按下時(shí),指令信號(hào)產(chǎn)生電路便產(chǎn)生脈沖編碼。鍵碼后面一般還要有鍵碼的反碼,用來檢驗(yàn)鍵碼接收的正確性,防止誤動(dòng)作,增強(qiáng)系統(tǒng)的可靠性。這些指令信號(hào)由調(diào)制電路調(diào)制成32~40 kHz的信號(hào),經(jīng)調(diào)制后輸出,最后由驅(qū)動(dòng)電路驅(qū)動(dòng)紅外發(fā)射器件(LED)發(fā)出紅外遙控信號(hào)。
2 紅外遙控器信號(hào)接收芯片外圍電路
接收電路可以使用集成紅外接收器成品,一般不需要任何外接元件就能完成從紅外接收到輸出TTL電平兼容信號(hào)的所有工作。注意選擇接收器件時(shí)要保證接收器件的中心頻率與發(fā)射信號(hào)的中心頻率相匹配。接收器對(duì)外只有3個(gè)引腳:VCC,GND和1個(gè)脈沖信號(hào)輸出OUT。與單片機(jī)接口非常方便,如圖2所示。
脈沖信號(hào)輸出接CPU的普通輸入引腳或中斷輸入引腳(IO/INT)。采取這種連接方法,軟件解碼既可工作于查詢方式,也可工作于中斷方式。在實(shí)際應(yīng)用中,還可以進(jìn)一步增加抑制干擾電路和提高驅(qū)動(dòng)能力電路,增強(qiáng)系統(tǒng)的穩(wěn)定性。
3 未知信號(hào)格式遙控器信號(hào)碼的識(shí)別
在應(yīng)用系統(tǒng)中,要完成對(duì)遙控器信號(hào)的解碼并實(shí)現(xiàn)對(duì)系統(tǒng)功能的控制,必須了解遙控器信號(hào)碼(即遙控器所發(fā)射脈沖流)的格式,即信號(hào)的引導(dǎo)脈沖高低脈沖的寬度、“0”,“1”的表示法,以及遙控器識(shí)別碼、各個(gè)功能鍵的鍵碼。對(duì)信號(hào)碼的識(shí)別應(yīng)該從分析脈沖流的各個(gè)高、低脈沖的時(shí)間入手,通過分析各個(gè)高、低脈沖的時(shí)間,分析得出信號(hào)碼的格式。下面提供一種軟件測(cè)試信號(hào)碼的方法,以供參考。
筆者采用PIC16C72單片機(jī),4 MHz晶振,紅外發(fā)射器芯片為BA6121-001,通過軟件中斷的方法,對(duì)手中未知格式的信號(hào)碼進(jìn)行測(cè)試識(shí)別。遙控器接收器OUT端接RB0/INT,測(cè)得在遙控器空閑的情況下輸出為高,INT首先采用下降沿觸發(fā)。第一次INT發(fā)生時(shí),啟動(dòng)定時(shí)器,每次中斷要將觸發(fā)形式設(shè)置為上一次觸發(fā)的相反形式,以保證在下次電平變化時(shí)產(chǎn)生中斷;定時(shí)器溢出中斷記錄每次脈沖期間定時(shí)器溢出的次數(shù);為了提高檢測(cè)精度,應(yīng)提高定時(shí)器的時(shí)間分辨率,但過高的時(shí)間分辨率會(huì)引起單個(gè)脈沖期間定時(shí)器溢出,記錄每個(gè)脈沖期間溢出次數(shù)又浪費(fèi)了大量數(shù)據(jù)寄存器。這里筆者采取了折中的辦法,即數(shù)據(jù)寄存器高6位只記錄定時(shí)器值的高6位,低2 位用來記錄定時(shí)器溢出次數(shù),既節(jié)省了數(shù)據(jù)寄存器數(shù)量,又在一定程度上保證了較高的檢測(cè)精度。數(shù)據(jù)存儲(chǔ)格式如圖3所示。
由于此程序只為測(cè)試程序,可在仿真器中讀出寄存器組中所記錄的各高低脈沖所對(duì)應(yīng)的定時(shí)器值,計(jì)算得出高低脈沖的時(shí)間數(shù)據(jù),分析數(shù)據(jù)可知遙控器信號(hào)碼的格式。下面給出部分INT和定時(shí)器0中斷服務(wù)程序:
[!--empirenews.page--]
這里需要合理設(shè)置定時(shí)器的預(yù)分頻值,筆者多次實(shí)驗(yàn),得出較為合理的預(yù)分頻值為1∶8,定時(shí)器時(shí)間分辨率為8μs,最大定時(shí)時(shí)間為 (4×256+252)×8×1μs=10.2 ms,測(cè)量精度達(dá)到最高,誤差為32μs。通過對(duì)所得數(shù)據(jù)分析,得出遙控器的信號(hào)碼格式如圖4所示。
圖中“頭”(即引導(dǎo)脈沖):低8.84 ms,高4.40 ms。 “1”:低0.60 ms,高1.62 ms;“0”:0.60 ms低,0.50ms高;16 b識(shí)別碼:19D6H采用PIC16C72單片機(jī),最多可以檢測(cè)54 b的信號(hào)碼,足以滿足一般情況下的需求。
4 軟件解碼應(yīng)用程序
在已知遙控器信號(hào)碼格式的條件下,可以通過單片機(jī)軟件程序?qū)崿F(xiàn)解碼。以筆者手中的遙控器為例,根據(jù)上面已測(cè)得的信號(hào)碼,采用PIC16C54單片機(jī),4 MHz晶振,提供一種軟件解碼的應(yīng)用程序。
PIC16C54單片機(jī)是一款有著較高性能價(jià)格比的低檔單片機(jī),最適合低價(jià)格、低功耗、小體積的設(shè)備。PIC16C54沒有中斷系統(tǒng),程序采用軟件查詢法,查詢輸入引腳的電平變化,采用定時(shí)器定時(shí),根據(jù)定時(shí)器的記錄值和已知的信號(hào)格式比較,判斷各部分接收是否正確以及分辨鍵碼并執(zhí)行相應(yīng)的命令。
由于遙控器脈寬時(shí)間值是在一個(gè)小范圍內(nèi)波動(dòng),而且檢測(cè)過程中定時(shí)器也存在誤差。因此,對(duì)信號(hào)的識(shí)別不能采取精確比較法,本程序采用了區(qū)間比較法,即判斷定時(shí)器的記錄值是否在預(yù)先計(jì)算的區(qū)間內(nèi)。由88于引導(dǎo)脈沖和數(shù)據(jù)脈沖的時(shí)間相差很大,解碼時(shí)對(duì)定時(shí)器采用不同的預(yù)分頻,以盡量提高解碼的準(zhǔn)確度?! ?/p>
①引導(dǎo)脈沖判斷:低8.84 ms,高4.40 ms,預(yù)分頻1∶64,理論計(jì)算得定時(shí)器值應(yīng)為:低8AH,高44H。如實(shí)際所得低部分在85H和90H之間、高部分在40H和4AH之間,則認(rèn)為引導(dǎo)脈沖接收正確。
②“0”,“1”判斷:數(shù)據(jù)脈沖流的低電平脈寬相同,忽略不判斷;高電平脈寬是判斷數(shù)據(jù)流每位是“0”還是“1”的依據(jù)。“0”對(duì)應(yīng)高0.50 ms,“1”對(duì)應(yīng)高1.62 ms,預(yù)分頻1∶8,理論計(jì)算得定時(shí)器值應(yīng)為:“0”對(duì)應(yīng)高3EH,“1”對(duì)應(yīng)高0CAH。如所得“0”對(duì)應(yīng)高在39H和42H之間、“1”對(duì)應(yīng)高在 0C5H和0D0H之間則認(rèn)為接收正確。
③判斷16 b識(shí)別碼是否和已知的識(shí)別碼(19D6H)相同。
④判斷8 b鍵碼是否與8 b鍵碼的反碼相對(duì)應(yīng)。⑤根據(jù)鍵碼,選擇所應(yīng)執(zhí)行的命令。
由于篇幅所限,僅給出判斷“0”部分程序:
注意,在程序容易發(fā)生死循環(huán)或者出錯(cuò)的地方,要檢驗(yàn)定時(shí)器是否溢出。一旦發(fā)生溢出,要立即使程序復(fù)位,以便程序能夠在出錯(cuò)之后返回到程序開始部分,增強(qiáng)系統(tǒng)的可靠性。基于以上設(shè)計(jì)思想可以在多種單片機(jī)上實(shí)現(xiàn)遙控器的解碼。讀者可自行嘗試應(yīng)用中斷方法實(shí)現(xiàn)遙控器的信號(hào)解碼。
本文所介紹的紅外遙控器接收發(fā)送原理及信號(hào)碼識(shí)別和解碼程序,可以方便地移植到其他系統(tǒng),其方法簡(jiǎn)潔靈活。此方法具有一般性,對(duì)于具體的應(yīng)用,可自行變通。
參考文獻(xiàn)
[1]竇振中.PIC系列單片機(jī)原理和程序設(shè)計(jì)[M].北京:北京航空航天大學(xué)出版社,1998.