紅外遙控我們并不陌生,身邊隨處可見,最常見的就是家電中的紅外遙控,那你知道其中的收發(fā)原理嗎?
?今天就來分享一篇關(guān)于紅外解碼的文章。
1 硬件連接
紅外解碼只需連3 根線(2 根電源 + 1 根數(shù)據(jù))即可,如下圖中TSOP382。
2 NEC 協(xié)議解碼
本文所述的紅外編解碼采用 NEC 協(xié)議。通信的數(shù)據(jù)幀里使用 高電平時間 來區(qū)分 0 和 1。
對于按一下然后按住不動的情況,NEC 協(xié)議下是這么處理的:
上圖中寫的“固定重復指令”也叫作“重復引導碼”。對于紅外通信協(xié)議,搜關(guān)鍵詞“IR 引導碼”會比較容易搜出結(jié)果。
NEC 的編碼規(guī)則非常簡單,如下圖:
實際用邏輯分析儀抓取的波形如下,可以與上面的規(guī)則相互印證:
3 Arduino 紅外解碼
把上圖中的代碼復制到下面:
#includeconst 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(); } }
4 STM32 紅外解碼
1.外部中斷方式
外部中斷方式的優(yōu)點在于:用哪個引腳都可以。因為沒有使用片上定時器外設,所以需要使用 CPU 計數(shù)方式來算時間。
2.定時器捕獲方式
定時器捕獲方式需要使用與定時器相關(guān)的引腳,優(yōu)點是 CPU 不參與計時,被解放出來的 CPU 可以做其他的事。
PS除了 NEC 協(xié)議,紅外通信還有很多其他的協(xié)議,這在 Mixly 圖形化編程軟件中看得很明顯,如下圖:
本文選擇最簡單的 NEC 協(xié)議談紅外解碼意在簡單地體現(xiàn) IR 通信的應用,所以沒有引入 38kHz 載波的概念。
5 收、發(fā)解碼差異
如上圖,紅外通信比較奇特的一點就是收發(fā)數(shù)據(jù)反相。這就導致雖然從發(fā)送方或接收方都能解出正確數(shù)據(jù),但必解碼時必須注意極性,極性要是反了就解不出或解不對數(shù)據(jù)。
通信實驗:
?
如上圖,作者覺得發(fā)與收之間的相位差加強了實驗的真實感。作者用了兩個單片機,分別是 ATMega 2560 和 ATMega 644,選 Arduino 系單片機的原因是想偷個懶不寫軟件。
下面放大一個數(shù)據(jù),仔細看一看 38KHz 的載波長什么樣:
?
上圖的結(jié)論是占在“接收方”的角度寫的“發(fā)送方”的行為。也就是說:
1.想讓接收方接到 0,發(fā)送方就發(fā) 38KHz 的載波;
2.想讓接收方接到 1,發(fā)送方就停止發(fā)送載波。
這里不免有人會問:停止發(fā)送載波實際上讓接收方收到了 1,那該怎么區(qū)分“停止通信”和“通信中的 1”呢?
這答案就能看出 NEC 協(xié)議的作用了:數(shù)據(jù)幀有頭有尾,在頭尾之間的停止發(fā)送就是數(shù)據(jù) 1,不在頭尾之間的就是沒有通信。
審核編輯:湯梓紅
-
電源
+關(guān)注
關(guān)注
184文章
17184瀏覽量
247729 -
NEC
+關(guān)注
關(guān)注
0文章
238瀏覽量
99004 -
STM32
+關(guān)注
關(guān)注
2257文章
10822瀏覽量
352419 -
紅外遙控
+關(guān)注
關(guān)注
22文章
347瀏覽量
45392 -
Arduino
+關(guān)注
關(guān)注
186文章
6453瀏覽量
185902
原文標題:結(jié)合STM32、Arduino理解紅外遙控編解碼通信原理
文章出處:【微信號:strongerHuang,微信公眾號:strongerHuang】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論