紅外遙控功能的實現


紅外遙控功能,因其電路簡單,控制方便,在電子製作和畢業設計中常常使用。

涉及知識點

  • GPIO中斷接收
  • STM32中定時器的用法
  • 紅外接收頭的使用

外部中斷和定時器的內容比較多,之後網文再詳細分享。

一體化紅外接收頭VS1838B簡介

  • 工作電壓: 2.7V~5.5V

  • 應用電路
    在這裏插入圖片描述

  • 外觀、封裝及尺寸
    把接收頭面向自己,左邊爲1腳,1腳OUT,2腳GND,3腳VCC。
    在這裏插入圖片描述
    在這裏插入圖片描述

應用場景

  • 視聽器材(音箱、電視、錄影機、碟機)
  • 家庭電器(冷氣機、電風扇、電燈)
  • 其他紅外線遙控產品

在這裏插入圖片描述

編碼標準

紅外接收頭的型號有很多HS0038、VS1838B等,功能大致相同,只是引腳封裝不同。

紅外接收有幾種統一的編碼方式,採樣哪種編碼方式取決於遙控器使用的芯片,接收頭收到的都是一樣的。

電視遙控器使用的是專用集成發射芯片來實現遙控碼的發射,通常彩電遙控信號的發射,就是將某個按鍵所對應的控制指令和系統碼(由0和1組成的序列),調製在38KHz的載波上,然後經放大、驅動紅外發射管將信號發射出去。

不同公司的遙控芯片,採樣的遙控碼格式也不一樣,較普遍的有兩種,一種NEC標準,一種是PHILIPS標準。

NEC標準: 當某個鍵按下時,系統首先發射一個完整的全碼,如果按鍵超過108ms仍未鬆開,接下來發射的代碼(連發代碼)將由起始碼(9ms)和結束碼(2.5ms)組成。

一個完整的全碼 = 引導碼 +用戶碼 +用戶碼 + 數據碼 + 數據反碼。

其中,引導碼高電平9ms,低電平4.5ms;

用戶碼和數據碼共32位;其中前16位爲用戶識別碼,能區別不同的紅外遙控設備,以防止不同的機種遙控碼互相干擾。
後16位數據碼爲8位的操作碼和8位的操作反碼,用於覈對數據是否接收準確。

接收端根據數據碼的不同做出相應的動作。

連發代碼是在持續按鍵時發送的碼。它告知接收端。某鍵是在被連續的按着。

PHILIPS標準 邏輯“0”和邏輯“1”的定義。

在這裏插入圖片描述


我們使用的遙控器模塊使用的是NEC標準,當我們點擊紅外遙控器上第一個按鍵Ch- 時,用示波器測量VS1838B的OUT引腳,示波器中抓取的信號如下:

在這裏插入圖片描述

我們可以看出跟下圖標準的NEC協議的典型脈衝鏈的定義是一致的:

在這裏插入圖片描述

上圖爲NEC協議的典型脈衝鏈。協議規定低位首先發送

首先發送9ms+4.5ms的引導碼,接下來是兩字節用戶碼,第三字節是數據碼(按鍵碼),用來判斷按鍵值,第四字節是數據反碼,可以用來校驗,提高按鍵的準確性。

注意:
我們會發現上面兩個圖中波形的高低電平
實際上是相反的,因爲紅外接收頭將38K載波信號過濾,接收到的波形剛好與發射波形相反。

難點:數據0和1的判斷:
所謂的解碼就是一個區分脈衝寬度的過程。紅外信號的“0”和“1”是通過脈衝持續時間的長短來區分的,NEC標準的“0”和“1”的定義如下:

在這裏插入圖片描述

引導碼:9ms 的載波+4.5ms 的空閒。
比特值“0”:560us 的低電平+560us 的高電平。
比特值“1”:560us 的低電平+1.68ms 的高電平。

在這裏插入圖片描述

VS1838B 這個紅外一體化接收頭,當收到有載波的信號的時候,會輸出一個低電平,空閒的時候會輸出高電平。

數據處理流程

在這裏插入圖片描述

結果展示

接線

與VS1838B連接:

  • 紅外接收頭的OUT引腳連接PA7
  • VCC連接3.3V
  • GND接地

與USB轉TTL串口相連: 用於打印調試信息

  • USB轉TTL串口的TXD與核心板的PA10相連
  • USB轉TTL串口的RXD與核心板的PA9相連
  • USB轉TTL串口的VCC與3V3跳線短接

在這裏插入圖片描述

鍵碼值輸出

按紅外遙控的各個按鍵,串口打印輸出各個按鍵值如下:

在這裏插入圖片描述

對紅外遙控器鍵碼值整理如下:

在這裏插入圖片描述

下面視頻中抓取的是第一個按鍵的脈衝信號:
//視頻在公衆號的文章中有,這裏沒辦法轉過來

我們通過觀察視頻發現它的四個字節的數據如下:
00000000 11111111 10100010 01011101

其中:
頭兩個字節00000000 11111111,即用戶碼,值爲:0x00FF;
第三個字節就是Command命令字,10100010,這個數字對應十進制就是162,對應16進制就是0xA2。

一般我們就利用第三個字節的值,進行不同的功能定義。
第四字節01011101,可以看出與第三字節10100010互爲反碼。

但是我們通過上面NEC編碼部分的介紹可知,NEC協議規定低位首先發送。所以上面打印輸出的162(10100010),需要高低位反過來,即第一個按鍵的二進制真實編碼爲:01000101,即十六進制的0x45。

我們將所有的按鍵重新計算,所有編碼就能夠得到網上的按鍵編碼圖了。

在這裏插入圖片描述

其實我們只要每個按鍵能準確得到一個不同鍵碼值,然後程序中根據不同值,執行不同流程即可,對於“CH-”鍵碼值是162還是0x45,其實對功能的實現沒有影響。


推薦閱讀:
STM32單片機最小系統詳解
STM32F103 串口的使用方法
STM32中精確延時函數的實現
基於STM32固件庫的MDK5工程建立
修改Keil工程名稱並添加其他模塊文件
利用STM32F103C8T6最小系統板點亮流水燈


六月份的“每月一練”活動已經開始投票了,六月份做什麼,由你們決定。
感興趣的進入下面鏈接投票哈。
2020.06 “每月一練”活動開始投票了

 

活動介紹及日程安排,詳見公衆號底部菜單欄“每月活動”。

在這裏插入圖片描述


在這裏插入圖片描述

若覺得本次分享的文章對您有幫助,隨手點贊、收藏或轉發分享,也是對我的支持。
歡迎評論中討論,大家一起提高。
有問題可以加我微信號:chengxuyuanxiaoha(程序員小哈)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章