0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

結合STM32、Arduino理解紅外遙控編解碼通信原理

strongerHuang ? 來源:MultiMCU EDU ? 2023-03-14 09:46 ? 次閱讀

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

d4fe66b8-c18e-11ed-bfe3-dac502259ad0.gif ?

今天就來分享一篇關于紅外解碼的文章。

1 硬件連接

紅外解碼只需連3 根線(2 根電源 + 1 根數據)即可,如下圖中TSOP382。 d5166c54-c18e-11ed-bfe3-dac502259ad0.jpg

2 NEC 協議解碼

本文所述的紅外編解碼采用 NEC 協議。通信的數據幀里使用 高電平時間 來區(qū)分 0 和 1。

d5305bfa-c18e-11ed-bfe3-dac502259ad0.jpg

對于按一下然后按住不動的情況,NEC 協議下是這么處理的:

d54981ca-c18e-11ed-bfe3-dac502259ad0.jpg

上圖中寫的“固定重復指令”也叫作“重復引導碼”。對于紅外通信協議,搜關鍵詞“IR 引導碼”會比較容易搜出結果。

NEC 的編碼規(guī)則非常簡單,如下圖:
d5659892-c18e-11ed-bfe3-dac502259ad0.jpg

實際用邏輯分析儀抓取的波形如下,可以與上面的規(guī)則相互印證:

d5740058-c18e-11ed-bfe3-dac502259ad0.jpg

3 Arduino 紅外解碼


d58e41ac-c18e-11ed-bfe3-dac502259ad0.jpg

把上圖中的代碼復制到下面:


#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();
  }
}

4 STM32 紅外解碼

1.外部中斷方式

外部中斷方式的優(yōu)點在于:用哪個引腳都可以。因為沒有使用片上定時器外設,所以需要使用 CPU 計數方式來算時間。

2.定時器捕獲方式

定時器捕獲方式需要使用與定時器相關的引腳,優(yōu)點是 CPU 不參與計時,被解放出來的 CPU 可以做其他的事。

PS除了 NEC 協議,紅外通信還有很多其他的協議,這在 Mixly 圖形化編程軟件中看得很明顯,如下圖:

d59e3378-c18e-11ed-bfe3-dac502259ad0.jpg

本文選擇最簡單的 NEC 協議談紅外解碼意在簡單地體現 IR 通信的應用,所以沒有引入 38kHz 載波的概念。

5 收、發(fā)解碼差異

d5b0c33a-c18e-11ed-bfe3-dac502259ad0.jpg

如上圖,紅外通信比較奇特的一點就是收發(fā)數據反相。這就導致雖然從發(fā)送方或接收方都能解出正確數據,但必解碼時必須注意極性,極性要是反了就解不出或解不對數據。

通信實驗:

d5d8bb4c-c18e-11ed-bfe3-dac502259ad0.jpg ?

如上圖,作者覺得發(fā)與收之間的相位差加強了實驗的真實感。作者用了兩個單片機,分別是 ATMega 2560 和 ATMega 644,選 Arduino 系單片機的原因是想偷個懶不寫軟件。

下面放大一個數據,仔細看一看 38KHz 的載波長什么樣:

d5f18b90-c18e-11ed-bfe3-dac502259ad0.jpg ?

上圖的結論是占在“接收方”的角度寫的“發(fā)送方”的行為。也就是說:

1.想讓接收方接到 0,發(fā)送方就發(fā) 38KHz 的載波;

2.想讓接收方接到 1,發(fā)送方就停止發(fā)送載波。

這里不免有人會問:停止發(fā)送載波實際上讓接收方收到了 1,那該怎么區(qū)分“停止通信”和“通信中的 1”呢?

這答案就能看出 NEC 協議的作用了:數據幀有頭有尾,在頭尾之間的停止發(fā)送就是數據 1,不在頭尾之間的就是沒有通信。

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯系本站處理。 舉報投訴
  • 電源
    +關注

    關注

    184

    文章

    17718

    瀏覽量

    250168
  • NEC
    NEC
    +關注

    關注

    0

    文章

    238

    瀏覽量

    99119
  • STM32
    +關注

    關注

    2270

    文章

    10900

    瀏覽量

    356003
  • 紅外遙控
    +關注

    關注

    22

    文章

    347

    瀏覽量

    45604
  • Arduino
    +關注

    關注

    188

    文章

    6469

    瀏覽量

    187063

原文標題:結合STM32、Arduino理解紅外遙控編解碼通信原理

