全國(guó)統(tǒng)一服務(wù)熱線
400-108-3569
今日大家來(lái)一起學(xué)習(xí)遙控器普遍通信協(xié)議S-BUS的分析方式。S-BUS實(shí)際上是一種串口通訊協(xié)議,選用100000的波特率,數(shù)據(jù)位點(diǎn)8bits,終止結(jié)構(gòu)域2bits,偶驗(yàn)證,即8E2的串口通訊??墒荢-BUS選用的是反向脈沖信號(hào)傳送,換句話說(shuō),在S-BUS的推送端高低電頻是反向的,協(xié)議中的全部高電平都被轉(zhuǎn)化成低電頻,協(xié)議中的全部低電頻都被轉(zhuǎn)化成高電平。因此在S-BUS的協(xié)調(diào)器必須提升一個(gè)多少電 ** 向器來(lái)開(kāi)展電 ** 轉(zhuǎn),如下圖:
事實(shí)上,大家采用的Pixhawk飛控板上早已集成化了這一反向器,因此針對(duì)應(yīng)用Pixhawk的客戶而言,可以忽視掉S-BUS的反向體制,可是針對(duì)其他沒(méi)有集成化S-BUS反向器的硬件系統(tǒng)上,就必須使用人提升一個(gè)反向器來(lái)解決數(shù)據(jù)信息,不然將沒(méi)法載入?yún)f(xié)議數(shù)據(jù)信息。
此外,100000的波特率并并不是規(guī)范的波特率,這在一些只適用規(guī)范波特率的系統(tǒng)軟件上沒(méi)法完成,好在Nuttx適用自定的波特率,我們可以根據(jù)對(duì)機(jī)器設(shè)備連接點(diǎn)的配備完成波特率的設(shè)置。在Pixhawk IO上,S-BUS系統(tǒng)總線的機(jī)器設(shè)備連接點(diǎn)為/dev/ttyS2,因此我們可以撰寫(xiě)一個(gè)程序流程對(duì)這一串口通信連接點(diǎn)的波特率開(kāi)展配備:
設(shè)定好波特率就可以對(duì)標(biāo)準(zhǔn)文件機(jī)器設(shè)備開(kāi)展載入了,也就是根據(jù)read()函數(shù)公式來(lái)載入串口通信之中的數(shù)據(jù)信息。S-BUS協(xié)議在傳送流程中也有2種不一樣的傳送方式:
1)快速方式:數(shù)據(jù)信息推送周期時(shí)間為4ms,推送頻率為250Hz;
2)低速檔方式:數(shù)據(jù)信息推送周期時(shí)間為14ms,推送頻率為71.4Hz。
S-BUS協(xié)議數(shù)據(jù)類(lèi)型如下所示:
必須留意的是S-BUS選用11bits來(lái)表明一個(gè)遙控器通道的數(shù)值,22個(gè)字節(jié)數(shù)就可以表明16通道(8 × 22 = 11 ×16)。11個(gè)bit可以表示的數(shù)值范疇為0~2047。例如:大家的遙控器前4個(gè)通道數(shù)值各自為200、300、400和500,其他通道都為0。他們的二進(jìn)制數(shù)據(jù)信息各自為:
200: 000 1100 1000
300: 001 0010 1100
400: 001 1001 0000
500: 001 1111 0100
其他通道都為:0
S-BUS的16個(gè)遙控器通道,每一個(gè)通道用11個(gè)bit表明,那麼這16個(gè)通道的二進(jìn)制數(shù)值拼湊起來(lái)則為:
0001 1001 0000 0100 1011 0000 1100 1000 0001 1111 0100
[0F] 19 04 B0 C8 1F 40 …… 00 [00]
事實(shí)上遙控器推送每一個(gè)通道的數(shù)值在200~1800中間,用于表明遙控器通道的全部數(shù)值。可是PX4飛控程序流程中合理的通道值范疇通常是1000~2000,因此就必須將初始數(shù)值開(kāi)展一次變換。下面大家就來(lái)撰寫(xiě)S-BUS協(xié)議分析的驅(qū)動(dòng)軟件:
自然,大家必須在驅(qū)動(dòng)軟件中運(yùn)行一個(gè)進(jìn)程來(lái)載入并分析S-BUS協(xié)議,此過(guò)程將應(yīng)用循環(huán)系統(tǒng)的方法讀取int ** us_read_parse(int _fd, uint16_t *val)函數(shù)公式,以后將val二維數(shù)組中的內(nèi)容應(yīng)用input_rc.msg信息公布到uORB系統(tǒng)總線上為其他過(guò)程所應(yīng)用。
上一篇:功能原理是什么?