【SBUS】一文看懂SBUS协议

慈云数据 2024-04-23 技术支持 92 0

【STM32】STM32单片机总目录

1、简介

S.BUS是一个串行通信协议,S.BUS是FUTABA提出的舵机控制总线

S.bus使用RS232C串口的硬件协议作为自己的硬件运行基础。 使用TTL电平,即3.3V。 使用负逻辑,即低电平为“1”,高电平为“0”。 波特率:100000(100k),注意:不兼容波特率115200。

2、硬件电路

硬件取反电路如下,实际上就是一个很简单的三极管电路。Sbus的信号从基极输入,从集电极输出。基极输入 ‘0’,集电极上拉输出 ‘1’;基极输入 ‘1’,三极管导通,输出被拉低为 ‘0’,实现了反向。

在这里插入图片描述

或者

在这里插入图片描述

3、协议格式

协议帧很简洁,一帧包括25字节数据

首部(1字节)+ 数据(22字节)+ 标志位(1字节)+ 结束符(1字节)
首部:起始字节 =0000 1111b (0x0f)
数据:22 字节的数据,分别代表16个通道的数据,也即是每个通道的值用了 11 位来表示,22x8/16 = 11
	这样,每个通道的取值范围为 0~2047,低位在前、高位在后
标志位:1字节,高四位从高到低依次表示:
	bit7:CH17数字通道
	bit6:CH16数字通道
	bit5:帧丢失(Frame lost)
	bit4:安全保护(Failsafe):失控保护激活位(0x10)判断飞机是否失控
	bit3~bit0:低四位不用
结束符:0x00

4、协议解析

4.1 解析方法

将数据解析为通道的方法

在这里插入图片描述

4.2 示例一

void Sbus_Data_Count(uint8_t *buf)
{
	CH[ 0] = ((int16_t)buf[ 2] >> 0 | ((int16_t)buf[ 3] > 3 | ((int16_t)buf[ 4] > 6 | ((int16_t)buf[ 5]  1 | ((int16_t)buf[ 7] > 4 | ((int16_t)buf[ 8] > 7 | ((int16_t)buf[ 9]  2 | ((int16_t)buf[11] > 5 | ((int16_t)buf[12]  6 | ((int16_t)buf[16]  1 | ((int16_t)buf[18] > 4 | ((int16_t)buf[19] > 7 | ((int16_t)buf[20]  2 | ((int16_t)buf[22] > 5 | ((int16_t)buf[23] 
微信扫一扫加客服

微信扫一扫加客服

点击启动AI问答
Draggable Icon