1. SBUS协议概述:什么是SBUS、SBUS的历史与起源、SBUS在无人机领域的地位

1.1 什么是SBUS?

SBUS,全称Serial Bus,说白了就是遥控器和飞控之间的一种串行通信协议。它由Futaba公司开发,专门用来传输遥控通道数据。

我刚开始接触SBUS时,第一反应是:这不就是个串口协议吗?嗯,确实底层是串口,但它有自己的帧结构。一个SBUS数据包能携带16个标准通道和2个数字通道,总共18个通道的信息。

它的物理层是反向串口,波特率100kbps,8位数据位,2位停止位,偶校验。这个配置在遥控领域很常见,但有个坑——信号是反相的。我记得第一次用示波器抓SBUS波形时,怎么都对不上,后来才发现需要加反相器。

核心特点:

  • 单线传输,只用一根信号线
  • 每个数据包25字节,传输时间约3ms
  • 更新频率高达200Hz(5ms一帧)
  • 支持16+2个通道

1.2 SBUS的历史与起源

SBUS最早出现在Futaba的遥控器上,大概是2010年左右。那时候主流遥控协议还是PWM和PPM。PWM每个通道需要一根线,8通道就要8根线,飞控上密密麻麻的排针,看着就头疼。

PPM虽然能一根线传8个通道,但精度和稳定性都不太理想。我在一个早期项目中用过PPM,信号抖动问题折腾了我整整一周。后来换成SBUS,问题迎刃而解。

Futaba推出SBUS的初衷很简单:用更少的线,传更多的通道,而且要有更高的可靠性。他们借鉴了工业串行总线的思路,但做了针对遥控场景的优化。

为什么会选择100kbps这个波特率?你想想看,16个通道,每个通道11位精度,加上同步头、标志位、校验位,算下来刚好25字节。100kbps下传输25字节大约2ms,留1ms余量,正好满足200Hz的刷新率。这个设计很巧妙,对吧?

个人经验: 我在做开源飞控时,发现很多SBUS接收机其实兼容性有差异。有些接收机输出的SBUS信号电平是3.3V,有些是5V。最好加个电平转换,别直接怼到飞控的IO口上。

1.3 SBUS在无人机领域的地位

现在SBUS已经是无人机遥控的事实标准了。几乎所有的飞控——Pixhawk、ArduPilot、Betaflight、iNav——都原生支持SBUS。你随便买个遥控接收机,十有八九都带SBUS输出。

它的地位为什么这么稳固?说白了就三点:

  1. 简单可靠:一根线搞定所有通道,不像PWM那样需要大量IO口
  2. 低延迟:3ms一帧,比PPM的20ms快了一个数量级
  3. 生态成熟:从遥控器到接收机到飞控,全链路支持

我记得有一次给客户做工业无人机,他们要求16通道全用上。如果用PWM,飞控上得接16根线,布线难度直接翻倍。换成SBUS,一根线搞定,客户看了直呼专业。

注意: SBUS虽然叫总线,但它不是像CAN那样的多主总线。它是典型的单主多从结构,遥控器是主,接收机是从。别想着用SBUS做双向高速数据传输,那不是它的设计目标。

1.4 SBUS数据帧结构

来看一下SBUS的数据帧长什么样。每个帧25字节,结构如下:

字节0: 起始字节 0x0F
字节1-22: 16个通道数据,每个通道11位
字节23: 
  bit0: 通道17(数字通道)
  bit1: 通道18(数字通道)
  bit4: 帧丢失标志
  bit5: 安全保护标志
字节24: 结束字节 0x00

这个结构很紧凑。16个通道,每个11位,总共176位,刚好22字节。加上头尾和标志位,正好25字节。Futaba的工程师在协议设计上确实下了功夫。

我在解析SBUS时踩过一个坑:通道数据是低位在前,高位在后。如果你按大端序去解析,出来的数据全是乱的。后来看了Futaba的官方文档才明白,人家用的是小端序。

1.5 SBUS vs 其他协议

协议 线数 通道数 延迟 精度
PWM 每通道1根 不限 20ms 1μs
PPM 1根 8-12 20ms 约10μs
SBUS 1根 16+2 3-5ms 11位
CRSF 1根 16+ 1-2ms 11位

从表格能看出来,SBUS在通道数和延迟上都有明显优势。CRSF虽然延迟更低,但那是ExpressLRS的私有协议,生态不如SBUS成熟。

避坑指南: 我曾经在SBUS和CRSF之间纠结了很久。如果你做的是消费级无人机,SBUS完全够用。如果是竞速机或者远航机,可以考虑CRSF。但说实话,对大多数项目来说,SBUS是最稳妥的选择。

1.6 SBUS在ArduPilot中的实现

ArduPilot对SBUS的支持非常完善。在硬件上,它使用UART接口,通过一个反相器来接收SBUS信号。软件上,有专门的SBUS解析器,在AP_HAL库中实现。

我建议你在学习SBUS时,直接看ArduPilot的源码。它的实现很规范,注释也很详细。特别是AP_RCProtocol_SBUS.cpp这个文件,把SBUS的解析逻辑写得清清楚楚。

嗯,这里要注意:ArduPilot的SBUS解析器默认只支持16个标准通道。如果你需要用到那两个数字通道,得自己改代码。我在做农业无人机时,就用那两个数字通道来传输喷洒开关状态,效果很好。

总结一下:

  • SBUS是Futaba开发的串行遥控协议
  • 一根线传16+2个通道,延迟低至3ms
  • 在无人机领域是事实标准
  • ArduPilot原生支持,解析代码成熟
SBUS协议知识体系 SBUS协议 协议基础 串口:100kbps, 8E2 信号反相,需硬件处理 数据帧结构 25字节:头+数据+尾 16通道×11位 + 2数字通道 应用场景 ArduPilot/PX4飞控 Betaflight/iNav穿越机 优势:单线、低延迟、高精度、生态成熟

这张图把SBUS的知识体系梳理清楚了。从协议基础到数据帧结构,再到实际应用场景,层层递进。你学SBUS时,就按这个脉络来,不会乱。

好了,这一章就到这里。SBUS协议看似简单,但里面细节不少。下一章我们会深入解析SBUS的数据帧,手把手教你如何用代码解析SBUS信号。


公众号:蓝海资料掘金营,微信deep3321