基于CAN总线的水下机器人执行节点设计与实现
、可靠,在控制器与驱动器之间,采用高速光耦6N137进行隔离,其原因:(1)控制器和驱动器存在接地电位差;(2)抑制环境干扰信号;(3)控制器供电4.5~5V,为弱电,而驱动器供电20~70V,相对较高。在电源输入和电机输出都配置保险丝进行安全保护。
执行节点软件设计
应用层协议制定
在CAN210规范标准中,为了用户使用的灵活性,只对物理层和数据链路层进行了规定,没有定义应用层,这就需要用户根据自己需求制定应用层协议。虽然目前可以使用一些成熟的应用层协议,如HiLon、CANOpen、DeviceNET和SDS协议等,但缺乏针对性,因此首先制定CAN应用层协议。
在设计一个基于CAN总线的通信系统时,确定CAN标识符的分配非常重要,它关系到通讯网络结构的合理性和传输效率的高低,是制定应用层协议的一个重要研究内容。本文在CAN2.0标准帧格式的基础上,根据水下机器人控制系统的需求特点制定了一个多帧传输的应用层协议。协议中将11位信息标识符按表1进行分配。
标识符ID28-ID25定义为源地址,ID24-ID21定义为目的地址,这样节点可以按优先权高低由低向高分配地址,保证竞争中优先权高的节点能先占用总线。相同目的/源地址的帧还可以通过标识符ID20-ID19来调整优先权,ID18的值用来区分多帧传输中起始帧(1)/普通帧(0)。
在标识符分配中,一般保留一个地址作为数据广播,另外不使用地址15,以避免标识符前7位全为隐性位(逻辑1)。因此协议可以满足不多于14个节点的需求。
表1 CAN帧信息和标识码定义
一般CAN总线的应用层协议习惯将流长度、多帧索引等信息放在数据场中,但这样每一帧都浪费了若干个字节。因此本文将多帧传输的相关信息作为起始帧发出,而有效数据作为普通帧随后发出。起始帧的数据域结构见表2,传输号为本次多帧传输的序号,流长度为本次数据传输的字节数。
表2 起始帧(ID18=1)的数据域
普通帧的数据域对用户是透明的,可以根据需要任意安排使用。
水下机器人总线上传输的信息可分为以下三类:(1)传感器节点数据传输命令,传送为保证机器人正常运动所需要的传感器信息,包括航行传感器和任务传感器等。(2)航迹控制命令。上述两类命令按照一定时钟节拍发送到总线上,一般发送航迹命令的节拍要比发送传感器数据的节拍慢。(3)特殊命令,例如出现紧急情况需要上浮等,此种命令是不定时发送的,发送的频率也不是均匀的。
根据以上通信特点,在满足功能要求的条件下,为了简洁,协议规定命令均不超过8个字节,并使用2个字节来为命令编码。节点间一次可能传输一个或多个命令。在本文制定的应用层协议中,命令通过普通帧传输。
表3列举了普通帧的数据域结构,每个普通帧包含一个命令,其数据域前两个字节为命令编码,第三个字节存放本条命令的参数个数,后面为若干个参数的内容。
表3 普通帧(ID18=0)的数据域
CAN程序设计
CAN软件设计主要包括初始化函数、接收处理函数、发送处理函数、中断处理函数等。
CAN通信的初始化工作主要包括操作模式设定、验收滤波器设置、总线定时、管脚配置和中断设置等几项工作。需要注意总线上各节点的波特率必须一致,另外P1.0(RXDC)和P1.1(TXDC)必须设置为准双向模式。
CAN接收程序流程见图4。中断函数中负责接收CAN信息,并将对每个任务的描述及其所包含的命令插入队列;而主循环中将各任务包含的命令从队列取出,并且根据命令执行相应的运算或操作。使用队列的好处是在执行命令的同时中断函数还可以接收新的命令,避免了同时读写通信缓冲区造成的冲突。
CAN的发送程序采用查询方式,因为CAN总线本身提供了比较好的总线仲裁、错误检测、错误标定和故障界定功能,发送程序的设计比较简单,这里不再过多赘述。
图4 CAN接收处理程序
试验与结论
执行节点的工作对象为小型自治测量型水下机器人,低阻力流线型壳体,水中配成中性浮力,由一个三叶螺旋桨提供推力,水平舵和垂直舵各一对来控制航向与姿态,技术指标见表4。
机器人先后完成了水上拖缆航行和无缆自治航行。试验证明,本节点完全满足自治水下机器人航行控制性能的高要求,并且具有实时性高、可靠性强、使用方便等优点。在今后的工作中,还可以对执行节点做进一步的改进,如更换高性能的微控制器,进一步提高节点的处理速度;采用嵌入式操作系统来提高节点的实时处理能力,从而使节点具备更高性能。
表4 水下机器人技术指标
- 基于CAN总线的RS-232串口设备远程通信(01-18)
- 现场总线CANbus与RS-485之间透明转换的实现(01-26)
- 支持CAN总线的电动车辅助逆变电源的设计(02-23)
- 单片机和MCP2510的CAN息线通信模块设计(05-03)
- CAN总线/RS232接口的设计(10-12)
- 机车空调逆变电源控制系统及其实现(06-21)