如何更改、改变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”等。

发布了21 篇原创文章 · 获赞 12 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/fgh00000/article/details/104767253
今日推荐