如何更改、改變SBUS的波特率,解碼SBUS讓單片機或電腦PC進行通訊

SUBS是一種純數字的控制協議,標準的sbus包含了18通道的舵機信號,能表示0-2048的舵機通量。什麼是舵機通量,就是舵機工作的PWM的信號,PWM就是一個脈寬的信號,一般用us來表示。正常的舵機的PWM信號範圍是1100us-1900us之間、400us-1900us。也有500us-2500us的,但比較少。基本無人機的多是前面兩種。那我們的sbus協議就是把18個PWM通道的數字信號首先進行壓縮編碼打包,再通過類串口(非正常的UART哦)的協議發出去。我們的單片機和電腦等的標準的UART設備是無法直接讀取sbus的信息,需要通過電平整形,波特率調整後才能順利讀取。

 SBUS的通訊波特率比較奇葩,100k,2停止位,偶校驗,7-15ms的幀率。這並非我們常用的波特率:4800,9600,38400,57600,115200等。而且2位的停止位,很多低端的單片機是不支持的。這就要求我們普通的串口要完成正常接收到sbus的就需要把sbus的通訊協議進行必要的修改,首先是把100k的波特率改成正常的波特率,把2位停止位改成1位停止位,如果覺得幀率過快的話,還需要把幀率降下來。

說到這裏,有人喜歡擡槓,說我試過可以通訊啊!  事實也是可以,但它只能在某種特定的場景下使用。最起碼需要一個強悍的CPU。爲什麼這麼說呢,這起碼要考慮下面幾個方面的問題。

1:通訊誤碼率的問題。還記得我們剛剛學51單片機的時候,我們用的晶振是11.0592M,32768K這些並非整數的值。我當時就很惱火,爲什麼不是11M,或者是12M呢。現在才明白,那是爲了串口通訊用的,只有這種頻率才能把串口通訊的誤碼率降到最低。所以就得出4800,9600這些常用的波特率。而相反,在不常用的波特率100k中,這些串口的通訊誤碼率就非常高了。而我們所有的串口設備,其實都是以常用波特率爲指標,在設計時就考慮到了,對非正常的波特率在設計的時候就不考慮其低誤碼率的問題了。也就是說,你可以通訊,但經常會發生數據錯誤。

2:sbus屬於壓縮的協議,你讀取到的數據並非每個通道的值。需要拆分,移位,拼接,運算等的複雜操作才能還原每個通道本來的值。而我們的飛控,主控,等都要求實時性要強,儘量的少佔用CPU資源來處理各種數學運算的時間。所以我們最好把這部分分給協處理器來做,飛控和主控直接讀出來就是能用的數值。

3:幀率問題,SBUS的幀率很快。每幀是25自己,間隔是7ms到15ms。這算是相當快的了。它的好處就是控制起來延時小(專業術語叫跟手)。壞處是需要的CUP比較高級,不然很難應付這麼高的中斷頻率。所以但凡用到SBUS的飛控,其MCU的性能都是槓槓的,但凡用到sbus的設備,價格都是昂貴的。所以要想在低速的MCU中使用。

上面的功能明白了,其實是可以自己做一個轉換模塊的,不過萬能的某寶,有現成的模塊直接就可以用了,網址就不給了,自己可以去搜索:“sbus轉換,sbus轉uart”等。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章