基于MSP430的四旋翼飞行器的S—BUS通信协议的设计与实现
2018-05-23张雨辰孙琛林奎秦生辉
张雨辰 孙琛 林奎 秦生辉
【摘 要】四旋翼飞行器在军事领域和生产运营监管领域有着广阔的应用前景。此外,四旋翼还可应用在政府应急指挥领域和公共安全领域,在处置大规模群体性事件或跟踪以及侦查活动时,启动飞行器可及时准确监控现场情况。
【Abstract】The four rotor aircraft has broad application prospects in military field and production operation supervision area. In addition, the four rotor can also be used in the field of government emergency command and public security. When dealing with large-scale mass incidents or tracking and detection activities, launching the aircraft can monitor the scene timely and accurately.
【關键词】四旋翼;msp430;S-BUS
【Keywords】four rotor; msp430; S-BUS
【中图分类号】V249.1 【文献标志码】A 【文章编号】1673-1069(2018)04-0187-02
1 引言
四旋翼机器人是一种灵巧的、电动的、可以垂直起降的,能够遥控或自主飞行并执行任务的一种空中机器人。四旋翼机器人具有4个螺旋桨并呈十字形交叉结构,相隔的螺旋桨为一组,两组的旋转方向不同,相邻两个螺旋桨旋转方向不同来抵消水平反扭力矩,保证自身不发生自旋。与其它空中机器人相比,其灵活性体现在只通过改变螺旋桨的速度就可以执行飞行任务。
本课题采用msp430g2553作为主要控制系统,通过使用C语言编写程序,使用S-BUS协议实现对飞机的通信。选用msp430微控制器作为控制系统是因为该系列控制器已经广泛用于家用电器和工业控制之中,而且价格便宜,易于购买和自主设计。微控制器系统降低了外围硬件设备的投资,省去了遥控器等设备的麻烦,无论是日常生活还是工业生产也都会随之更加的方便。
2 S-BUS概况
Futaba S-BUS通信协议是一种用来控制舵机的串口通信协议。最多可以包含16个舵机的数据,它是由经典的RS232串口通信协议发展过来的,逻辑取反。它的长度为25字节,每字节包括1位起始位0,8位数据位,1位奇偶校验位(若8为数据位中有奇数个1,则奇偶校验位取1,若有偶数个1则奇偶校验位取0),2位结束位11。信号周期为14毫秒,其中前3毫秒是数据,后11毫秒是延时,置低电平。用来发送数据的3毫秒中,共发送25*(1+8+1+2)=300位数据,也就是说,每位数据(高或低电平)持续10微秒的时间。
该协议有25个字节。其中第一个字节是起始字节,然后是22个包含数据的字节,最后是一个标志字节和结束字节。起始字节中的8位数据位为11110000b,即完整起始字节为011110000011b。标志字节可根据不同飞控自行设定,用于承载除了舵机数据以外的数据。结束字节中的数据位为00000000b。
协议中有22个包含数据的字节,每个字节数据位为8位,22*8=16*11,也就是说每个舵机的数据长度为11位。实际传输时需要把16个舵机数据填入22个包含数据的字节中,填入方式为第一个字节的8位和第二个字节的前3位为第一舵机,其中第一字节8位中的最高位为舵机的最低位,第二字节的从最高位数第三位为舵机的最高位。第二个字节的后5位和第三个字节的前6位为第二舵机,以此类推。
3 S-BUS在MSP430中的实现
程序主要由发送数据和接受数据2个模块组成。流程如下所示:
3.1 发送数据
MSP430单片机不能对字节进行操作,因此将待发送或接收数据的每一位依次和要使用的I/O口进行与操作,从而实现信号的发送与接收。具体做法是根据配置的波特率,使用时钟定时改变管脚电平的高低,达到发送二进制数据的目的。因为S-BUS的逻辑电平是反的,所以高电平为0,低电平为1。
发送数据时,程序首先发送一个起始字节0xF0,然后按S-BUS的规则将每个通道拆分成各个数据字节(在本文使用的程序中通过改变I\O口的电平模拟数据位的发送)。发送数据字节流程如下:
程序首先发送一个起始位(高电平),然后将通道1的低8位放到第一个数据字节,将通道1的高3位放到第二个数据字节的低3位,以此类推计算出每个数据字节并发送。当每一个数据字节中的数据位发送完后,计算偶校验位并发送,最后发送停止位(低电平)。之后程序继续发送下一个数据字节,直到22个数据字节发送完成。
数据字节全部发送完成后,程序将发送标志字节flags,最后发送结束字节0x00。flags的内容为:flags = bit7 = ch17 = digital channel (0x80)
bit6 = ch18 = digital channel (0x40)
bit5 = Frame lost, equivalent red LED on receiver (0x20)
bit4 = failsafe activated (0x10)
bit3 = n/a
bit2 = n/a
bit1 = n/a
bit0 = n/a
3.2 接收数据
接收数据时,程序先收到一个起始字节,据此判断新的一帧开始。然后将收到的22个数据字节解析出来。一种方法是,根据发送时的计算方式,反过来将每个字节通过左移或右移运算之后,相应位上按位与1,达到解析的目的。由于通道数较少,故可以用这样一种较为取巧的方式。如果偶校验位错误,则请求重新发送这一字节。之后将解析出的16个通道的数据传递给飞控,查看标志位的内容,最后接收到结束字节,一帧结束,等待接收下一帧。
以第一、第二个通道为例,当接收到第一个和第二个数据字节时,将第一个数据字节右移3位后,按位与00011111111,将结果存入buffer_1,第二个数据字节左移8位后,按位与11100000000,将结果存入buffer_2,再让buffer_1按位与buffer_2即可得到第一个通道的数据。同理,将第二个数据字节右移6位后,按位与00000011111,将结果存入buffer_3,第三个数据字节左移2位后,按位与11111100000,将结果存入buffer_4,再让buffer_3按位与buffer_4即可得到第二个通道的数据。
4 结语
本文对S-BUS协议的环境设置以及具体的数据结构进行了说明,并给出了S-BUS在MSP430上的实现。本系统进一步完善的话,可以将解析通道的部分用一个更好的算法替代本文的移位算法。可以看到S-BUS是一种简单的四旋翼通信协议,同时16个通道也较好地满足了四旋翼飞行器对信号传输的需求。