良许Linux教程网 干货合集 SBUS协议及编解码

SBUS协议及编解码

关于遥控器和无人机的通信协议,有很多种不同的选择。下面是一些常见的数据协议:

  1. PWM: 这种协议需要在接收机上连接所有的 PWM 输出通道,每个通道需要连接一组线缆。解析程序需要根据每个通道的 PWM 高电平时长来计算通道数值。

  2. PPM: PPM 协议按照固定的周期发送所有通道的 PWM 脉宽数据格式。只需要一组线缆,在一个周期内发送所有通道的 PWM 值。解析程序需要自行区分每个通道的 PWM 时长。

  3. SBUS: SBUS 协议使用串口通信,每11位表示一个通道的数值。需要注意的是,SBUS 接收机通常是使用反向电平,所以连接到无人机时需要接上电平反向器。大部分支持 SBUS 的飞行控制板已经集成了反向器,只需将旧的接收机连接到飞行控制器即可。

  4. XBUS: XBUS 是一种常规通信协议,支持多达18个通道。数据包较大,使用串口通信,并且有两种模式可以在遥控器的配置选项中设置。接收机无需进行特殊配置。

image-20231204210543810
image-20231204210543810

SBUS协议说明

SBUS本质是一种串口通信协议,采用100K的波特率,8位数据位,两位停止位,偶效验,即8E2的串口通信。

SBUS是一bai个接收机串行总线du输出,通过这根总线,可以获得遥控器上所有zhi通道的数据。目前很多模型及无人机电子设备都支持SBUS总线的接入。使用SBUS总线获取通道数据,效率高的,而且节省硬件资源,只需要一根线即可获取所有通道的数据。

SBUS总线使用的是TTL电平的反向电平,即标准TTL中的1取反为0,而0则取反为1,串口波特率为100000,数据位为8位,2个停止位,偶校验。

SBUS一帧数据的长度为25个字节,其中第”0″个字节为帧头:0x0f;第24个字节为帧尾:0x00;从第1个字节到第22个字节为1-16号比例通道的数据字节;第23字节中,第7位为数字开关通道17通道,第6位为数字开关通道18通道。

第5位为帧状态标志为(判断是否丢帧),用于控制接收机上的LED的状态,第4位为失控保护激活标志位,此位为1时,表示接收机进入失控保护状态。

值得注意的有三点:

1.SBUS采用负逻辑,所以无论接收还是发送都要进行硬件取反(注意,一定要硬件取反),电路如下

image-20231204210539733
image-20231204210539733

这是我在网上看资料时看到的电路,实际上我用的是7404电路

2.SBUS有两种模式,

a.高速模式:每4ms发送一次

b.低速模式:每14ms发送一次

就是说每间隔4或者14ms这个串口就发送25个字节的数据,这25个字节的数据最多可以包含16个信息

3.100K的波特率不是标准波特率,一般串口工具都不能直接读取(所以不要直接用电脑调试,除非你的电脑写好了非标准串口),可以用单片机读取。

具体协议的格式

[数据头] [第一个字节] [第二个字节] ……[第二十二的字节] [标志位] [数据尾]

数据头、标志位、数据尾 不携带信息,而且数据头和数据尾是固定的,数据头=0x0f; 数据尾=0x00;

数据头(1字节)+数据(22字节)+标志位(1字节)+数据尾(1字节)

编码解码

1.编码原理

一个信息是二进制的11bit,比如1111 1111 111就可以表示一个信息,一共16个这样的信息,按照顺序将这16个信息依次排成一串,得到一个176bit(11 *16)的数据,也就是22字节(176 / 8 = 22)的数据,再加上数据头数据尾校验位就组成了一个要通过串口传送的信息。每隔4或者14ms就传送一个这样的信息。

所以这16个信息每一个所能表示的最大值是2^11 = 2048,也就是他的精度。

2.标志位

标志位的高四位有特殊含义,第四位并没有使用,依照我的理解,第七位和第六位表示两个数字通道(通道17和18)信息(就是只有高低电平的通道,一般用来控制通断或者某个电机简单的启动或者停止,比如1表示启动电机0表示停止电机),第五位表示帧丢失,接收机红色LED亮起,我的理解是,如果这一位为1,表示这一帧信号出问题了,接收机红色LED亮起。第四位表示故障保护激活,意思应该是说如果这一位为1,激活接受方故障保护。

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

以上就是良许教程网为各位朋友分享的Linu系统相关内容。想要了解更多Linux相关知识记得关注公众号“良许Linux”,或扫描下方二维码进行关注,更多干货等着你 !

137e00002230ad9f26e78-265x300
本文由 良许Linux教程网 发布,可自由转载、引用,但需署名作者且注明文章出处。如转载至微信公众号,请在文末添加作者公众号二维码。
良许

作者: 良许

良许,世界500强企业Linux开发工程师,公众号【良许Linux】的作者,全网拥有超30W粉丝。个人标签:创业者,CSDN学院讲师,副业达人,流量玩家,摄影爱好者。
上一篇
下一篇

发表评论

联系我们

联系我们

公众号:良许Linux

在线咨询: QQ交谈

邮箱: yychuyu@163.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部