无人机中级篇:第十讲:遥控器协议S-BUS

来源:原创     阅读量:1726     发布时间:2022-01-11 09:14:25    

今日大家来一起学习遥控器普遍通信协议S-BUS的分析方式。S-BUS实际上是一种串口通讯协议,选用100000的波特率,数据位点8bits,终止结构域2bits,偶验证,即8E2的串口通讯。可是S-BUS选用的是反向脉冲信号传送,换句话说,在S-BUS的推送端高低电频是反向的,协议中的全部高电平都被转化成低电频,协议中的全部低电频都被转化成高电平。因此在S-BUS的协调器必须提升一个多少电 ** 向器来开展电 ** 转,如下图:

事实上,大家采用的Pixhawk飞控板上早已集成化了这一反向器,因此针对应用Pixhawk的客户而言,可以忽视掉S-BUS的反向体制,可是针对其他沒有集成化S-BUS反向器的硬件系统上,就必须使用人提升一个反向器来解决数据信息,不然将没法载入协议数据信息。

此外,100000的波特率并并不是规范的波特率,这在一些只适用规范波特率的系统软件上没法完成,好在Nuttx适用自定的波特率,我们可以根据对机器设备连接点的配备完成波特率的设置。在Pixhawk IO上,S-BUS系统总线的机器设备连接点为/dev/ttyS2,因此我们可以撰写一个程序流程对这一串口通信连接点的波特率开展配备:

设定好波特率就可以对标准文件机器设备开展载入了,也就是根据read()函数公式来载入串口通信之中的数据信息。S-BUS协议在传送流程中也有2种不一样的传送方式:

1)快速方式:数据信息推送周期时间为4ms,推送頻率为250Hz;

2)低速档方式:数据信息推送周期时间为14ms,推送頻率为71.4Hz。

S-BUS协议数据类型如下所示:

必须留意的是S-BUS选用11bits来表明一个遥控器通道的数值,22个字节数就可以表明16通道(8 × 22 = 11 ×16)。11个bit可以表示的数值范畴为0~2047。例如:大家的遥控器前4个通道数值各自为200、300、400和500,其他通道都为0。他们的二进制数据信息各自为:

200: 000 1100 1000

300: 001 0010 1100

400: 001 1001 0000

500: 001 1111 0100

其他通道都为:0

S-BUS的16个遥控器通道,每一个通道用11个bit表明,那麼这16个通道的二进制数值拼凑起來则为:

0001 1001 0000 0100 1011 0000 1100 1000 0001 1111 0100

[0F] 19 04 B0 C8 1F 40 …… 00 [00]

事实上遥控器推送每一个通道的数值在200~1800中间,用于表明遥控器通道的全部数值。可是PX4飞控程序流程中合理的通道值范畴通常是1000~2000,因此就必须将初始数值开展一次变换。下面大家就来撰写S-BUS协议分析的驱动软件:

自然,大家必须在驱动软件中运行一个进程来载入并分析S-BUS协议,此过程将应用循环系统的方法读取int ** us_read_parse(int _fd, uint16_t *val)函数公式,以后将val二维数组中的內容应用input_rc.msg信息公布到uORB系统总线上为其他过程所应用。


线