紅外的介紹、優點、缺點就不給大家說了,進入正題

 

一、紅外遙控協議的的講解

 

紅外遙控的編碼目前廣泛使用的是:NEC Protocol 的 PWM(脈沖寬度調制)和 Philips RC-5 Protocol 的 PPM(脈沖位置調制)

 

本文將以 NEC 協議實現紅外遙控。

 

NEC 協議的特征:

 

1、8 位地址和 8 位指令長度;

 

2、地址和命令兩次傳輸;(確保可靠性)

 

3、PWM 脈沖寬度調制,以發射紅外載波的占空比代表“0”和“1”;

 

4、載波頻率為 38KHz

 

5、位時間為 1.125ms 和 2.25ms

 

NEC 碼位的定義:一個脈沖對應 560us 的連續載波,一個邏輯 1 傳輸需要 2.25ms(560us 脈沖+1680us 低電平),一個邏輯 0 的傳輸需要 1.125ms(560us 脈沖+560us 低電平)。而遙控接收頭在收到脈沖時為低電平,在沒有收到脈沖時為高電平,因此,我們在接收頭端收到的信號為:邏輯 1 應該是 560us 低+1680us 高,邏輯 0 應該是 560us 低+560us 高。如下圖:

 

 

NEC 遙控指令的數據格式為:同步碼頭(引導碼)+地址碼+地址反碼+控制碼+控制反碼。同步碼是由一個 9ms 的低電平和一個 4.5ms 的高電平組成,地址碼、地址反碼、控制碼、控制反碼均為 8 位數據格式。按照高位在前低位在后的順序發送。采用反碼是為了增加傳輸的可靠性(可用于校驗)。下圖是我們按下按鍵 2 時,從紅外接收頭端測到的波形:

 

 

在圖中可以看到,在 100ms 之后,我們還收到了幾個脈沖,這是 NEC 碼規定的連發碼(由 9ms 低電平+2.5ms 高電平+0.56ms 低電平和 97.94ms 高電平組成),如果在一幀數據發送完后,按鍵仍沒有松開,則發送重復碼(連發碼),可以通過統計連發碼的次數來標記按鍵按下的長短 / 次數。

 

二、解碼程序解析(參考正點原子的代碼)

 

在正點原子的代碼中是利用定時器的輸入捕獲功能來實現遙控解碼的,下面解析一下關鍵代碼:

 

在該實驗 remote.h 文件中,定義了 3 個函數:Remote_Init();、TIM4_IRQHandler();、Remote_Scan();。

 

1、Remote_Init();

 

 

這里要注意中斷優先級,定時器 4 的兩個中斷,溢出(更新)中斷,捕獲事件中斷的優先級是一樣的。意思就是,他兩誰也不能打斷誰,例如 A 在執行時,B 就不會產生中斷。這里很重要,很重要,很重要!

 

2、TIM4_IRQHandler();

 

 

 

 

注意:遙控器發過來的碼都是編好的,比如想破解遙控器編碼,可以拿示波器去測接收端的碼。

 

整個程序思路不難,就是對遙控器發過來的碼進行解碼,這里主要是兩個中斷的理解。