基于STM32的紅外遙控重點(diǎn)解析
本文有兩個(gè)內(nèi)容:一、紅外遙控協(xié)議的的講解;二、解碼程序解析(參考正點(diǎn)原子的代碼)
紅外的介紹、優(yōu)點(diǎn)、缺點(diǎn)就不給大家說(shuō)了,進(jìn)入正題
一、紅外遙控協(xié)議的的講解
紅外遙控的編碼目前廣泛使用的是:NEC Protocol的PWM(脈沖寬度調(diào)制)和Philips RC-5 Protocol的PPM(脈沖位置調(diào)制)
本文將以NEC協(xié)議實(shí)現(xiàn)紅外遙控。
NEC協(xié)議的特征:
1、8位地址和8位指令長(zhǎng)度;
2、地址和命令兩次傳輸;(確??煽啃裕?br/>3、PWM脈沖寬度調(diào)制,以發(fā)射紅外載波的占空比代表“0”和“1”;
4、載波頻率為38KHz
5、位時(shí)間為1.125ms和2.25ms
NEC碼位的定義:一個(gè)脈沖對(duì)應(yīng)560us的連續(xù)載波,一個(gè)邏輯1傳輸需要2.25ms(560us脈沖+1680us低電平),一個(gè)邏輯0的傳輸需要1.125ms(560us脈沖+560us低電平)。而遙控接收頭在收到脈沖時(shí)為低電平,在沒(méi)有收到脈沖時(shí)為高電平,因此,我們?cè)诮邮疹^端收到的信號(hào)為:邏輯1應(yīng)該是560us低+1680us高,邏輯0應(yīng)該是560us低+560us高。如下圖:
NEC遙控指令的數(shù)據(jù)格式為:同步碼頭(引導(dǎo)碼)+地址碼+地址反碼+控制碼+控制反碼。同步碼是由一個(gè)9ms的低電平和一個(gè)4.5ms的高電平組成,地址碼、地址反碼、控制碼、控制反碼均為8位數(shù)據(jù)格式。按照高位在前低位在后的順序發(fā)送。采用反碼是為了增加傳輸?shù)目煽啃裕捎糜谛r?yàn))。下圖是我們按下按鍵2時(shí),從紅外接收頭端測(cè)到的波形:
在圖中可以看到,在100ms之后,我們還收到了幾個(gè)脈沖,這是NEC碼規(guī)定的連發(fā)碼(由9ms低電平+2.5ms高電平+0.56ms低電平和97.94ms高電平組成),如果在一幀數(shù)據(jù)發(fā)送完后,按鍵仍沒(méi)有松開(kāi),則發(fā)送重復(fù)碼(連發(fā)碼),可以通過(guò)統(tǒng)計(jì)連發(fā)碼的次數(shù)來(lái)標(biāo)記按鍵按下的長(zhǎng)短/次數(shù)。
二、解碼程序解析(參考正點(diǎn)原子的代碼)
在正點(diǎn)原子的代碼中是利用定時(shí)器的輸入捕獲功能來(lái)實(shí)現(xiàn)遙控解碼的,下面解析一下關(guān)鍵代碼:
在該實(shí)驗(yàn)remote.h文件中,定義了3個(gè)函數(shù):Remote_Init();、TIM4_IRQHandler();、Remote_Scan();。
1、Remote_Init();
這里要注意中斷優(yōu)先級(jí),定時(shí)器4的兩個(gè)中斷,溢出(更新)中斷,捕獲事件中斷的優(yōu)先級(jí)是一樣的。意思就是,他兩誰(shuí)也不能打斷誰(shuí),例如A在執(zhí)行時(shí),B就不會(huì)產(chǎn)生中斷。這里很重要,很重要,很重要!
2、TIM4_IRQHandler();
注意:遙控器發(fā)過(guò)來(lái)的碼都是編好的,比如想破解遙控器編碼,可以拿示波器去測(cè)接收端的碼。(這個(gè)我沒(méi)試過(guò)~~)
整個(gè)程序思路不難,就是對(duì)遙控器發(fā)過(guò)來(lái)的碼進(jìn)行解碼,這里主要是兩個(gè)中斷的理解。。