概述
在眾多家庭中,一個(gè)簡(jiǎn)單的紅外(IR)遙控器可能占據(jù)非常關(guān)鍵的地位,這一點(diǎn)也很容易理解。有了遙控器,人們就可以命令現(xiàn)代家庭必備的各種娛樂設(shè)備。可以在舒適的房間里,隨心所欲地收看來自全球各地的不同節(jié)目,聽到不同渠道傳播的音樂,可以播放音視頻媒體播放器,甚至可以保存節(jié)目以便在晚些時(shí)候觀看。但是隨處可見的IR遙控器也導(dǎo)致了一個(gè)問題,絕大多數(shù)家庭的桌子可能都堆放著三個(gè)、四個(gè)甚至更多的遙控器。一個(gè)用于電視機(jī)、一個(gè)用于DVR、另一個(gè)用于VCR,此外還有用于音響及其它設(shè)備的,而且,這里還沒有列出機(jī)頂盒或衛(wèi)星接收機(jī)、分配開關(guān)、DVD刻錄機(jī)及其它受我們支配的設(shè)備。
解決這種由遙控器引發(fā)的混亂現(xiàn)象的一個(gè)方法是:使用可以學(xué)習(xí)其它遙控器代碼的學(xué)習(xí)型遙控器。將學(xué)習(xí)型遙控器設(shè)置到“學(xué)習(xí)”模式,由第二個(gè)遙控器“教導(dǎo)”學(xué)習(xí)型遙控器如何發(fā)送命令,比如如何提高音量。然后,每當(dāng)按下正確的按鍵,學(xué)習(xí)型遙控器就會(huì)發(fā)送學(xué)到的命令。
本應(yīng)用筆記介紹如何圍繞MAXQ2000微控制器構(gòu)建這樣一個(gè)學(xué)習(xí)型遙控器,MAXQ2000屬于Maxim公司的MAXQ RISC微控制器產(chǎn)品。但在開始設(shè)計(jì)之前,需要了解一些背景知識(shí)。
查看大圖(PDF, 388kB)
光控
第一個(gè)電視遙控器是Zenith? Space Commander。它在工作時(shí)通過一個(gè)機(jī)械結(jié)構(gòu)產(chǎn)生某個(gè)特定頻率的超聲波。類似于音叉,通過擊打可以在一個(gè)固定可預(yù)測(cè)的頻率上振動(dòng)。從理論上講,音叉發(fā)出的聲波可以被接收下來,然后轉(zhuǎn)換成一個(gè)執(zhí)行命令。因?yàn)檫@個(gè)最早的遙控裝置完全是機(jī)械式裝置,它不需要電池供電。但它只有三個(gè)命令,電視開關(guān),頻道號(hào)的增、減。隨著半導(dǎo)體器件價(jià)格越來越便宜,應(yīng)用范圍的普及,IR紅外光取代超聲成為遙控設(shè)備的選擇。最簡(jiǎn)單的IR遙控系統(tǒng)由發(fā)射紅外光調(diào)制信號(hào)的終端和接收IR調(diào)制信號(hào)的基座部分組成,基座電路進(jìn)行解調(diào),通常是執(zhí)行某個(gè)操作命令。但是,考慮到工程實(shí)施的便利性、體積要求以及市場(chǎng)需求等因素,具體實(shí)現(xiàn)時(shí)并不簡(jiǎn)單。
一個(gè)很現(xiàn)實(shí)的問題是:我們的周圍充滿了IR輻射,要在充滿輻射干擾源的環(huán)境中接收一個(gè)普通調(diào)制信號(hào)顯然不現(xiàn)實(shí)。任何發(fā)熱的物體也會(huì)產(chǎn)生IR輻射,比如白熾燈發(fā)出的IR光就高于可見光。人體本身也會(huì)產(chǎn)生IR輻射。考慮到這些原因,大部分IR遙控器在發(fā)射數(shù)據(jù)之前會(huì)以低頻載波(通常在28kHz到60kHz)調(diào)制紅外光信號(hào)。
在一個(gè)典型的家居環(huán)境中,用固定頻率調(diào)制光信號(hào)可以使其在所有IR輻射干擾中更容易檢測(cè)到。通過一個(gè)簡(jiǎn)單的帶通濾波器,可以提取出IR信號(hào)并對(duì)其解碼。有很多廉價(jià)的集成電路都包含實(shí)現(xiàn)這一功能的IR光電二極管和帶通濾波器。
產(chǎn)生這樣一個(gè)調(diào)制光很容易。紅外發(fā)射LED器件比較普遍,也很便宜,簡(jiǎn)單地利用一個(gè)振蕩器驅(qū)動(dòng)IR LED即可產(chǎn)生調(diào)制光。調(diào)制、接收IR調(diào)制數(shù)據(jù)的電路如圖1所示。

