關(guān)注+星標(biāo)公眾號(hào),不錯(cuò)過精彩內(nèi)容
轉(zhuǎn)自 | 硬件十萬(wàn)個(gè)為什么
關(guān)于遙控器與無(wú)人機(jī)的通信協(xié)議也有很多種,常見的數(shù)據(jù)協(xié)議如下:
1.pwm:
需要在接收機(jī)上接上全部pwm輸出通道,每一個(gè)通道就要接一組線,解析程序需要根據(jù)每一個(gè)通道的pwm高電平時(shí)長(zhǎng)計(jì)算通道數(shù)值。
2.ppm:
按固定周期發(fā)送所有通道pwm脈寬的數(shù)據(jù)格式,一組接線,一個(gè)周期內(nèi)發(fā)送所有通道的pwm值,解析程序需要自行區(qū)分每一個(gè)通道的pwm時(shí)長(zhǎng)。
3.sbus:
每11個(gè)bit位表示一個(gè)通道數(shù)值的協(xié)議,串口通信,但是sbus的接收機(jī)通常是反向電平,連接到無(wú)人機(jī)時(shí)需要接電平反向器,大部分支持sbus的飛行控制板已經(jīng)集成了反向器,直接將以舊換新機(jī)連接到飛行控制器即可。
4.xbus:
常規(guī)通信協(xié)議,支持18個(gè)通道,數(shù)據(jù)包較大,串口通信有兩種模式,可以在遙控器的配置選項(xiàng)中配置。接收機(jī)無(wú)需做特殊配置。
SBUS本質(zhì)是一種串口通信協(xié)議,采用100K的波特率,8位數(shù)據(jù)位,兩位停止位,偶效驗(yàn),即8E2的串口通信。
SBUS是一bai個(gè)接收機(jī)串行總線du輸出,通過這根總線,可以獲得遙控器上所有zhi通道的數(shù)據(jù)。目前很多模型及無(wú)人機(jī)電子設(shè)備都支持SBUS總線的接入。使用SBUS總線獲取通道數(shù)據(jù),效率高的,而且節(jié)省硬件資源,只需要一根線即可獲取所有通道的數(shù)據(jù)。
SBUS總線使用的是TTL電平的反向電平,即標(biāo)準(zhǔn)TTL中的1取反為0,而0則取反為1,串口波特率為100000,數(shù)據(jù)位為8位,2個(gè)停止位,偶校驗(yàn)。
SBUS一幀數(shù)據(jù)的長(zhǎng)度為25個(gè)字節(jié),其中第"0"個(gè)字節(jié)為幀頭:0x0f;第24個(gè)字節(jié)為幀尾:0x00;從第1個(gè)字節(jié)到第22個(gè)字節(jié)為1-16號(hào)比例通道的數(shù)據(jù)字節(jié);第23字節(jié)中,第7位為數(shù)字開關(guān)通道17通道,第6位為數(shù)字開關(guān)通道18通道。
第5位為幀狀態(tài)標(biāo)志為(判斷是否丟幀),用于控制接收機(jī)上的LED的狀態(tài),第4位為失控保護(hù)激活標(biāo)志位,此位為1時(shí),表示接收機(jī)進(jìn)入失控保護(hù)狀態(tài)。
1.SBUS采用負(fù)邏輯
,所以無(wú)論接收還是發(fā)送都要進(jìn)行硬件取反(注意,一定要硬件取反),電路如下
這是我在網(wǎng)上看資料時(shí)看到的電路,實(shí)際上我用的是7404電路
就是說每間隔4或者14ms這個(gè)串口就發(fā)送25個(gè)字節(jié)的數(shù)據(jù),這25個(gè)字節(jié)的數(shù)據(jù)最多可以包含16個(gè)信息
3.100K的波特率不是標(biāo)準(zhǔn)波特率
,一般串口工具都不能直接讀?。ㄋ圆灰苯佑秒娔X調(diào)試,除非你的電腦寫好了非標(biāo)準(zhǔn)串口),可以用單片機(jī)讀取。
?[數(shù)據(jù)頭] [第一個(gè)字節(jié)] [第二個(gè)字節(jié)] ......[第二十二的字節(jié)] [標(biāo)志位] [數(shù)據(jù)尾]
數(shù)據(jù)頭、標(biāo)志位、數(shù)據(jù)尾 不攜帶信息,而且數(shù)據(jù)頭和數(shù)據(jù)尾是固定的,數(shù)據(jù)頭=0x0f; 數(shù)據(jù)尾=0x00;?
數(shù)據(jù)頭(1字節(jié))+數(shù)據(jù)(22字節(jié))+標(biāo)志位(1字節(jié))+數(shù)據(jù)尾(1字節(jié))
一個(gè)信息是二進(jìn)制的11bit,比如1111 1111 111就可以表示一個(gè)信息,一共16個(gè)這樣的信息,按照順序?qū)⑦@16個(gè)信息依次排成一串,得到一個(gè)176bit(11 *16)的數(shù)據(jù),也就是22字節(jié)(176 / 8 = 22)的數(shù)據(jù),再加上數(shù)據(jù)頭數(shù)據(jù)尾校驗(yàn)位就組成了一個(gè)要通過串口傳送的信息。每隔4或者14ms就傳送一個(gè)這樣的信息。
所以這16個(gè)信息每一個(gè)所能表示的最大值是2^11 = 2048,也就是他的精度。
標(biāo)志位的高四位有特殊含義,第四位并沒有使用,依照我的理解,第七位和第六位表示兩個(gè)數(shù)字通道(通道17和18)信息(就是只有高低電平的通道,一般用來控制通斷或者某個(gè)電機(jī)簡(jiǎn)單的啟動(dòng)或者停止,比如1表示啟動(dòng)電機(jī)0表示停止電機(jī)),第五位表示幀丟失,接收機(jī)紅色LED亮起,我的理解是,如果這一位為1,表示這一幀信號(hào)出問題了,接收機(jī)紅色LED亮起。
第四位表示故障保護(hù)激活,意思應(yīng)該是說如果這一位為1,激活接受方故障保護(hù)。
bit7 = ch17 = digital channel (0x80)
bit6 = ch18 = digital channel (0x40)
bit5 = Frame lost, equivalent red LED on receiver (0x20)
bit4 = failsafe activated (0x10)
bit3 = n/a
bit2 = n/a
bit1 = n/a
bit0 = n/a
------------?END?------------
Keil MDK如何將變量存儲(chǔ)在指定內(nèi)存地址
幾款優(yōu)秀的支持C、C++等多種語(yǔ)言的在線編譯器
關(guān)注
微信公眾號(hào)『strongerHuang』,后臺(tái)回復(fù)“1024”查看更多內(nèi)容,回復(fù)“加群”按規(guī)則加入技術(shù)交流群。
長(zhǎng)按前往圖中包含的公眾號(hào)關(guān)注
點(diǎn)擊“
閱讀原文
”查看更多分享,歡迎點(diǎn)分享、收藏、點(diǎn)贊、在看。
免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場(chǎng),如有問題,請(qǐng)聯(lián)系我們,謝謝!