消費娛樂設(shè)備的紅外(IR)遙控器雜亂無章,似乎是世界各地家庭的永久固定裝置。但是,使用MAXQ2000微控制器和一些廉價的器件,可以構(gòu)建一個遙控器,從其他遙控器“學(xué)習(xí)”代碼并按需回放代碼。
概述
簡單的紅外(IR)遙控器在許多家庭中占有崇高的地位。原因不難理解。使用遙控器,可以控制現(xiàn)代家庭中常見的各種娛樂設(shè)備。您可以從世界各個角落召喚節(jié)目,收聽來自多個來源的音樂,播放音頻和視頻媒體,甚至保存節(jié)目以供以后查看(如果需要),所有這些都可以在您最喜歡的房間舒適地進(jìn)行。
然而,紅外遙控器的普及已經(jīng)演變成一個問題。很少有家庭沒有三個、四個或更多這樣的小設(shè)備弄亂桌子。有一個用于電視,一個用于DVR,另一個用于VCR,還有一個用于音頻系統(tǒng),此列表不包括有線電視盒或衛(wèi)星接收器,分配開關(guān),DVD刻錄機或任何其他引起我們注意的設(shè)備。
這種遙控器組合的解決方案是學(xué)習(xí)遙控器,它從另一個遙控器學(xué)習(xí)代碼。學(xué)習(xí)遙控器處于“學(xué)習(xí)”模式,第二個遙控器“教導(dǎo)”學(xué)習(xí)遙控器如何傳輸命令,例如調(diào)高音量。從那時起,每當(dāng)按下適當(dāng)?shù)陌粹o時,學(xué)習(xí)遙控器都可以發(fā)送學(xué)習(xí)的命令。
本應(yīng)用筆記演示了如何圍繞MAXQ2000微控制器(Maxim的MAXQ RISC微控制器之一)構(gòu)建這種學(xué)習(xí)遙控器。但在設(shè)計細(xì)節(jié)之前,需要一些背景知識。
用光控制
第一個電視遙控器是Zenith? Space Commander。它使用機械布置,在激活時以特定頻率產(chǎn)生超聲波音調(diào)。想想音叉:當(dāng)敲擊時,它會以固定的、可預(yù)測的頻率振動。理論上,音叉發(fā)出的聲波可以被接收并解釋為做某事的命令。因為早期的遙控器是完全機械的,所以不需要電池。然而,它只有三個命令:電視打開和關(guān)閉、頻道向上和頻道向下。
隨著半導(dǎo)體器件變得越來越便宜和越來越受歡迎,紅外光取代超聲波成為首選的控制機制。簡單來說,紅外遙控系統(tǒng)由一個發(fā)射調(diào)制紅外光束的手持單元和一個接收調(diào)制紅外并解釋調(diào)制的基本單元組成,通常作為采取某些操作的命令。然而,由于工程可行性、物理現(xiàn)實和市場需求的結(jié)合,此操作的細(xì)節(jié)并不那么簡單。
殘酷的事實是,環(huán)境中充滿了紅外輻射,因此期望在嘈雜的輻射能量之上聽到任何微不足道的調(diào)制方案是不現(xiàn)實的。所有發(fā)熱的東西也會發(fā)出紅外輻射。例如,白熾燈泡比可見光發(fā)出更多的紅外。甚至人體也會發(fā)出紅外輻射。因此,大多數(shù)紅外遠(yuǎn)程發(fā)射器在應(yīng)用數(shù)據(jù)之前使用低頻載波(通常在28kHz和60kHz之間)調(diào)制光。
以固定頻率調(diào)制光束,可以很容易地從典型家庭環(huán)境中的所有干擾紅外輻射中檢測出來。通過使用簡單的帶通濾光片,可以隔離和解釋紅外信號。為此目的,有各種廉價的集成電路,包括紅外光電二極管和帶通濾光片。
產(chǎn)生這種調(diào)制光束很簡單。紅外發(fā)光LED器件常見且價格低廉;創(chuàng)建調(diào)制光束可以像從適當(dāng)?shù)?a target="_blank">振蕩器驅(qū)動紅外 LED 一樣簡單。有關(guān)可以調(diào)制和接收IR調(diào)制數(shù)據(jù)的電路,請參見圖1。
圖1.電信號被轉(zhuǎn)換成調(diào)制的紅外光束,然后又轉(zhuǎn)換成電信號。為了擴(kuò)展發(fā)射器的范圍,使用了PNP驅(qū)動器??梢葬槍λx的紅外 LED 調(diào)整組件值。
隨著調(diào)制LED光源和接收器IC以與光源相同的頻率工作,人們有了遠(yuǎn)程控制系統(tǒng)的開端。當(dāng)LED電路工作并在接收器范圍內(nèi)時,接收器輸出變?yōu)榛顒訝顟B(tài)。如果只需要該操作(外部電路的簡單開關(guān)控制),則任務(wù)將完成。
但僅靠開關(guān)控制是不夠的。即使是簡單的遙控器也可以發(fā)送各種不同的命令,例如音量增大和減小、通道選擇、輸入源選擇,也許還有單個數(shù)字。出于這個原因,需要其他東西,一種進(jìn)一步“調(diào)制”調(diào)制光束的方法。這就是故事變得有趣的地方。
隨著紅外遙控器被廣泛接受,每個制造商都采取了自己的方式來調(diào)制光束。雖然所有設(shè)備都使用數(shù)字控制(即調(diào)制波束的特性表示數(shù)字“1”或“0”位),但具體情況差異很大。有些使用簡單的不歸零(NRZ)調(diào)制。其他人使用一種脈寬調(diào)制(PWM)的形式,因此長脈沖代表一種狀態(tài),短脈沖代表交替狀態(tài)。還有一些使用一種雙相調(diào)制形式,其中開到關(guān)轉(zhuǎn)換代表一種狀態(tài),關(guān)到通轉(zhuǎn)換代表另一種狀態(tài)。這種令人困惑的情況一直持續(xù)到今天,這使得創(chuàng)建一個通用遙控器來操作任何制造商的設(shè)備成為真正的挑戰(zhàn)。
設(shè)計變量
設(shè)計通用學(xué)習(xí)遙控器時必須考慮三個變量:載波頻率、位格式和幀格式。
載波頻率
載波頻率是光被調(diào)制的頻率。它與實際比特率無關(guān)。對于任何給定系統(tǒng),這是一個恒定頻率,范圍約為28kHz和60kHz,但通常在36kHz和38kHz之間工作。
位格式
位格式是系統(tǒng)區(qū)分“1”和“0”位的方式,它因制造商而異。在某些情況下,“亮起”周期的寬度是決定因素。索尼?制造的一些系統(tǒng)使用 1,100μs 的“亮通”脈沖表示“1”位,而 550μs 的“亮通”脈沖表示“0”位。脈沖之間的間隔始終為550μs。
另一種位格式保持“亮通”脈沖固定,但改變恒定寬度脈沖之間的空間。一些松下(松下?)系統(tǒng)發(fā)出恒定的800μs脈沖流,但將“1”位指定為脈沖之間的2,400μs空間,將“0”位指定為脈沖之間的800μs空間。
最常用的代碼系統(tǒng)之一是飛利浦 RC-5 代碼。在此代碼中,每個位單元由一個889μs的調(diào)制光突發(fā)和一個889μs的空間組成。如果位單元由“亮起”周期后跟“關(guān)閉”周期組成,則認(rèn)為它表示“1”;如果它由“熄燈”周期后跟“亮起”周期組成,則認(rèn)為它表示“0”。在RC-5系統(tǒng)中,通過在每幀的開頭強制執(zhí)行兩個“1”位來確保位同步。圖 2 說明了各種位格式。
圖2.紅外遙控系統(tǒng)中可以使用幾種位格式,但都涉及用載波調(diào)制光束,然后使用幾種技術(shù)之一調(diào)制載波。
幀格式
確定位格式后,設(shè)計人員必須確定幀格式。在許多情況下,這將包括一個同步脈沖(通常是比普通數(shù)據(jù)脈沖稍長的脈沖),然后是特定格式的數(shù)據(jù)位。通常,數(shù)據(jù)由兩部分組成:傳達(dá)所需功能的“數(shù)據(jù)”部分,以及與要控制的設(shè)備相對應(yīng)的“自定義”部分。因此,一個設(shè)備的某個數(shù)據(jù)項可以對應(yīng)于另一個設(shè)備的不同數(shù)據(jù)項。
一些代碼每幀傳輸兩次信息:一次在正常模式下,一次在位檢測顛倒的情況下。通過這種方式,提供了一定程度的基本錯誤檢查。如果兩個副本不匹配,則假定該命令無效。
傳輸幀后,通常會一遍又一遍地重復(fù)。常見的幀重復(fù)率范圍約為每秒 10 到 20 幀。一些協(xié)議只傳輸一次代碼,然后重復(fù)“鍵下”代碼。本文中描述的系統(tǒng)不會處理這些協(xié)議,因為假定每個重復(fù)幀都包含數(shù)據(jù)和自定義代碼。
最后,一些協(xié)議,包括RC-5協(xié)議,在每次按鍵時都會反轉(zhuǎn)一點。這有助于識別接收間隙是否是由于信號丟失造成的,例如,有人在遙控器和基本單元之間行走,或者它是否實際上代表第二次按鍵。此功能未在此項目中實現(xiàn)。
尋求普遍性
基于上述討論,通用學(xué)習(xí)遙控器似乎需要知道這些位格式中的每一種才能完成其任務(wù)。如果我們擔(dān)心結(jié)果數(shù)據(jù)集的大小,這將是真的:典型的紅外遙控消息只有幾十位長。但鑒于內(nèi)存相對便宜,我們可以簡單地對傳入的比特流進(jìn)行采樣并記錄樣本。
因此,對于這個項目,我們真的不關(guān)心位格式或幀格式。這是因為這個系統(tǒng)只是簡單地記錄和播放它看到的任何內(nèi)容。通過對正在使用的系統(tǒng)保持不可知性,可以保證真正的普遍性。
接收和記錄
接收器電路本身很簡單。上拉至V的光電晶體管DD構(gòu)成輸入電路,可直接連接至MAXQ2000微控制器的輸入引腳。不需要或?qū)嶋H上不需要特殊的接收器IC。我們不關(guān)心范圍,而是希望記錄實際的調(diào)制包絡(luò),而不管載波頻率如何。
在飽和模式下操作光電晶體管是一個小問題。光電晶體管不是特別快的器件;它們具有從完全打開到完全關(guān)閉狀態(tài)的恢復(fù)時間,該時間大于大多數(shù)系統(tǒng)的位時間。因此,如果光信號過多,光電晶體管將飽和。它將完全錯過載波頻率,僅遵循調(diào)制波形的輪廓。但如果信號太少,根本就沒有可識別的波形。圖 3 說明了這些條件。
圖3.接收紅外信號時,信號強度必須正確。如果信號強度太高,光電晶體管將飽和,僅檢測到信號的低頻部分。如果信號強度太低,載波頻率永遠(yuǎn)不會超過檢測閾值。
因此,將主遙控器和學(xué)習(xí)遙控器放置在恰到好處的距離至關(guān)重要。但是這個距離是多少?為了確定這一點,學(xué)習(xí)遙控器中的軟件會執(zhí)行一些預(yù)采樣以確定距離是否正確。在開始記錄之前,學(xué)習(xí)遙控器(即MAXQ2000微控制器)對輸入通道上的信號進(jìn)行采樣。如果沒有,遙控器會假定信號電平太低,并點亮適當(dāng)?shù)?LED。但是,如果微控制器遙控器在輸入通道上看到轉(zhuǎn)換,但沒有100μs或更小的脈沖(可以假設(shè)載波頻率大于10kHz),則假定信號電平過高并點亮不同的LED。最后,如果微控制器觀察到由“關(guān)閉”周期分隔的快速脈沖突發(fā),則假定信號電平處于“最佳點”是理想的。然后,學(xué)習(xí)遙控器的代碼將轉(zhuǎn)換為錄制狀態(tài)。
在錄制狀態(tài)下必須發(fā)生幾件事。微控制器遙控器必須確定載波的輸入頻率。由于微控制器的工作頻率為16MHz,載波的頻率(最多)為60kHz,因此可以精確測量載波頻率。累積從后緣到后緣的四個樣本。然后將結(jié)果除以 <> 以確定高周期和低周期時間。
接下來,接收器開始搜索大于10ms的傳輸間隙。每個協(xié)議都在同一代碼的重復(fù)傳輸之間設(shè)置一個間隙,并且沒有協(xié)議允許單個代碼內(nèi)的間隙大于約1ms。當(dāng)找到間隙時,接收方知道這是代碼序列的開始。錄制可以開始了。
為了記錄代碼,微控制器遙控器會累積載波開啟的時間。當(dāng)它觀察到載波丟失時,遙控器會累積載波保持關(guān)閉的時間。這會產(chǎn)生一個開和關(guān)時間矢量,可用于在需要時重新創(chuàng)建信號。
由于這是一個演示項目而不是成品,因此這些開關(guān)時間的矢量存儲在易失性RAM中。在實際產(chǎn)品中,軟件子程序可能會將這些載體復(fù)制到非易失性存儲(例如EEPROM)中。
回放
對按鈕進(jìn)行編程后,CPU 進(jìn)入睡眠模式。在此模式下,將保留寄存器和RAM,但CPU時鐘將停止。只有中斷(或重置)才能喚醒 CPU。
按下按鈕時,CPU 被喚醒并掃描其輸入引腳以確定按下了哪個按鈕。然后,它指向 RAM 中的向量,其中包含有關(guān)如何播放與按鈕關(guān)聯(lián)的代碼的說明。
RAM 向量包括:包含開關(guān)周期數(shù)計數(shù)的標(biāo)頭;表示載波頻率的值;以及表示每個開關(guān)周期的導(dǎo)通時間和關(guān)斷時間的值對序列。第一個標(biāo)頭值,即開關(guān)周期數(shù),存儲在環(huán)路計數(shù)器寄存器(LC1)中。將此值保存在計數(shù)器寄存器中,可以輕松遍歷所有周期值。
標(biāo)頭中的第二個值(載體周期)被縮放并存儲掉。在 IR 導(dǎo)通期間,該值被加載到另一個環(huán)路計數(shù)器寄存器 (LC0) 中。由于MAXQ2000為單周期內(nèi)核,通過程序環(huán)路的時序是完全可靠的。因此,載波可以通過在高周期通過四指令周期循環(huán)執(zhí)行,然后在低周期通過四指令周期循環(huán)執(zhí)行來生成。執(zhí)行繼續(xù)以這種方式,執(zhí)行周期循環(huán),然后執(zhí)行關(guān)閉周期循環(huán)。
這是執(zhí)行路徑將停留的地方,通過打開紅外 LED 一段時間然后關(guān)閉一段時間來生成載波,如果不是計時器的話。對于每個半位時間,矢量包含一個值,用于寫入MAXQ2000定時器通道之一。定時器以32分頻模式工作,因此定時器分辨率約為2μs。
在每個半位周期開始時,計時器將加載該周期的持續(xù)時間。然后,當(dāng)程序代碼打開和關(guān)閉紅外 LED 時(在導(dǎo)通期間)或干脆關(guān)閉紅外 LED (在關(guān)閉期間),經(jīng)常測試定時器以確定位時間是否已過期。
半位時間到期后,環(huán)路計數(shù)器寄存器(LC1)遞減并測試零。如果它不為零,則有更多的位要傳輸,并且分支被帶到循環(huán)的頂部。否則,將測試該按鈕以查看它是否仍被按下。如果按鈕仍處于活動狀態(tài),則整個循環(huán)(從向量讀取初始化值并重新初始化計數(shù)器)將再次開始。否則,CPU 將重新進(jìn)入睡眠狀態(tài),直到按下下一個按鈕。
增強基本的遠(yuǎn)程操作
到目前為止,我們有一個工作學(xué)習(xí)遙控器,但只有一個按鈕。這種設(shè)計最明顯的增強是更多的按鈕。添加這些按鈕是一個簡單的過程,僅涉及少量的額外硬件。當(dāng) CPU 空閑時,所有行驅(qū)動程序都設(shè)置為輸出“1”狀態(tài)。每列上的軟(即高電阻)下拉使這些輸入保持在空閑狀態(tài)的低電平。當(dāng)用戶按下任意按鈕時,相應(yīng)的列被驅(qū)動為高電平,CPU 被喚醒(圖 4)。然后,CPU 可以將每一行設(shè)置為高,一次一行,并確定按鈕所在的行和列。
圖4.要使用其他密鑰擴(kuò)充項目,激活任何密鑰都必須中斷處理器。在睡眠模式下,所有列線通過軟下拉電阻保持低電平,所有列線被驅(qū)動為高電平。當(dāng)按下任何鍵時,列線被拉高,從而喚醒處理器并啟動行掃描過程。
第二種增強功能是使用MAXQ2000中的定時時鐘外設(shè)喚醒CPU,使其在特定時間執(zhí)行一系列編程的IR命令。時間時鐘是一種低功耗外設(shè),設(shè)計用于長時間使用電池供電。當(dāng)MAXQ2000處于休眠模式,高頻時鐘停止時,時間時鐘繼續(xù)工作。時鐘可以根據(jù)一天中的時間或時間間隔生成中斷以喚醒 CPU。例如,時間時鐘可以喚醒CPU,以便遙控器可以向電纜或衛(wèi)星盒發(fā)送命令,然后向VCR或PVR發(fā)送命令以開始錄制節(jié)目。在程序結(jié)束時,可以再次喚醒CPU以結(jié)束錄制。
第三種可能性是將MAXQ2000連接到個人計算機。通過這種方式,PC可以用作編程站,可能從網(wǎng)絡(luò)中提取編程信息并將其自動加載到通用遙控器中。
因此,只需少量外部元件和少量軟件,精密的MAXQ200
審核編輯:郭婷
-
微控制器
+關(guān)注
關(guān)注
48文章
7454瀏覽量
150850 -
cpu
+關(guān)注
關(guān)注
68文章
10804瀏覽量
210821 -
遙控器
+關(guān)注
關(guān)注
18文章
829瀏覽量
65865
發(fā)布評論請先 登錄
相關(guān)推薦
評論