圖1. 電信號(hào)被轉(zhuǎn)換成IR調(diào)制光信號(hào),然后又被恢復(fù)為電信號(hào)。為了擴(kuò)展發(fā)射范圍,采用PNP驅(qū)動(dòng)器。根據(jù)所選IR LED可以調(diào)整元器件值
當(dāng)具備LED光源調(diào)制和工作在同一頻率的接收IC后,就構(gòu)成了一個(gè)遙控系統(tǒng)的雛形。當(dāng)LED電路工作在接收范圍內(nèi)時(shí),接收器輸出有效。如果這就是所有控制的要求(對(duì)外圍電路的簡(jiǎn)單開關(guān)控制),任務(wù)就算完成了。
但是,簡(jiǎn)單的開關(guān)控制還不能滿足實(shí)際應(yīng)用的需求,即使很簡(jiǎn)單的遙控器也需要發(fā)送不同的命令,比如音量的增、減,頻道選擇,輸入源選擇以及可能的數(shù)字輸入。考慮到這個(gè)原因,還需要添加其他它電路:可以進(jìn)一步“調(diào)制”光信號(hào)。這使整個(gè)設(shè)計(jì)變得有趣。
當(dāng)IR遙控器的使用不斷普及后,生產(chǎn)商都采用自己的方式調(diào)制光信號(hào)。雖然都是數(shù)字控制(也就是說,調(diào)制光信號(hào)代表數(shù)字位“1”或“0”),不同設(shè)計(jì)之間卻有很大差異。有些設(shè)計(jì)采用簡(jiǎn)單的非歸零(NRZ)調(diào)制,有些則采用脈寬調(diào)制(PWM)形式,用長(zhǎng)脈沖代表一種狀態(tài),短脈沖代表另一種狀態(tài)。還有一些設(shè)計(jì)采用兩相調(diào)制,從開到關(guān)的跳變代表一種狀態(tài),從關(guān)到開的跳變代表另一種狀態(tài)。這種混亂狀況一直持續(xù)到現(xiàn)在,構(gòu)建一個(gè)能夠配合任何廠家設(shè)備工作的通用型遙控器面臨巨大的挑戰(zhàn)。
設(shè)計(jì)參數(shù)
在設(shè)計(jì)一個(gè)通用學(xué)習(xí)型遙控器時(shí),必須要考慮三個(gè)參數(shù):載波頻率、比特格式和幀格式。載波頻率
載波頻率就是用來調(diào)制光信號(hào)的頻率。它與實(shí)際比特率沒有任何關(guān)系。對(duì)于給定系統(tǒng)它是一個(gè)固定頻率,頻率范圍在28kHz到60kHz之間,大部分工作在36kHz到38kHz之間。比特格式
比特格式是系統(tǒng)辨別比特“1”和比特“0”的方法,不同廠家會(huì)采用完全不同的方法。有時(shí)“光”脈沖的寬度是決定因素。有些Sony?設(shè)備中利用1,100μs的“光”脈沖代表“1”,用550μs的“光”脈沖代表“0”。脈沖之間的間隔始終是550μs。另一種比特格式采用固定“光”脈沖,但脈沖之間的間隔是變化的。有些Matsushita (Panasonic?)設(shè)備發(fā)射800μs的固定脈沖,但脈沖間隔為2,400μs時(shí)代表“1”,脈沖間隔為800μs時(shí)代表“0”。
Philips的RC-5碼是一種最常用的編碼系統(tǒng)。這種編碼中,每一比特由889μs的調(diào)制光脈沖和889μs的間隔組成。如果一個(gè)比特表現(xiàn)為“光”脈沖加上一個(gè)“無光”周期,則被認(rèn)為是比特“1”;如果由一個(gè)“無光”周期加上一個(gè)“光”脈沖組成,則認(rèn)為是比特“0”。在RC-5系統(tǒng)中,通過強(qiáng)制每幀的兩位起始位為“1”來保證位同步。圖2所示為不同的比特格式。

