紅外遙控我們并不陌生,身邊隨處可見,最常見的就是家電中的紅外遙控,那你知道其中的收發(fā)原理嗎?

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

紅外通信模塊設(shè)計(jì)教程和關(guān)于單片機(jī)紅外開發(fā)以及紅外編解碼知識(shí)

紅外遙控編解碼全面講解

使用Arduino解碼任何遙控器的紅外遙控信號(hào)

評(píng)論