這裡記錄過去一週,我看到的值得分享的東西,每週五發布
紅外誤碼問題分析
目前開發的產品是帶Qt介面的,所以作為一款視覺化控制產品,遙控器是必不可少的,前段時間正好除錯了遙控器與紅外接收模組,現總結下遇到的紅外誤碼問題分析解決過程。
分析思路分為兩個方向,一是懷疑紅外模組出來的訊號是正確的,但是過了板卡電路後訊號改變,造成CPU判讀錯誤;第二個懷疑點是紅外模組本身問題,解碼紅外訊號異常。下面分兩個方向,並借用示波器抓取訊號進行分析。
1、判斷是否板卡電路引起的問題
在D121晶片TX1_M_UART2_RX處連線一個示波器測量點,這個晶片的作用是將紅外模組TTL 5V電平轉換為3.3V電平,然後接入到TX1晶片UART2介面進行讀取。
在紅外模組TXD接另外一個示波器測量點。然後比較出錯時兩個訊號的差異性。
測試結果如下:
TX1串列埠程式列印接收資料,正常資料是0x407F80,異常資料0x507F80。
串列埠資料對應的示波器訊號,黃色訊號是紅外模組直出訊號,粉紅色是經過D121的轉換訊號。
放大來看正常與異常資料的區別:
正常訊號:0x407F80
異常訊號:0x507F80
從圖中可以看出,標紅處多了一個1訊號,解析錯了,但是紅外模組解碼資料與D121出來的訊號是一直的,所以可以得出結論,錯誤不是後端板卡引入的,而是從紅外模組出來的資料就已經錯了
2、紅外模組本身有問題
兩個測量點,一個接在解碼輸出TXD上,另外一個接在P3.3紅外脈衝接收入口。
傳送6組資料,其中第4組0x577FA0解析錯誤,正確值是0x577F80,也是1個bit的錯誤
粉紅是紅外脈衝訊號,黃色是解碼訊號,一共6組資料。
正常的TTL訊號,0x577F80
異常的訊號 0x577FA0
正常脈衝
異常脈衝訊號,兩個脈衝訊號乍一看上去好像一樣,但是仔細觀察發現左面有一個空閒訊號稍稍有點寬(標紅處),放大來看:
再放大
明顯這個脈衝訊號的空閒比較寬,結合脈衝編碼的原理:
引導碼:9ms 的載波+4.5ms 的空閒。
位元值“0”:560us 的載波+560us 的空閒。
位元值“1”:560us 的載波+1.68ms 的空閒。
這個脈衝應該判定為1了,也就是說紅外脈衝訊號就不是很嚴格,不穩定造成了微控制器誤判。
所以最後的結論是遙控器紅外脈衝訊號間隔並不嚴格準確造成的最終解碼錯誤。
三次測試遙控器誤位元速率分別是1%,2%,1%,每次測試按同樣按鍵100次。