圖2. 可以用于IR遙控系統(tǒng)的幾種比特格式,所有格式都用載波調(diào)制光信號(hào),然后用某種方式調(diào)制載波
幀格式
一旦確定了比特格式,設(shè)計(jì)者必須確定幀格式。很多情況下,由同步脈沖(通常比普通脈沖更寬的脈沖)以及具有特定格式的數(shù)據(jù)位組成。通常數(shù)據(jù)由兩部分組成:用來傳達(dá)所要實(shí)現(xiàn)的功能的“數(shù)據(jù)”和用來與受控設(shè)備通信的“定制”數(shù)據(jù)。因此,用于某個(gè)設(shè)備的數(shù)據(jù)內(nèi)容可能對(duì)于另一設(shè)備而言代表完全不同的含義。有些編碼在一幀中發(fā)送兩次信息:一次為常規(guī)格式,另一次為比特反轉(zhuǎn)。通過這種方式可以在某種程度上實(shí)現(xiàn)初級(jí)的誤碼檢查。如果兩次信息不一致,這個(gè)命令就被視為無效。
一幀數(shù)據(jù)發(fā)送完畢后,該命令通常會(huì)不斷地重復(fù)發(fā)送。一般幀重復(fù)速率在每秒10到20幀。有一些協(xié)議只發(fā)送一次代碼,然后不斷重復(fù)“按鍵按下”的代碼。由于假定每個(gè)重復(fù)幀都包含數(shù)據(jù)和定制代碼,所以本文介紹的系統(tǒng)不處理這些協(xié)議。
最后,有些協(xié)議,包括RC-5,會(huì)在每次按鍵操作時(shí)反轉(zhuǎn)比特。這有助于識(shí)別是否由于信號(hào)丟失造成接收間斷,比如,有人正好位于遙控器和基座之間,或者是否真的出現(xiàn)第二次按鍵操作。本項(xiàng)目中沒有包含這一功能。
通用性研究
從上述討論可以看出,通用學(xué)習(xí)型遙控器為了完成操作需要知道所有的比特格式。如果需要考慮最終的數(shù)據(jù)組的尺寸,可以注意這個(gè)事實(shí):典型的IR遙控器信息只有幾十位。而且目前存儲(chǔ)器價(jià)格相對(duì)比較便宜,可以僅采樣輸入比特流并記錄這些采樣值。因此對(duì)于本項(xiàng)目,我們實(shí)際上不用關(guān)心比特格式或幀格式。因?yàn)橄到y(tǒng)只是簡(jiǎn)單記錄并回放它檢測(cè)到的一切。保持系統(tǒng)工作的未知性就可以實(shí)現(xiàn)真正的通用性。
接收與記錄
接收電路本身很簡(jiǎn)單。一個(gè)上拉至VDD的光電晶體管即可構(gòu)成輸入電路,而且可以直接與MAXQ2000微控制器的輸入引腳相連。實(shí)際上,并不需要特殊的接收IC。雖然不需要考慮接收范圍,但卻需要記錄任何載頻的調(diào)制包絡(luò)。光電晶體管工作在飽和狀態(tài)會(huì)產(chǎn)生一個(gè)問題。光電晶體管工作速度不高,從完全導(dǎo)通到完全關(guān)閉的恢復(fù)時(shí)間遠(yuǎn)遠(yuǎn)超過大部分系統(tǒng)的比特周期。因此,如果光信號(hào)太強(qiáng),光電晶體管就會(huì)飽和,造成載頻丟失,只能跟隨調(diào)制波形的包絡(luò)。但是,如果信號(hào)太弱,將無法識(shí)別波形。圖3顯示了這些條件。