文章出處:【微信號:strongerHuang,微信公眾號:strongerHuang】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    單片機實現紅外遙控編解碼全部資料

    `紅外遙控器的解碼并對電器進行遙控一直是廣大單片機愛好者的一個心愿。自己動手實現紅外遙控電器也是
    發(fā)表于 08-12 10:16

    arduino單片機的紅外遙控解碼發(fā)送庫文件

    紅外遙控庫除了解碼之外還能發(fā)送,用C++封裝的庫函數,是arduino編程的利器
    發(fā)表于 08-29 18:59

    藍牙學習型紅外遙控器(NEC協議編解碼

    學習型紅外遙控器(NEC協議編解碼) 單片機:STC89C52RC晶振:11.0592M 波特率:9600編譯環(huán)境:Keil uVision4
    發(fā)表于 02-26 10:34

    初識紅外編解碼

    初識紅外編解碼
    發(fā)表于 08-16 06:35

    如何通過STM32解碼紅外遙控器的信號呢

    什么是紅外遙控?如何通過STM32解碼紅外遙控器的信號呢?
    發(fā)表于 10-27 06:02

    Arduino紅外遙控解碼率很低是為什么?

    Arduino利用官方的紅外解碼庫,但是成功率很低,按8到9次才會識別一次
    發(fā)表于 11-08 06:52

    經典全面的紅外編解碼資料

    經典全面的紅外編解碼資料 紅外遙控器已被廣泛使用在各種類型的家電產品上,它的出現給使用電器提供了很多的便利。紅外
    發(fā)表于 04-01 18:11 ?236次下載

    紅外遙控編解碼全攻略

    紅外遙控器的解碼并對電器進行遙控是單片機學習者得一個心愿,自己動手實現 紅外遙控
    發(fā)表于 07-12 13:09 ?435次下載
    <b class='flag-5'>紅外</b><b class='flag-5'>遙控</b><b class='flag-5'>編解碼</b>全攻略

    紅外通信模塊設計教程和關于單片機紅外開發(fā)以及紅外編解碼知識

    紅外通信模塊設計教程和關于單片機紅外開發(fā)以及紅外編解碼知識
    發(fā)表于 09-04 08:50 ?30次下載
    <b class='flag-5'>紅外</b><b class='flag-5'>通信</b>模塊設計教程和關于單片機<b class='flag-5'>紅外</b>開發(fā)以及<b class='flag-5'>紅外</b><b class='flag-5'>編解碼</b>知識

    通信接口——編解碼

    通信接口——編解碼
    發(fā)表于 09-04 09:39 ?9次下載
    <b class='flag-5'>通信</b>接口——<b class='flag-5'>編解碼</b>

    紅外遙控編解碼相關資料分享

    本文分享了紅外遙控編解碼的相關資料。
    發(fā)表于 11-16 14:40 ?44次下載

    紅外遙控編解碼全面講解

    紅外的簡單發(fā)射接收原理:在發(fā)射端,輸入信號經放大后送入紅外發(fā)射管發(fā)射,在接收端,接收管收到紅外信號后,由放大器放大處理后還原成信號。紅外遙控
    的頭像 發(fā)表于 03-06 13:51 ?8.4w次閱讀
    <b class='flag-5'>紅外</b><b class='flag-5'>遙控</b><b class='flag-5'>編解碼</b>全面講解

    STM32 NEC紅外遙控解碼

    STM32 NEC紅外遙控解碼紅外遙控編碼格式一體化紅外
    發(fā)表于 11-30 14:36 ?30次下載
    <b class='flag-5'>STM32</b> NEC<b class='flag-5'>紅外</b><b class='flag-5'>遙控</b>器<b class='flag-5'>解碼</b>

    使用Arduino解碼任何遙控器的紅外遙控信號

    電子發(fā)燒友網站提供《使用Arduino解碼任何遙控器的紅外遙控信號.zip》資料免費下載
    發(fā)表于 10-27 11:51 ?4次下載
    使用<b class='flag-5'>Arduino</b><b class='flag-5'>解碼</b>任何<b class='flag-5'>遙控</b>器的<b class='flag-5'>紅外</b><b class='flag-5'>遙控</b>信號

    遙控編解碼芯片有哪些

    遙控編解碼芯片是無線遙控系統中的重要組成部分,它們負責編碼和解碼信號,以實現遙控功能。以下是一些常見的
    的頭像 發(fā)表于 09-30 14:21 ?903次閱讀