在STM32上对EV1527等无线编码格式的C程序编码实现
測調 西安.老雷子 2020年6月1日
軟件平臺 WINDOWS Keil uVision,STM32 ST-LINK
硬件平臺 STM32S108C8B6 通用32開發板調試
發射端: 蜂鳥遠T1 輸入需要用MCU進行編碼,利于指定編碼
接收端: 蜂鳥靈R1 輸出有五種模式,其中模式5就是串口直接輸出編碼的
編碼模式 EV1527
一、 系統調試硬件結構說明
發射端硬件示意圖 接收端硬件示意圖
二、 如何對位進行編碼
先簡單了解一下編碼中如何把二進制體現出來,如下圖,芯片本身調制解調不是調整頻率而是采用調幅模式,換句話說,用發射和不發射的時長和間隔來體現是邏輯1還是邏輯0;如下,看懂這個邏輯關系也就注意到了后面發射的時候怎么編1的碼,怎么編0的碼了。
上面的對于1位的編碼按照從高位到低位順序連接起來,再在開始加上一個同步碼就完成了一個字節的傳輸,實現起來還是很方便的。
發射一個字節流程如下:
1、 發射同步:邏輯1持續1T然后邏輯0持續3T
2、 順序發射bit7、bit6、bit5、bit4、bit3、bit2、bit1、bit0(邏輯0和1按照上面規則)
三、 如何對一個發射碼進行編碼?
對于一個發射碼而言,按照EV1527的編碼規范,發送/接收的碼總共應該是8個字節,而這八個字節,并不是將上面單一字節內容直接拼接完成的。
例如編碼“80A7E40B”
字節 0x80 0xA7 0xE4 0x0B
順序 Z1 Z2 Z3 Z4 Z5 Z6 Z7 Z8
Bit數 4 4 4 4 4 4 4 4
值 8 0 A 7 E 4 0 B
上面4個字節,每個字節8位。但需要注意的是藍色部分(Z1Z5)是遙控器對碼時候用的內部編碼(對于遠R1自學習過程而言),總共2^20個也就是編碼規范中常說的百萬編碼,以此確保不會串碼;黃色部分(Z6)只有半個字節,但這4位才對應實際按鍵編碼,這個四位鍵盤編碼在標準用法中只有四個值(1,2,4,8),也可以擴展直接用115(0x01~0x0F)。綠色部分的字節在發射編碼的時候可以忽略不處理(芯片自己會生成一個校驗碼加上去的)
如果要完成80A7E40B代碼的發射,流程如下:
1、 準備一個緩沖區unsigned char Ask_send_buf[12]
2、 Ask_send_buf[0]=0x80;Ask_send_buf[1]=0xA7;Ask_send_buf[2]=0Xe4;
3、 Ask_send_buf[2]的低4位清零并給Ask_send_buf[2]加上鍵盤碼(1~15);
4、 發射Ask_send_buf[0]
5、 發射Ask_send_buf[1]
6、 發射Ask_send_buf[2]
7、 發射同步碼(這個過程在編碼規范里面是在前面的,但放在這個位置通訊更穩)
8、 暫停發射做一個發射間歇(一般有15毫秒合適)
上述實際上,按照通訊編碼規約,完成一個發射碼的過程必須要先后發送四次才符合1527的編碼規范,因此,需要將上述過程中4~8步驟重復4次接收端才能認可。
四、 調試注意事項
1、 硬件連接邏輯確認(前面給出的連接關系別搞錯線,注意所選用的模塊電壓不要出現燒片)
2、 如何確認發射端開始發碼?
無線模塊開始發射以后,由于無線433信號不依賴專用設備比較難以判斷是否已經發射,建議可采用其他無線設備檢查是否已經開始發射,可以用對講機將頻率調整為433MHz,發射端發碼時候會有明顯噪音出現。(凡帶有自學習功能的遙控器或者遙控模塊在未成功學習之前即使收到信號也沒反映的)
3、 如何確認發射碼正確?
接收端用靈R1模塊,在確認發射端發射時進入學習狀態進行學習,調整R1的輸出模式為第5模式,然后通過R1模塊自帶串口輸出功能將接受到的發射碼發送到上位機查看。(需要注意模塊接收的代碼會自動加上前置字符串“LC:”,還會有后面的通訊校驗字節)
4、 如何確認MCU的機器周期時鐘
不同的MCU和不同的時鐘配置,指令周期都可能不同,采用代碼延時(計時器更方便大家可自己移植)時,為了保證第一個時序圖中一個T的時間基本準確在400納秒,最好采用示波器來矯正正確的循環次數。
示波器不方便的時候,先搞個1分鐘或者幾分鐘的延時通過秒表來反向推算一下400納秒到底需要多少個等待周期;
五、 硬件照片
順手把丑陋的調試硬件照片發上來,看看這么簡單的連接就搞定了,還有,這無線模塊缺失做的太小了,紅色是靈R1,藍色帶螺旋天線的是遠T1你不小心估計都沒看到那個模塊,調試通過發現這對模塊真心好用,通訊非常穩定可靠。
順便看看我用的調試板背面,手動飛了兩根線,USB接口就直接可以SWD方式下載調試這個STM32的開發板了,比較方便。
六、 上位機接收到的代碼
調試過程中,靈R1模塊除了完成與串口通訊模塊的三根線連接之外,需要按照手冊進行對碼學習過程和輸出模式設置過程。標準9600的串口通訊,使用還是比較簡單的。
源代碼也給大家分享一下吧,免得朋友們走彎路啦
完整實現的代碼下載
總結
以上是生活随笔為你收集整理的在STM32上对EV1527等无线编码格式的C程序编码实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: iOS 地图与指南针使用方案
- 下一篇: 自锁6引脚开关连线