目錄:
涉及知識點
一體化紅外接收頭VS1838B簡介
應用場景
編碼標準
數(shù)據(jù)處理流程
結果展示
接線
鍵碼值輸出
紅外遙控功能,因其電路簡單,控制方便,在電子制作和畢業(yè)設計中常常使用。
涉及知識點
GPIO中斷接收
STM32中定時器的用法
紅外接收頭的使用
外部中斷和定時器的內(nèi)容比較多,之后網(wǎng)文再詳細分享。
一體化紅外接收頭VS1838B簡介
工作電壓: 2.7V~5.5V
應用電路
外觀、封裝及尺寸
把接收頭面向自己,左邊為1腳,1腳OUT,2腳GND,3腳VCC。
應用場景
視聽器材(音箱、電視、錄影機、碟機)
家庭電器(冷氣機、電風扇、電燈)
其他紅外線遙控產(chǎn)品
編碼標準
紅外接收頭的型號有很多HS0038、VS1838B等,功能大致相同,只是引腳封裝不同。
紅外接收有幾種統(tǒng)一的編碼方式,采樣哪種編碼方式取決于遙控器使用的芯片,接收頭收到的都是一樣的。
電視遙控器使用的是專用集成發(fā)射芯片來實現(xiàn)遙控碼的發(fā)射,通常彩電遙控信號的發(fā)射,就是將某個按鍵所對應的控制指令和系統(tǒng)碼(由0和1組成的序列),調制在38KHz的載波上,然后經(jīng)放大、驅動紅外發(fā)射管將信號發(fā)射出去。
不同公司的遙控芯片,采樣的遙控碼格式也不一樣,較普遍的有兩種,一種NEC標準,一種是PHILIPS標準。
NEC標準:
當某個鍵按下時,系統(tǒng)首先發(fā)射一個完整的全碼,如果按鍵超過108ms仍未松開,接下來發(fā)射的代碼(連發(fā)代碼)將由起始碼(9ms)和結束碼(2.5ms)組成。
一個完整的全碼 = 引導碼 +用戶碼 +用戶碼 + 數(shù)據(jù)碼 + 數(shù)據(jù)反碼。
其中,引導碼高電平9ms,低電平4.5ms;
用戶碼和數(shù)據(jù)碼共32位;其中前16位為用戶識別碼,能區(qū)別不同的紅外遙控設備,以防止不同的機種遙控碼互相干擾。
后16位數(shù)據(jù)碼為8位的操作碼和8位的操作反碼,用于核對數(shù)據(jù)是否接收準確。
接收端根據(jù)數(shù)據(jù)碼的不同做出相應的動作。
連發(fā)代碼是在持續(xù)按鍵時發(fā)送的碼。它告知接收端。某鍵是在被連續(xù)的按著。
PHILIPS標準: 邏輯“0”和邏輯“1”的定義。
我們使用的遙控器模塊使用的是NEC標準,當我們點擊紅外遙控器上第一個按鍵Ch- 時,用示波器測量VS1838B的OUT引腳,示波器中抓取的信號如下:
我們可以看出跟下圖標準的NEC協(xié)議的典型脈沖鏈的定義是一致的:
上圖為NEC協(xié)議的典型脈沖鏈。協(xié)議規(guī)定低位首先發(fā)送。
首先發(fā)送9ms+4.5ms的引導碼,接下來是兩字節(jié)用戶碼,第三字節(jié)是數(shù)據(jù)碼(按鍵碼),用來判斷按鍵值,第四字節(jié)是數(shù)據(jù)反碼,可以用來校驗,提高按鍵的準確性。
注意:
我們會發(fā)現(xiàn)上面兩個圖中波形的高低電平
實際上是相反的,因為紅外接收頭將38K載波信號過濾,接收到的波形剛好與發(fā)射波形相反。
難點:數(shù)據(jù)0和1的判斷:
所謂的解碼就是一個區(qū)分脈沖寬度的過程。紅外信號的“0”和“1”是通過脈沖持續(xù)時間的長短來區(qū)分的,NEC標準的“0”和“1”的定義如下:
引導碼:9ms 的載波+4.5ms 的空閑。
比特值“0”:560us 的低電平+560us 的高電平。
比特值“1”:560us 的低電平+1.68ms 的高電平。
VS1838B 這個紅外一體化接收頭,當收到有載波的信號的時候,會輸出一個低電平,空閑的時候會輸出高電平。
數(shù)據(jù)處理流程如下圖所示:
結果展示
接線
與VS1838B連接:
紅外接收頭的OUT引腳連接PA7
VCC連接3.3V
GND接地
與USB轉TTL串口相連: 用于打印調試信息
USB轉TTL串口的TXD與核心板的PA10相連
USB轉TTL串口的RXD與核心板的PA9相連
USB轉TTL串口的VCC與3V3跳線短接
鍵碼值輸出
按紅外遙控的各個按鍵,串口打印輸出各個按鍵值如下:
對紅外遙控器鍵碼值整理如下:
下面視頻中抓取的是第一個按鍵的脈沖信號:
我們通過觀察視頻發(fā)現(xiàn)它的四個字節(jié)的數(shù)據(jù)如下:
00000000 11111111 10100010 01011101
其中:
頭兩個字節(jié)00000000 11111111,即用戶碼,值為:0x00FF;
第三個字節(jié)就是Command命令字,10100010,這個數(shù)字對應十進制就是162,對應16進制就是0xA2。
一般我們就利用第三個字節(jié)的值,進行不同的功能定義。
第四字節(jié)01011101,可以看出與第三字節(jié)10100010互為反碼。
但是我們通過上面NEC編碼部分的介紹可知,NEC協(xié)議規(guī)定低位首先發(fā)送。所以上面打印輸出的162(10100010),需要高低位反過來,即第一個按鍵的二進制真實編碼為:01000101,即十六進制的0x45。
我們將所有的按鍵重新計算,所有編碼就能夠得到網(wǎng)上的按鍵編碼圖了。
其實我們只要每個按鍵能準確得到一個不同鍵碼值,然后程序中根據(jù)不同值,執(zhí)行不同流程即可,對于“CH-”鍵碼值是162還是0x45,其實對功能的實現(xiàn)沒有影響。
推薦閱讀:
STM32單片機最小系統(tǒng)詳解
STM32F103 串口的使用方法
STM32中精確延時函數(shù)的實現(xiàn)
基于STM32固件庫的MDK5工程建立
修改Keil工程名稱并添加其他模塊文件
利用STM32F103C8T6最小系統(tǒng)板點亮流水燈
從六月份開始,每個月會制作一個畢業(yè)設計難度的DIY作品,
前期作品以模塊組合的形式搭建,降低門檻,方便大家一起跟著做;
DIY過程只在微信公眾號中分享,大家沒關注的,趕緊關注哈。
每個月時間大致安排:
上個月25號,公布DIY作品名稱;
每月1日公布作品功能點及所需要的功能模塊鏈接;
每月10日前繪制完模塊配合的線路板;
每月15日之前硬件搭建完畢,之后按模塊撰寫代碼,調試,隨時公眾號更新進展;
每月月底開源整個作品的源碼和PCB工程文件。
題目選取原則:
公眾號每個月20日發(fā)起投票,25號截止,票數(shù)最多的作為下個月的DIY內(nèi)容;
投票的備選項大家可以后臺留言給我,我會選出五種留言最多的作為選項;
每個月的DIY內(nèi)容盡量與上個月分享的文章有一定的相關度,起到溫故知新的作用。
有什么想法或者建議,后臺留言給我哈。
免責聲明:本文內(nèi)容由21ic獲得授權后發(fā)布,版權歸原作者所有,本平臺僅提供信息存儲服務。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!