紅外線是在可見范圍內遠程控制設備最便宜的方法,具有抗干擾能力強、電路簡單、容易編碼/解碼、功耗小、成本低等特點,我們生活中幾乎所有的音頻和視頻等家電設備都可以通過這種方式進行控制,由于紅外遙控的廣泛使用,相應的元器件也就相當便宜和容易獲得,從而被廣大的電子產品的業余愛好者、創客用來控制自己的項目,在嵌入式系統的學習和實戰項目中也被廣泛采用。
1. 工作原理
紅外發光
紅外光實際上是具有特定顏色的普通光,波長在760~1500納米范圍,低于我們的可見光譜,所以肉眼看不到這種顏色,這也是為什么我們選用紅外光用于遠程控制的原因之一,我們想使用它,但我們對看到它不感興趣;另一個原因是紅外發光二極管非常容易制造,非常便宜。雖然我們人類看不到遙控器發出的紅外光,但這并不意味著我們不能讓它變得可見。攝像機或數碼相機可以“看到”紅外光,正如你在這張圖片中看到的。
如今,即使是最便宜的手機也內置了攝像頭。只要把遙控器對準這樣的相機,按下任意一個按鈕,你就會看到LED閃爍。不幸的是,我們周圍有太多的紅外線光源 - 太陽是所有光源中最亮的,還有很多其它的光源,比如:燈泡、蠟燭、中央供暖系統等等,甚至我們的身體都會輻射紅外光。事實上,任何散發熱量的東西,就會散發紅外光。因此,我們必須采取一些預防措施,以確保這些紅外信息沒有錯誤地傳遞到接收方 - 比如對我們要傳輸的信息進行“調制”。
調制
在載波頻率上調制信號是使我們的信號在噪聲中脫穎而出的一種方式,通過調制,我們使紅外光源以特定的頻率閃爍,紅外接收器也調到那個頻率,它就可以忽略其它頻率的干擾信息。就如同你可以通過眨眼的方式來吸引接收者的注意力,即使在明亮的白天,我們人類也會注意到建筑工地閃爍的黃色燈光。
在上圖中,你可以看到一個調制信號驅動左邊發射器的紅外LED,接收器將檢測到的信號輸出。
在串行通信中,我們通常說“標記”和“空閑”。“空閑”是默認信號,在發射機的情況下是關閉狀態。在“空閑”狀態下不會發光。在信號的“標記”狀態下,紅外光脈沖以特定的頻率開啟和關閉。在30kHz和60kHz之間的載波頻率通常用于消費電子產品,最常見的是38kHz, 采用占空比為1/3的方波。
在接收端,“空閑”通常由接收端高電平的輸出來表示。然后,“標記”會自動由一個低電平表示。
要注意,“標記”和“空閑”不是我們想要傳輸的1和0。“標記”和“空閑”以及“1”和“0”之間的真正關系取決于所使用的協議。更多的信息可以在描述協議的頁面中找到。
紅外發射
紅外發射器一般是一個用電池供電的手持設備,它應該消耗盡可能少的功率,并且紅外信號也應該盡可能強,以達到一個可接受的控制距離。最好它也應該是防震的。用作紅外發射器的專用芯片有很多,這些芯片都支持其中的某些協議,隨著微控制器技術的發展、成本和功耗都大大降低,越來越多的紅外發射器使用微控制器來實現,用起來更靈活,當不按按鈕時,它們處于極低功耗睡眠模式,幾乎沒有任何電流被消耗;處理器只有在按下一個按鍵時才會醒來發送適當的紅外命令。
這種手持設備很少使用石英晶體,因為晶體非常脆弱,一旦遙控器掉在地上就很容易折斷,所以多數都使用陶瓷諧振器(中心頻率為455KHz,通過12分頻以后得到接近38KHz的載波信號),它們可以承受更大的物理沖擊,即便頻率沒有那么精準也不會影響紅外通信的效果。
流經LED(或LED陣列)的電流可以從100mA到超過1A! 如果希望遙控的距離盡可能遠,LED的電流也必須盡可能高,這就需要我們在LED參數、電池壽命和最大控制距離之間進行權衡。LED電流能達到這么高是因為驅動LED的脈沖非常短,不過,LED內部的平均功耗不應該超過它們的最大值,且要確保不超過LED的最大峰值電流。將載波信號的脈沖/暫停比降低到1/3甚至1/4是很常見的。這降低了功率需求,或者可以增加通過LED的電流,而不會使其過熱,從而獲得更長的控制距離。所有這些參數都可以在LED的數據表中找到。
可以選用一個簡單的晶體管電路來驅動LED,應選擇具有適當HFE和開關速度的晶體管。電阻的值可以用歐姆定律簡單地計算出來,一個紅外LED的標稱電壓降約為1.1V。
上面的驅動電路有一個缺點 - 隨著電池電壓的下降,通過LED的電流也會減少,這將導致能夠達到的控制距離變短。
射極跟隨電路可以避免這種情況。兩個串聯的二極管將晶體管基極端的脈沖限制在1.2V,減去晶體管的基極-發射極電壓壓差0.6V,當紅外發射機工作時,發射極的電壓幅度恒定為0.6V。這個恒定的幅度通過一個恒定的電阻導致一個恒定大小的電流脈沖,與電池的電壓變化無關, 只需要運用歐姆定律就可以簡單地得出LED的電流。
紅外接收
市場上有許多不同的接收電路,選擇跟你當前的載波頻率匹配的電路。
在上圖中,你可以看到這樣一個紅外接收器的典型框圖。接收到的紅外信號由圖左側的紅外接收二極管進行光電變換得到電信號,這個電信號被放大和限幅,限幅器可以看作是AGC(自動增益控制)電路,無論距離遙控器有多遠,都可以以獲得恒定的脈沖水平輸出。電路中的電容起到隔離直流的作用,只有交流電信號被發送到帶通濾波器,帶通濾波器的中心頻率設定為遙控器發射信號的載波頻率。消費類電子產品中常見的載波頻率范圍從30kHz到60kHz。
經過帶通濾波器處理后的信號送到下一級的探測器、積分器和比較器,這三個模塊的目的是將載波頻率檢測出來,如果有這個載波頻率,比較器的輸出將被拉低。
在實際的產品中,所有這些功能模塊都集成到一個單一的電子元件中。市場上有許多不同的制造商生產這些元件,而且大多數設備都有幾個版本,每個版本都被調到一個特定的載波頻率。
請注意放大器的增益被設置為很高,系統很容易振蕩。一定要在接收器的電源管腳放置一個至少22μF的大電容進行去耦,一些器件的數據手冊建議使用330歐姆的電阻與電源串聯,以進一步將電源與電路的其它部分解耦。
市場上有幾家紅外接收器制造商 - 西門子、Vishay和Telefunken是歐洲的主要供應商,西門子有其SFH506-xx系列,其中xx表示載頻為30、33、36、38、40或56kHz;Telefunken有其TFMS5xx0和TK18xx系列,其中xx表示載波頻率。現在常用的是Vishay的TSOP12xx、TSOP48xx和TSOP62xx產品系列。
在亞洲夏普、廈門華聯和日本電氣是三家有名的紅外接收器生產企業。夏普的設備有非常神秘的ID名稱,如:GP1UD26xK, GP1UD27xK和GP1UD28xK,其中x與載波頻率相關。華聯有HRMxx00系列,如HRM3700和HRM3800。日本電氣公司(Japanese Electric)有一系列設備,在元器件的ID中不包括載頻。PIC-12042LM調諧到36.7kHz, PIC12043LM調諧到37.9kHz。
2. 電路連接
在硬禾學堂開發的基于RP2040的嵌入式系統學習平臺上,使用了Vishay公司的940nm波長的高速紅外發射管 VSMB10940以及臺灣億光(Ever bright)公司的一體化貼邊紅外接收頭IRM-H638T,電路的連接如下圖:
另外在Github上有小哥 - Harish Kumar使用RP2040的PIO實現了紅外接收解碼,并支持HID,從而實現了一個IR鍵盤的功能,可以通過PIO解碼任何NEC協議的紅外發射脈沖信號,并支持USB鍵盤功能(HID).
還有一個項目用樹莓派Pico實現了遙控信號接收和發射的功能,并有詳細的過程描述。
3. MicroPython編程
Peter Hinch提供了基于ESP32、ESP8266以及樹莓派Pico的MicroPython設備驅動程序:
https://github.com/peterhinch/micropython_ir
其中:
- 紅外發射文檔:https://github.com/peterhinch/micropython_ir/blob/master/TRANSMITTER.md
- 紅外接收部分:https://github.com/peterhinch/micropython_ir/blob/master/RECEIVER.md
4. Verilog編程
- Lattice使用ICE40 FPGA做紅外接收和發射的參考設計資源頁面:https://www./products/designsoftwareandip/intellectualproperty/referencedesigns/referencedesigns02/ir
- Lattice使用ICE40 Ultra自學習紅外遙控參考指南:https://www./view_document?document_id=50709