

该库与SBUS接收器和伺服器进行通信,并与Arduino和Cmake Build Systems兼容。
SBU是接收器将命令发送到伺服器的总线协议。与PWM不同,SBU使用总线体系结构,在该体系结构中,可以将单个串行线连接到最多16个伺服器,每个接收到唯一的命令。
SBUS协议使用倒置的串行逻辑,波特率为100000,8个数据位,甚至奇偶校验和2个停止位。 SBU小包长25个字节长,包括:
请注意,当发射器和接收器之间丢失帧时,会指示丢失的帧。 FailSafe激活通常要求连续丢失许多帧,并表明接收器已进入故障安全模式。根据系统配置,数据包大约每10 ms或20 ms发送一次。
已经开始使用称为“快速SBU”的SBU的变体。这使用了200000的波特rate和更快的更新速率。
在CH17和CH18上的注意: 17频道和第18频道是数字开/关通道。这些并不是所有SBU接收器和伺服器上普遍可用的。
Frsky接收器将输出172-1811的范围,其频道设置为-100%至 +100%。使用-150%至 +150%的扩展限制输出的范围为0到2047,这是可在11位数据的最大范围内获得的最大范围。
由于SBU是一种数字总线格式,因此它是从发射器和能够SBU的接收器接收飞行员命令的绝佳方法。如果飞机中使用了SBUS伺服器,SBU也是发送执行器命令的绝佳方法 - 伺服命令通常可以以较低的延迟发送,并且仅使用单个PIN命令命令多达16个伺服器,则可以将其他微控制器引脚释放出来。
SBU使用倒串行协议,该协议在Arduino中通常不支持。该库可以在以下微控制器上使用倒置序列:
对于所有其他微控制器,您必须使用串行逆变器。如果您已经修改了此库与其他微控制器合作,请提交拉动请求。
只需克隆或下载并将zpipter库提取到您的arduino/libraries文件夹中即可。库的添加为:
# include " sbus.h "一个示例位于示例/arduino/sbus_example/sbus_example.ino中。该库由Teensy 3.x,4.x和LC设备进行测试,并应与其他Arduino设备一起使用。
Cmake用于构建此库,该库被以称为SBU的库目标导出。添加标题为:
# include " sbus.h "也可以使用创建构建目录的cmake Idiom进行独立编译,然后从该目录中发行:
cmake .. -DMCU=MK66FX1M0
make
这将构建库和示例可执行的示例称为sbus_example 。示例可执行源文件位于示例/cmake/sbus_example.cc中。请注意, CMAKE命令包括一个定义,指定密码正在编译的微控制器。这是正确配置代码,CPU频率和编译/链接器选项所需的。可用的MCU是:
众所周知,这些可以与青少年产品中使用的相同包装一起使用。同样,只要它只是一个包装更改,就知道切换软件包的运行良好。
SBUS_example目标创建用于与SBUS接收器和伺服器通信的可执行文件。该目标还具有用于创建十六进制文件的_hex和一个用于使用Teensy CLI上传器闪烁Teeensy的_UPLOAD 。可以在我们的Build-Tools存储库中找到建立构建环境的说明。
该库在命名空间BFS内。
该结构定义了可以由SBUSRX对象读取和返回的SBU数据,也可以由Sbustx对象设置和发送。
BOOL LOST_FRAME是否丢失了框架。
BOOL FAILSAFE是接收器是否输入了故障安全模式,还是命令Servos输入失败图模式。
Bool CH17,CH18频道17和第18频道的状态。
静态constexpr int8_t num_ch = 16 sbus通道的数量。
INT16_T CH [NUM_CH] SBUS通道数据数组。
该类用于从能够SBU的接收器接收SBU数据。
SBUSRX(硬件 *BUS)创建一个SBUSRX对象。传递了与所使用串行端口相对应的串行对象的指针。串行端口的RX引脚将接收SBUS数据包。
bfs::SbusRx sbus (&Serial1);SBUSRX(HardWareserial *Bus,const bool Inv)创建一个SBUSRX对象。通往与所使用串行端口相对应的串行对象的指针与第二个参数Inv一起传递,该参数设置了是否使用了倒置串行。如果INV为true,则信号是标准倒置的SBU,否则它是无向后的SBU。
bfs::SbusRx sbus (&Serial1, false );SBUSRX(HardWareserial *BUS,const bool Inv,const bool fast)与上面的构造函数相同,但如果快速为true,则可以选择快速SBUS Baudrate(200000)。
(仅ESP32)SBUSRX(HARDWARESERIAL *BUS,const int8_t rxpin,const int8_t txpin,const bool Inv)创建一个SBUSRX对象。与RX PIN号( RXPIN ),TX PIN号( TXPIN )以及是否使用了倒置序列( INV )一起传递到与使用串行端口相对应的串行对象的指针。如果INV为true,则信号是标准倒置的SBU,否则它是无向后的SBU。
(仅ESP32)SBUSRX(HARDWARESERIAL *BUS,const int8_t rxpin,const int8_t txpin,const bool Inv,const bool inv,const bool fast)与上面的构造函数相同,但如果快速为true,则可以选择快速SBUS BAUDRATE(200000)。
void begin()初始化sbus通信。
sbus.Begin();Bool Read()解析SBUS数据包,在成功接收SBU的数据包时返回true。
if (sbus.Read()) {
// Do something with the received data
}SBUSDATA DATA()返回SBUSDATA结构,该结构带有来自最后一个接收的数据包的数据。
if (sbus.Read()) {
bfs::SbusData data = sbus. data ();
}该类用于将SBU数据传输到具有SBU的伺服器。
SBUSTX(HARDWARESERIAL *BUS)创建一个Sbustx对象。传递了与所使用串行端口相对应的串行对象的指针。串行端口的TX引脚将接收SBUS数据包。
bfs::SbusTx sbus (&Serial1);Sbustx(Hardwaresial *Bus,const bool Inv)创建一个Sbustx对象。通往与所使用串行端口相对应的串行对象的指针与第二个参数Inv一起传递,该参数设置了是否使用了倒置串行。如果INV为true,则信号是标准倒置的SBU,否则它是无向后的SBU。
bfs::SbusTx sbus (&Serial1, false );(仅ESP32)sbustx(HardWareserial *BUS,const int8_t rxpin,const int8_t txpin,const bool inv)创建一个sbustx对象。与RX PIN号( RXPIN ),TX PIN号( TXPIN )以及是否使用了倒置序列( INV )一起传递到与使用串行端口相对应的串行对象的指针。如果INV为true,则信号是标准倒置的SBU,否则它是无向后的SBU。
void begin()初始化sbus通信。
sbus.Begin();void write()写一个sbus包。数据包立即编写,您应该调节将数据包发送到伺服器的时间安排,以保持大约100 Hz或50 Hz的频率,具体取决于SBUS系统的设置。
sbus.Write();void Data(const sbusdata&Data)设置了SBU数据,该数据将在下一个写入方法上传输。
bfs::SbusData data;
data.ch[ 0 ] = 900 ;
sbus.data(data);SBUSDATA DATA()返回SBUS数据缓冲在SBUSTX对象中的SBU数据,该数据将在下一个写入方法上传输。
bfs::SbusData data = sbus.data();