圖3. 在接收IR信號(hào)時(shí),信號(hào)強(qiáng)度必須合適。如果信號(hào)強(qiáng)度太大,光電晶體管就會(huì)飽和,此時(shí)只能檢測(cè)到信號(hào)的低頻部分。如果信號(hào)強(qiáng)度太弱,載波頻率將無法達(dá)到檢測(cè)門限
因此,很重要的一點(diǎn)是將主遙控器和學(xué)習(xí)遙控器放置在適當(dāng)?shù)木嚯x內(nèi)。但是距離多少合適呢?為了確定距離,學(xué)習(xí)遙控器的內(nèi)置軟件會(huì)進(jìn)行預(yù)采樣,以此確定距離是否合適。進(jìn)行記錄之前,學(xué)習(xí)遙控器(比如,MAXQ2000微控制器)在輸入通道上對(duì)采樣信號(hào)進(jìn)行轉(zhuǎn)換。如果沒有信號(hào),遙控器假定信號(hào)電平太低,并點(diǎn)亮相應(yīng)的LED。但是,如果微控制器檢測(cè)到輸入通道的轉(zhuǎn)換信號(hào),只是沒有100μs或更小的脈沖(載頻可以假定為大于10kHz),則假定信號(hào)電平太高并點(diǎn)亮另一個(gè)LED。最后,如果微控制器檢測(cè)到以“關(guān)斷”周期為間隔的高速脈沖串,則假定信號(hào)電平合適,即位于所謂的“最佳點(diǎn)”。學(xué)習(xí)遙控器的代碼由此轉(zhuǎn)換到記錄狀態(tài)。
記錄狀態(tài)期間必須完成幾個(gè)操作。遙控器的微控制器必須確定載波的輸入頻率。由于微控制器工作在16MHz,載波頻率(最大)為60kHz,可以精確測(cè)量到載頻。從后沿到后沿累計(jì)進(jìn)行四次采樣,然后將結(jié)果除以8,以此確定高低電平的周期時(shí)間。
然后,接收器開始搜尋大于10ms的傳輸間隔。每個(gè)協(xié)議都會(huì)在重復(fù)發(fā)送同一編碼之間加入一個(gè)間隔,而且任何協(xié)議都不容許一個(gè)編碼內(nèi)部存在大于1ms的間隔。找到發(fā)送間隔后,接收器可以找到一個(gè)編碼序列的開始。由此可以開始記錄。
為了記錄代碼,遙控器的微控制器會(huì)累計(jì)載波存在的時(shí)間。當(dāng)檢測(cè)到載波丟失時(shí),遙控器會(huì)累計(jì)載波消失的時(shí)間。由此可以得到一個(gè)通斷時(shí)間向量,在需要的時(shí)候它可以用來重建信號(hào)。
由于這是一個(gè)演示設(shè)計(jì),并非最終產(chǎn)品,這些通斷時(shí)間向量存儲(chǔ)在易失RAM中。在實(shí)際產(chǎn)品中,通過軟件例程可以將這些向量復(fù)制到非易失存儲(chǔ)器(比如EEPROM)。
回放
當(dāng)完成按鍵編程后,CPU進(jìn)入休眠模式。在這個(gè)模式下,依然保持寄存器和RAM值,但會(huì)停止CPU時(shí)鐘。只有中斷(或復(fù)位)可以喚醒CPU。按下按鍵后,CPU被喚醒并且開始掃描其輸入引腳,以此確定哪一個(gè)鍵被按下。然后它會(huì)指向RAM中的向量,RAM中存放有如何執(zhí)行與此按鍵相關(guān)的指令。
RAM向量由以下部分組成:包含通斷周期計(jì)數(shù)的報(bào)頭,代表載頻的數(shù)值以及代表每個(gè)通斷周期導(dǎo)通和關(guān)斷時(shí)間的數(shù)值序列。第一個(gè)報(bào)頭數(shù)值即通斷周期值存儲(chǔ)在循環(huán)計(jì)數(shù)寄存器(LC1)中。將此值保存在計(jì)數(shù)寄存器中可以方便地循環(huán)任何周期。
報(bào)頭中的第二個(gè)值即載波周期,換算后進(jìn)行存儲(chǔ)。發(fā)射IR光時(shí),這個(gè)數(shù)值被載入另一個(gè)循環(huán)計(jì)數(shù)寄存器(LC0)。因?yàn)镸AXQ2000是單周期核,程序的循環(huán)定時(shí)非常可靠。通過執(zhí)行四個(gè)循環(huán)指令就可以產(chǎn)生載波的高電平,然后執(zhí)行四個(gè)循環(huán)指令產(chǎn)生低電平。繼續(xù)重復(fù)這個(gè)過程即執(zhí)行一個(gè)導(dǎo)通周期和隨后的關(guān)斷周期。
如果沒有定時(shí)器,程序會(huì)一直照此進(jìn)行,在一個(gè)周期內(nèi)導(dǎo)通IR LED,然后再另一個(gè)周期關(guān)斷,以此產(chǎn)生載波。實(shí)際上每半個(gè)位周期,向量中包含的一個(gè)值就會(huì)寫入MAXQ2000的一個(gè)定時(shí)通道。定時(shí)器工作在除32模式,所以定時(shí)器的精度大概為2μs。
在每個(gè)半比特周期的開始,定時(shí)器載入該周期的持續(xù)時(shí)間。然后,當(dāng)程序代碼使IR LED導(dǎo)通或關(guān)斷(在導(dǎo)通周期內(nèi))或簡(jiǎn)單地使IR LED關(guān)斷(在關(guān)斷周期內(nèi))時(shí),連續(xù)檢測(cè)定時(shí)器就可以確定位周期是否結(jié)束。
在超出半個(gè)位周期后,循環(huán)計(jì)數(shù)寄存器(LC1)遞減并檢測(cè)是否為零。如果不是零,那么就仍有比特要發(fā)送,分支程序會(huì)回到循環(huán)的頂部,否則就要檢測(cè)是否按鍵仍然被按下。如果按鍵還是有效,那么整個(gè)周期(從向量中讀取初始值并重新初始化計(jì)數(shù)器)再次開始。否則,CPU會(huì)回到睡眠模式直到按下另一個(gè)按鍵。
增強(qiáng)遙控功能
到目前為止我們已經(jīng)得到了一個(gè)基本的學(xué)習(xí)型遙控器,但它只有兩個(gè)按鍵。改善這個(gè)設(shè)計(jì)的顯著需求是增加更多的按鍵功能。增加按鍵很簡(jiǎn)單,僅需增加少量的硬件電路。當(dāng)CPU空閑時(shí),所有的行驅(qū)動(dòng)器將輸出置為邏輯“1”,每一列的軟下拉(即高阻)使得這些輸入在空閑狀態(tài)時(shí)為低電平。當(dāng)用戶按下任意按鍵時(shí),相應(yīng)列被驅(qū)動(dòng)至高電平,喚醒CPU (圖4)。CPU可以將每一行置為高電平,每次一行,由此判斷按鍵所在的行和列。
圖4. 增加額外的按鍵功能,按鍵操作必須中斷處理器。在睡眠模式,所有列通過軟下拉電阻保持低電平,所有行驅(qū)動(dòng)至高電平。按下按鍵時(shí),列被拉至高電平,喚醒處理器并且開始行掃描過程
另一項(xiàng)改進(jìn)是利用MAXQ2000的定時(shí)時(shí)鐘外設(shè),在特定時(shí)刻喚醒CPU并執(zhí)行IR命令的編程序列。定時(shí)時(shí)鐘為低功耗外設(shè),可以在電池供電情況下長(zhǎng)期工作。當(dāng)MAXQ2000處于關(guān)閉高頻時(shí)鐘的休眠模式時(shí),定時(shí)時(shí)鐘可繼續(xù)工作。這個(gè)時(shí)鐘可以按照某個(gè)時(shí)刻要求或時(shí)間間隔產(chǎn)生中斷,喚醒CPU。例如,定時(shí)時(shí)鐘可以喚醒CPU,然后遙控器可以將指令發(fā)送到電纜或衛(wèi)星機(jī)頂盒,接著發(fā)送指令到VCR或PVR,開始錄制節(jié)目。節(jié)目結(jié)束后,CPU可以再次喚醒,以結(jié)束錄制。
第三種可能性是將MAXQ2000與個(gè)人計(jì)算機(jī)連接。在這種情況下,PC可以當(dāng)作節(jié)目站,從網(wǎng)絡(luò)上下載節(jié)目信息,并自動(dòng)將其載入通用型遙控器。
由此可見,僅僅利用幾個(gè)外圍元器件和少量軟件,功能強(qiáng)大的MAXQ2000微控制器就變成了一個(gè)通用的學(xué)習(xí)型遙控器核。
類似文章發(fā)表于2007年12月刊的Circuit Cellar。
評(píng)論