arduino板子各个接口介绍(Arduino趣味制作--FUTABA-S.BUS总线解析)

S.BUS是FUTABA(模型遥控器知名品牌)特有的一个接收机串行总线输出,通过这根总线,可以获得遥控器上所有通道的数据。目前很多模型及无人机电子设备都支持S.BUS总线的接入,如:V-BAR陀螺仪、Pixhawk飞控等。使用S.BUS总线获取通道数据,效率是比较高的,而且非常节省硬件资源-只需要"一根线"即可获取所有通道的数据。

在本次试验中,使用的遥控器为FUTABA T10CHG,接收机使用的穿越机专用神器:FM800PRO微型总线输出接收机,Arduino板使用的MEGA2560板。

arduino板子各个接口介绍(Arduino趣味制作--FUTABA-S.BUS总线解析)(1)

arduino板子各个接口介绍(Arduino趣味制作--FUTABA-S.BUS总线解析)(2)

在解析数据前,先说说S.BUS总线的一些特性。经过资料查阅得到:S.BUS总线使用的是TTL电平的反向电平,即标准TTL中的1取反为0,而0则取反为1,串口波特率为100000,数据位为8位,2个停止位,偶校验。因此,这里需要制作一个电平反向电路,电平反向电路在百度上可以找到大神们的无私共享,这里直接给出原理图,图中使用的三极管型号为:SS8050。

arduino板子各个接口介绍(Arduino趣味制作--FUTABA-S.BUS总线解析)(3)

arduino板子各个接口介绍(Arduino趣味制作--FUTABA-S.BUS总线解析)(4)

下图为制作好的电平反向电路模块,这个模块在上面原理图的基础上做了一点小小的改进:增加了一个5V的VCC贯通输入和输出端,图中的3.3V上拉则从5V的VCC上经过电阻分压获得,这样的方便之处在于方便用Arduino板对模块接收机供电,也可以接收机对模块及Arduino板供电。

arduino板子各个接口介绍(Arduino趣味制作--FUTABA-S.BUS总线解析)(5)

获得正确的电平后,接下来看看S.BUS的数据帧结构。S.BUS一帧数据的长度为25个字节,其中第"0"个字节为帧头:0x0f;第24个字节为帧尾:0x00;从第1个字节到第22个字节为1-16号比例通道的数据字节;第23字节中,第7位为数字开关通道17通道,第6位为数字开关通道18通道,第5位为帧状态标志为(判断是否丢帧),用于控制接收机上的LED的状态,第4位为失控保护激活标志位,此位为1时,表示接收机进入失控保护状态,本次试验所用的接收机对于第23字节为做出处理,但使用福睿斯接收机时可以正确判断失控保护。

(注:数字字节帧的排位从0开始,第0个实质上是指第一个字节)

接下来看1-16比例通道的数据解算,每个通道用11位(bit)二进制数表示,通道数据的值为:0-2048:

1通道(AILE):第2字节的低3位(11位数据的高3位) 第1字节(11位数据的低8位);

2通道(ELEV):第3字节的低6位(11位数据的高6位) 第2字节的高5位(11位数据的低5位);

3通道(THRO):第5字节的最低1位(11位数据的最高1位) 第4字节(11位数据的中间8位) 第3字节的最高2位(11位数据的最低2位);

4通道(RUDD):第6字节的低4位(11位数据的高4位) 第5字节的高7位(11位数据的低7位);

这里的文字叙述比较繁琐,下面直接给出通道解算的代码:

简要说明:sbusData[]用于存放从串口读取的原始数据,channels[]用于存放解算完成的通道数据,其中channels[0]代表1通道AILE。

arduino板子各个接口介绍(Arduino趣味制作--FUTABA-S.BUS总线解析)(6)

下面来看看如何进行帧同步,即寻找帧头。本次试验用Arduino mega2560的串口1来接收SBUS数据,再由串口0将通道数据发送到串口监视器。接收串口数据用串口中断来处理,下面直接给出中断函数:

arduino板子各个接口介绍(Arduino趣味制作--FUTABA-S.BUS总线解析)(7)

简要说明:sbus_flag用于判断是否读取到了帧头,开始时sbus_flag为0,此时还未同步到帧头,程序会一直停留在寻找帧头的位置,不断地从串口缓冲区中读取字节数据,读取一次判断一次,当寻找到帧头0x0f时,sbus_flag置1,跳出帧头寻找,进入后续的帧读取,当sbusData更新完毕后,sbus_flag重新置0,准备进入下一轮的读取。下图为串口监视器显示1-12比例通道 原始数据第23字节(本次试验用的遥控器只有10个通道)的状态:

arduino板子各个接口介绍(Arduino趣味制作--FUTABA-S.BUS总线解析)(8)

从上图可以看到,摇杆在中位时,解算出来的通道数据为1024左右,以一通道AILE为例:中杆时为1024,左右满行程的值分别为1686和366,此时的遥控器AILE行程设置(END POINT)为左右100%。至此,SBUS总线数据成功解析,通过试验验证了FUTABA T10CHG确实有10个通道,而且10个通道均为标准PWM(舵机)输出;其中1-8通道可设置为比例通道,即可跟随摇杆、旋钮或3端开关;而9,10通道只能作为开关通道,即只能用两段开关控制PWM的最大值和最小值,但行程可调。

实际上这一套解算代码小编早已引用到自制的Arduino四轴飞行器中,下面有图有真相,注意看图中的FM800PRO接收机:

arduino板子各个接口介绍(Arduino趣味制作--FUTABA-S.BUS总线解析)(9)

此刻小编在想:手持"18嫂子"(T18SZ遥控器)、"16嫂子"(T16SZ遥控器)或者"14帅哥"(T14SG遥控器)的模型老司机们是不是可以以最节省的方式获得一个多通道接收机了。有需要完整解析代码的朋友可以留言。后续我还将介绍JR、SPEKTRUM系列的DSM2以及PPM的解析过程,敬请持续关注。

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页