用微處理器I/O口控制紅外接收設備
紅外遙控是一種無線、非接觸控制技術,具有抗干擾,電路簡單,容易編碼和解碼,功耗小,成本低等優點,幾乎適用于所有家電的控制,并越來越多地應用到計算機系統中。出于項目需要,要對一個內部程序未知的設備實現控制,我們把設備自帶的紅外接收頭作為切入點。
本文引用地址:http://www.ex-cimer.com/article/142182.htm項目使用的是GOSSAT(高斯賽特)的GSR—S80 S型數字衛星接收機,設備配套有一個遙控器,單憑外觀無法知道它所使用紅外協議的種類,如果有示波器的話,就可以捕捉信號波形并進行分析。
紅外接收頭的種類很多,引腳定義也不相同,一般都有三個引腳,包括供電腳,接地和信號輸出腳。常見的接收頭型號有0038和1838。從外形上看,項目用的接收機使用的是0038接收頭。
項目使用的是ATTEN(安泰信)的ADS-1102C數字示波器。把接收頭的信號輸出腳和地腳引出來,接入示波器,捕捉波形時建議用25ms/div的時間間隔比較方便,之后再放大到2.5ms/div進行查看和分析。鑒定遙控器有沒輸出信號的小技巧,打開手機的拍照功能,對著遙控器的紅外發射管,此時按下遙控器上任意一個鍵,如果手機屏幕上能看到發射管發出了紅紫光,說明遙控器是正常的。
經過分析捕捉到的波形得知,項目所用接收機采用的是NEC紅外協議。查閱NEC協議的資料,其特征如下:
(1)8位地址和8位指令長度;
(2)地址和命令2次傳輸(確??煽啃?;
(3)PWM脈沖位置調制,以發射紅外載波的占空比代表“0”和“1””;
(4)載波頻率為38kHz;
(5)位時間為1.125ms或2.25ms;
NEC碼的位定義:一個脈沖對應560μs的連續載波,一個邏輯1傳輸需要560μs脈沖+1680μs低電平,一個邏輯0的傳輸需要560μs脈沖+560μs低電平。而遙控接收頭在收到脈沖的時候為低電平,在沒有脈沖的時候為高電平,這樣,我們在接收頭端收到的信號是反相的:邏輯1是560μs低+1680ms高,邏輯0是560μs低+560μs高。
NEC遙控指令的數據格式為:同步碼頭、地址碼、地址反碼、控制碼、控制反碼。同步碼由一個9ms的低電平和一個4.5ms的高電平組成,地址碼、地址反碼、控制碼、控制反碼均是8位數據格式。按照低位在前,高位在后的順序發送。采用反碼是為了增加傳輸的可靠性(可用于校驗)。
NEC碼規定的連發碼(由9ms低電平+2.5m高電平+0.56ms低電平+97.94ms高電平組成),發送完后40ms,遙控再發送一個9ms低,2ms高的脈沖,表示按鍵的次數,出現一次則表示只按下了一次,如果出現多次,則可以認為是持續按下該鍵。
知道協議之后,我們就可以進一步分析出遙控器的地址碼和各個按鍵的控制碼。項目所用接收機有點特殊,通過示波器去看,得出地址正碼是0xA1,地址反碼是0xDE,其余位都取反了,唯獨最高位都是1,這個不同于常規。
之后的控制碼,由于按鍵數量多,可以編寫一個紅外解碼程序來解出這些鍵值,之后再用示波器來抽檢幾個,用于保證解出來的控制碼的正確性,這是很關鍵的一步,不可小視。
之后就可以開始進行I/O的虛擬NEC工作了,項目采用STM32作為主控芯片,這里的功能只需要用到一個普通I/O,我們使用的是PA14。硬件上只需把PA14連接到紅外接收頭的信號輸出腳,地腳和STM32共地就可以了。
關于STM32的I/O設置說明,每個I/O口可以自由編程,單I/O口寄存器必須要按32位字被訪問。STM32的每個I/O端口都由7個寄存器來控制。其中CRL和CRH控制著每個I/O口的模式及輸出速率,對ODR賦值可以改變對應位I/O口的高低電平。
萬能遙控器相關文章:萬能遙控器代碼
評論