關注+星標公眾號,發調不錯過精彩內容
作者 |?sugar
轉自 |?MultiMCU EDU
1硬件連接
紅外解碼只需連3 根線(2 根電源 + 1 根數據)即可,波收如下圖中TSOP382
。發調
2NEC 協議解碼
本文所述的碼工紅外編解碼采用 NEC
協議。通信的紅外數據幀里使用 高電平時間
來區分 0
和 1
。
對于按一下然后按住不動的遙控情況,NEC 協議下是載制解作原這么處理的:
上圖中寫的“固定重復指令”也叫作“重復引導碼”。對于紅外通信協議,搜關鍵詞“IR 引導碼”會比較容易搜出結果。
NEC 的編碼規則非常簡單,如下圖:
實際用邏輯分析儀抓取的波形如下,可以與上面的規則相互印證:
3Arduino 紅外解碼
#include
const int irReceiverPin = 2;
IRrecv irrecv(irReceiverPin);
decode_results results;
decode_results res_last;
void setup() {
Serial.begin(9600);
irrecv.enableIRIn();
}
void loop() {
if(irrecv.decode(&results)){
if(res_last.value != results.value){
res_last.value = results.value;
Serial.print("irCode: ");
Serial.print(results.value, HEX);
Serial.print(", bits: ");
Serial.println(results.bits);
}
irrecv.resume();
}
}
4STM32 紅外解碼
1.外部中斷方式
參考《江濤帶你玩STM32-CubeMX紅外NEC解碼實戰(上)—外部中斷方式》
參考《江濤帶你玩STM32-CubeMX紅外NEC解碼實戰(下)—定時器TIM捕獲方式》
PS
NEC
協議談紅外解碼意在簡單地體現 IR 通信的應用,所以沒有引入 38kHz
載波的概念,如果想深入了解可以參考《STM32之紅外遙控信號自學習實現》。 5收、發解碼差異
如上圖,紅外通信比較奇特的一點就是收發數據反相。這就導致雖然從發送方或接收方都能解出正確數據,但必解碼時必須注意極性,極性要是反了就解不出或解不對數據。
通信實驗:
如上圖,作者覺得發與收之間的相位差加強了實驗的真實感。作者用了兩個單片機,分別是 ATMega 2560 和 ATMega 644,選 Arduino 系單片機的原因是想偷個懶不寫軟件。
下面放大一個數據,仔細看一看 38KHz 的載波長什么樣:
上圖的結論是占在“接收方”的角度寫的“發送方”的行為。也就是說:
1.想讓接收方接到 0,發送方就發 38KHz 的載波;
2.想讓接收方接到 1,發送方就停止發送載波。
這里不免有人會問:停止發送載波實際上讓接收方收到了 1,那該怎么區分“停止通信”和“通信中的 1”呢?
這答案就能看出 NEC 協議的作用了:數據幀有頭有尾,在頭尾之間的停止發送就是數據 1,不在頭尾之間的就是沒有通信。
精選匯總 | 專欄 | 目錄 | 搜索
精選匯總 | ARM、Cortex-M
精選匯總?| ST工具、下載編程工具
點擊“閱讀原文”查看更多分享,歡迎點分享、收藏、點贊、在看。
免責聲明:本文內容由21ic獲得授權后發布,版權歸原作者所有,本平臺僅提供信息存儲服務。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯系我們,謝謝!