紅外遙控38KHz載波,收發(fā)調(diào)制解碼工作原理
關(guān)注+星標(biāo)公眾號(hào),不錯(cuò)過(guò)精彩內(nèi)容
作者 |?sugar
轉(zhuǎn)自 |?MultiMCU EDU
1硬件連接
紅外解碼只需連3 根線(2 根電源 + 1 根數(shù)據(jù))即可,如下圖中TSOP382
。
2NEC 協(xié)議解碼
本文所述的紅外編解碼采用 NEC
協(xié)議。通信的數(shù)據(jù)幀里使用 高電平時(shí)間
來(lái)區(qū)分 0
和 1
。
對(duì)于按一下然后按住不動(dòng)的情況,NEC 協(xié)議下是這么處理的:
上圖中寫(xiě)的“固定重復(fù)指令”也叫作“重復(fù)引導(dǎo)碼”。對(duì)于紅外通信協(xié)議,搜關(guān)鍵詞“IR 引導(dǎo)碼”會(huì)比較容易搜出結(jié)果。
NEC 的編碼規(guī)則非常簡(jiǎn)單,如下圖:
實(shí)際用邏輯分析儀抓取的波形如下,可以與上面的規(guī)則相互印證:
3Arduino 紅外解碼
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();
}
}
4STM32 紅外解碼
1.外部中斷方式
參考《江濤帶你玩STM32-CubeMX紅外NEC解碼實(shí)戰(zhàn)(上)—外部中斷方式》
參考《江濤帶你玩STM32-CubeMX紅外NEC解碼實(shí)戰(zhàn)(下)—定時(shí)器TIM捕獲方式》
PS
NEC
協(xié)議談紅外解碼意在簡(jiǎn)單地體現(xiàn) IR 通信的應(yīng)用,所以沒(méi)有引入
38kHz
載波的概念,如果想深入了解可以參考《STM32之紅外遙控信號(hào)自學(xué)習(xí)實(shí)現(xiàn)》。
5收、發(fā)解碼差異
如上圖,紅外通信比較奇特的一點(diǎn)就是收發(fā)數(shù)據(jù)反相。這就導(dǎo)致雖然從發(fā)送方或接收方都能解出正確數(shù)據(jù),但必解碼時(shí)必須注意極性,極性要是反了就解不出或解不對(duì)數(shù)據(jù)。
通信實(shí)驗(yàn):
如上圖,作者覺(jué)得發(fā)與收之間的相位差加強(qiáng)了實(shí)驗(yàn)的真實(shí)感。作者用了兩個(gè)單片機(jī),分別是 ATMega 2560 和 ATMega 644,選 Arduino 系單片機(jī)的原因是想偷個(gè)懶不寫(xiě)軟件。
下面放大一個(gè)數(shù)據(jù),仔細(xì)看一看 38KHz 的載波長(zhǎng)什么樣:
上圖的結(jié)論是占在“接收方”的角度寫(xiě)的“發(fā)送方”的行為。也就是說(shuō):
1.想讓接收方接到 0,發(fā)送方就發(fā) 38KHz 的載波;
2.想讓接收方接到 1,發(fā)送方就停止發(fā)送載波。
這里不免有人會(huì)問(wèn):停止發(fā)送載波實(shí)際上讓接收方收到了 1,那該怎么區(qū)分“停止通信”和“通信中的 1”呢?
這答案就能看出 NEC 協(xié)議的作用了:數(shù)據(jù)幀有頭有尾,在頭尾之間的停止發(fā)送就是數(shù)據(jù) 1,不在頭尾之間的就是沒(méi)有通信。
精選匯總 | 專欄 | 目錄 | 搜索
精選匯總 | ARM、Cortex-M
精選匯總?| ST工具、下載編程工具
點(diǎn)擊“閱讀原文”查看更多分享,歡迎點(diǎn)分享、收藏、點(diǎn)贊、在看。
免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場(chǎng),如有問(wèn)題,請(qǐng)聯(lián)系我們,謝謝!