SBUS 总线(Serial‑Bus)完整详解
SBUS 是 Futaba 推出的航模 / 机器人遥控数字串行总线,接收机通过1 根信号线 + GND传输全部遥控器通道数据,广泛用于无人机、移动机器人、云台舵机、ROS 机器人底层 STM32 单片机接收遥控手柄信号。 对比传统 PWM:PWM 每一路通道需要一根线;SBUS 单根线输出 16 路比例通道,布线简单、抗干扰更强。
一、物理层 & 串口关键参数(极易踩坑)
SBUS 底层基于 UART(单片机一侧使用Uart RX通信, 传输一个个独立的字符),但不是普通TTL‑UART,核心坑点:负逻辑(信号反相)
表格
| 项目 | 参数 |
|---|---|
| 波特率 | 100000 bps(100k),不是 115200 |
| 帧格式 | 8E2:8 数据位,偶校验 Even,2 停止位 |
| 电平 | TTL 3.3V/5V,反向逻辑:物理低电平 = 逻辑 1;物理高电平 = 逻辑 0。这是关键!!! |
| 帧周期 | 普通模式 10ms (100Hz);高速模式 4ms (250Hz) |
⚠️重点:信号反向,STM32 普通 UART 直接读取 SBUS 信号会全部乱码。 三种解决反相的方案:
- 硬件反相电路:三极管 NPN、74HC04 反相芯片,把信号翻转成正常 TTL 给 MCU 的 RX 引脚。
- STM32 串口硬件反相寄存器(部分芯片支持 USART_CR1 bit20 INVERT),软件内部自动翻转电平,不需要外部元件。
- 绝对不推荐软件取反:时序紧张,极易丢帧。
很多成品飞控已经板载反相电路,接收机 SBUS 输出可以直连;
自己做 STM32 底板必须处理反相。
二、帧结构:固定 25 字节一帧
plaintext
Byte0 | Byte1‑22 | Byte23(标志位) | Byte24 0x0F(帧头) | 16通道数据 | Flag | 0x00(帧尾)- Byte0 = 0x0F,固定帧头,用于帧同步。
- Byte1~Byte22(共 22 字节):存放 CH1‑CH16,每个通道11bit。
- 16×11bit = 176bit = 22 字节;bit 打包存储,不是每个通道占一个字节。
- 通道数值范围:0 ~ 2047;遥控器摇杆常用有效区间:350 ~ 1700,中间点约 1024GitHub。
- Byte23 标志字节 Flag
- bit0:CH17(数字开关)
- bit1:CH18(数字开关)
- bit2:Frame Lost,1 = 丢帧(遥控信号变差)
- bit3:Failsafe,1 = 接收机进入失控保护模式(非常重要,机器人底层要检测这个位,触发急停)CSDN博...
- Byte24 = 0x00,帧尾。
注意:SBUS 只有每字节 UART 硬件偶校验,没有全局 CRC 校验,没有帧校验和,依靠帧头 0x0F 做同步,所以硬件信号质量很关键。
三、SBUS vs PWM vs PPM 对比
表格
| 项目 | PWM 单路 | PPM | SBUS |
|---|---|---|---|
| 布线 | 每通道一根信号线 | 单根线 | 单根信号线 + GND |
| 通道上限 | 由接收机输出口数量决定 | 最多 8‑10 通道 | 16 路比例 + 2 路数字开关 |
| 信号类型 | 模拟脉宽信号 | 模拟脉冲 | 数字串行 UART(反相) |
| 单片机资源 | 多路定时器输入捕获 | 定时器捕获 | 1 路 UART 串口 |
| 抗干扰 | 差 | 中等 | 优秀 |
| 刷新周期 | 20ms | ~20ms | 10ms /4ms 高速模式 |
机器人开发选型:底层 STM32 读取遥控器,优先使用 SBUS,节省 IO 口。
解析得到 16 个通道值,可以转发给 ROS2(例如映射为
/joy手柄话题)。
四、STM32 工程开发要点(实操)
- 串口配置:波特率严格 100000,模式 8E2;时钟源必须 HSE 外部晶振,HSI 内部 RC 时钟分频误差大,会导致偶校验出错、丢帧。
- 接收方式:空闲中断 + DMA 接收 25 字节,检测帧头
0x0F做帧同步。 - 解析:对 Byte1‑Byte22 做位解包,取出 16 个 11bit 通道。
- 安全逻辑必做:检测 Flag 字节 Failsafe 位,如果置 1,机器人立刻急停,禁止执行运动输出。
- 电平注意:接收机输出如果是 5V SBUS,不能直接接到只支持 3.3V 的 STM32 RX,需要分压 / 反相电路做电平转换,防止烧坏 MCU 引脚CSDN博...。
五、典型故障现象
- 串口收到大量乱码,找不到 0x0F 帧头
- 排查:反相电路有没有接、极性是否正确;波特率 100k,偶校验 2 停止位。
- 偶尔能解析一帧,大部分帧错位
- 排查:系统时钟精度不够;信号线过长,缺少滤波。
- 遥控器断电,机器人不会停机
- 排查:代码没有解析 Byte23 的 Failsafe 失控保护标志位。
六、机器人系统数据流(STM32 底层 → ROS2 上层)
plaintext
遥控接收机 → SBUS(反相UART) → 反相电路 → STM32的UART RX STM32解析得到CH1‑CH16通道数值 ↓ ①底层:直接控制电机舵机; ②通过串口 / CAN把通道数据向上发给RDK/X5等机器人主控 ↓ ROS2层封装为joy消息,发布`/joy`话题,上层控制算法订阅,实现手柄遥控机器人。补充拓展:i‑BUS / CRSF
- SBUS:Futaba 标准;
- i‑BUS:乐迪等接收机,正相 UART,不需要反相电路;
- CRSF(ELRS):新一代遥控协议,带 CRC 校验,更高刷新率,双向回传接收机电压信号。