基于CAN总线的无人机控制系统协议研究
2012-08-01赵璇,郭峰
赵 璇,郭 峰
(武汉理工大学信息工程学院,湖北 武汉 430070)
在当前环境下,城市突发事件的增多和战场上大规模冲突事件的减少,对特种小型无人航空器的使用提出了新的要求。传统的有人驾驶飞行器(直升机、固定翼飞机)准备时间长、开销大,在城市中面对冲突事件,其响应时间存在明显滞后,而在野外无人区,无人机执行例行低烈度侦察任务的效费比也较有人驾驶侦察机高得多。小型无人机是指有效载荷在5 kg以内,飞行高度不超过5 000 m(美国FAA规定普通民用无人机飞行高度不超过122 m)且飞行距离在5~20 km范围的无人飞行器。传统的无人飞行器一直采用集中控制的方式,测试手段只有目视活动翼面且无法持续监测,需要操作人员有丰富的使用经验。基于CAN总线的分布式系统[1-3],能够实时地持续监测飞行器上的各节点模块,机载传感器能够检测空中状态并进行干预,降低了对操作人员的要求。
1 航空总线与CAN总线
当前航空航天领域最常用的总线主要有ARINC429总线和MIL-STD-1553B总线。前者采用点对点的传输方式,数据长度固定,总线传输速率低,已不能满足当今无人飞行器分布式控制的要求;后者属于指令/响应式总线,数据传输速率高,抗干扰能力强,但由于成本较高,与无人飞行器的基本理念相左。源自汽车工业的CAN总线技术已广泛应用于各种陆上交通工具、数据采集系统等诸多领域[4-5],是一个较为理想的、适合无人机实时分布式控制系统要求的总线。
CAN总线(controller area network)即控制器局域网,能有效支持分布式控制或实时控制的串行通信网络,实现全分布式多机系统。其通信速率和距离:直线通信距离最远达10 km(通信速率5 kb/s),通信速率最高1 Mb/s(通信距离40 m);其访问机制采用载波监听多路接入(carrier sense multiple access,CSMA)方式,在总线空闲时,网络上任意节点均可主动发送报文;其仲裁机制采用基于优先级的非破坏性总线仲裁技术,当产生总线冲突时,高优先级的节点将获得总线的使用权而不是重新等待发送机会;仲裁机制具有出错帧自动重发功能,能自动判别暂时性故障节点和永久性故障节点,可自动关闭故障节点。
由于CAN总线本质上为事件触发系统,其总线仲裁技术只能保证高优先级消息的有效发送,无法估计低优先级消息发送是否延迟,最恶劣情况下,高优先级的消息会占用全部总线,此时低优先级的消息将被永久地堵塞。这些不足需要在CAN上层应用协议中加以克服,笔者提出的CAN网络应用层协议和诊断协议,较好地解决了低优先级消息发送延迟的问题。
2 小型无人飞行器系统架构
无人机由于结构紧凑,通常采用非常规布局,根据飞行方案的不同,分为固定翼和旋翼两种。
固定翼飞行器采用倒V型尾翼以兼顾方向调整和俯仰配平,襟副翼合为一体。而旋翼飞行器多采用双轴甚至四轴旋翼,以提高升力,同时降低飞行器在空中保持方向平衡的难度。其中,前者速度快,抗风能力较强,不能实现空中悬停,对控制需求高;后者速度慢,可实现空中悬停,对控制需求稍低,但城市高楼间大风对旋翼飞行器的影响非常大。笔者采用固定翼飞行器的系统架构。
2.1 系统网络设计
按照无人飞行器总体设计要求,航空电子系统主要由飞行控制计算机、无线遥控终端、数字式伺服控制器、发动机控制器和姿态传感器组件组成。各种模块/设备是物理上分开的功能部件,分别由独立的MCU和外围电路组成,设备间通过波特率为500 k/s的高速CAN总线进行连接。其网络拓扑图[6-7](433 MHz频率的遥控模块直接与飞行控制模块相连,故未标出)如图1所示。
图1 小型无人飞行器网络拓扑图
升降舵控制飞行器的俯仰配平,副翼控制飞行器的滚转,襟翼用于增加飞行器起降时的升力,方向舵主要用于飞行方向的微调。其中,起落架、副翼、发动机、襟翼、方向舵和升降舵为CANoe模拟节点。飞行控制模块为真实物理节点,以NEC的0893型单片机为主控,TJA1050为高速CAN收发器。整个系统由飞行主控发起调度,周期性地请求节点的状态和发送控制指令。
飞行控制单元可工作于自主飞行模式或无线遥控指定模式,无论哪种模式,飞行器都是由飞控单元通过CAN总线发送控制指令到各节点模块,由各模块输出周期为20 ms的PWM信号来驱动伺服机构的电机并最终完成执行动作。
2.2 应用层定义
网络的物理层和数据链路层遵循CAN2.0B协议,由于该协议只定义了数据链路层中的MAC层和LLC子层的一部分,因此自定义了应用层。CANaerospace协议是下一代通用航空总线协议之一,主要由小型和中型飞机制造商采用。但由于小型无人机的节点设备少,网络结构相对简单,因此根据实际情况,对 CANaerospace协议进行裁剪,精简后的协议实现难度小,适合于采用单片机的小型无人机系统。
经过裁剪的协议规定节点间只使用数据帧,不使用远程帧。数据帧的结构遵循CAN2.0标准,字节格式使用Motorola格式,使用11位节点标识符为预先分配的固定标识符[8]。数据帧结构如表1所示。
表1 数据帧结构
飞行控制单元作为唯一的主节点,负责对整个控制系统进行调度,通过CAN总线与伺服舵机、动力单元进行数据交换。其工作流程为:该节点以20 ms为周期向所有控制面舵机发送控制指令和自身的状态信息;所有控制面舵机以20 ms为周期向飞行控制单元发送自己的工作信息及自身的状态信息;动力节点以20 ms为周期发送工作转速,续航电压和自身的状态信息。该系统中CAN总线上传输的数据帧类型分为以下几种:
(1)普通控制帧。飞控对舵机的控制指令,所有节点的工作状态,时间触发性;
(2)特殊指令帧。关闭指定节点的特殊功能指令,事件触发性;
(3)诊断测试帧。用于地面自检测,事件触发和时间触发性;
根据实际飞行控制时各操纵机构的使用频率,规定系统优先级从低到高依次为:起落架、襟翼、方向舵、升降舵、副翼、动力单元和飞控单元,同时把数据帧分为3个等级,并规定诊断测试帧等级最低,特殊指令帧次之,普通控制帧最高。以该原则具体定义的标识符为:升降舵(0x04),副翼(0x08),襟翼(0x20),方向舵(0x10),起落架(0x40),动力单元(0x02),飞控单元(0x01)。
2.3 诊断协议
基于KWP2000协议的研究,笔者提出了基于CAN总线的小型无人机诊断协议。诊断数据帧的格式定义如表2所示。
表2 帧格式 B
格式符定义诊断帧的有效字节数B(1~64),目标地址为投递地址,源地址为发送地址,长度字节用于支持超帧(有效字节数据大于64时使用),缺省情况下为0,服务标识为具体诊断的命令(文中通称为“诊断服务名称”),数据字节为命令参数,或者作为诊断的返回信息(无人机对诊断服务的响应)。
诊断协议支持的诊断服务如表3所示。
表3 诊断服务
诊断服务标识即诊断的“命令”,以表3部分内容为例,必须先进行通信(0x81),诊断仪器与无人机建立连接后才能进行诊断。所有的诊断项目必须先发起诊断会话(0x10),涉及到控制参数调整的命令还需要经过密钥的验证方可进行。若诊断仪建立连接后长时间无操作,必须持续地发送设备接入状态(0x3E),否则无人机可以自行脱离连接。诊断的结果通过状态(0x18)或标识(0x21)两种方式来读取。
响应代码属于诊断帧的数据字节部分,是无人机设备对诊断服务的回应,诊断服务响应代码如表4所示。响应分为消极响应和肯定响应两种。肯定响应代码为相应的诊断服务标识加上0x40(如对诊断设备接入的肯定响应为0x7E,即0x3E+0x40),消极响应目前分为4种情况。代码0x78的含义比较复杂,可以指无人机设备没有准备好或者设备尚未完成其他项目的诊断,其他响应代码则按字面含义解释。
表4 诊断服务响应代码
当诊断仪通过状态(0x18)或者标识(0x21)方式来读取诊断信息时,无人机会向诊断仪返回诊断结果,也就是故障信息。故障信息是无人机向诊断仪返回的数据帧中紧挨在服务响应代码之后的数据,缺省值为0x0表示无故障。如果存在故障则以表5所示代码填充。
表5 故障信息表
3 实验仿真
3.1 利用CANoe建立实验环境
利用德国VECTOR的CANoe软件对该无人机总线控制系统进行了仿真测试。使用软件集成的CANdb数据库工具,把在应用层定义的参数引入到CANoe的开发环境中,CANoe规定每一个数据帧以消息的形式定义,而数据帧中的参数以信号的形式定义,节点上连接的设备则以环境变量的形式定义。图2为虚拟仿真网络节点拓扑图。
图2 虚拟仿真网络节点拓扑图
利用CAPL语言对虚拟节点进行编程,模拟虚拟节点对飞控单元的响应和故障模式,用于检验整个协议的性能[9]。
3.2 飞行控制模块软件的实现
飞行控制模块软件采用C语言编写,为保证系统的实时性,采用时间片轮转的方式,使飞行控制单元在宏观上对各个舵面和动力单元的输入操作是并行处理的,同时把CAN报文的发送和接收放到中断函数中进行处理,飞行控制操作由按键模拟输入。
NEC78K00893单片机的CAN模块配置在数据手册中有非常详细的介绍,唯一要注意的是,即使未使用的报文缓冲也要初始化,即所谓的最小初始化[10]。飞行控制模块在工作模式下的程序流程如图3所示。
图3 飞行控制模块的程序流程
诊断时的流程图与工作模式下的流程图类似,区别在于飞行控制单元不会对接收超时采取措施,改由诊断仪来判断飞行控制单元是否发送超时。
3.3 仿真结果
仿真时将飞行控制模块与CANoe连接起来,通过按键来对飞行控制模块进行操作,同时监测整个网络的负载率和报文的发送及接收情况。
诊断时,将CANoe与飞行控制模块连接起来,通过CANoe虚拟一个诊断节点,与飞控模块进行诊断会话,由于此时其他虚拟节点都设置为不起作用,因此虚拟诊断节点收到的是显示主控制节点与所有节点都发生通信故障的信息。仿真结果截图如图4所示。
4 结论
图4 仿真结果截图
由仿真结果可知,该网络的峰值负载率在7.0%左右,平均负载率约为6.5%,报文传输延时小于±1 ms,即使增加网络节点(更多任务负载)至网络,可预见的网络负载率仍然在普遍认为的30%范围内,满足飞行控制的需要;若增加一条冗余总线,只需按照协议规则安排ID分配,就可以起到备份的作用,提高控制系统的可靠性。
另外,从实际考虑,由于伺服机构所接受的PWM信号周期一般为20 ms,在这段时间内,飞行器空中状态的物理量变化也可近似为0,整个网络若选择更长一点的发送周期,不仅可保证伺服机构能够完整地输出动作,还可在一定程度上进一步降低系统和网络的负载,增加飞行器的空中滞留时间。
[1] 熊华钢.CAN总线及其较高层网络协议在航空航天上的可适用性探讨[J].导弹与航天运载技术,2004,33(4):47 -49.
[2] 邬宽明.CAN总线原理和应用系统设计[M].北京:北京航空航天大学出版社,1999:61-82.
[3] 王毅峰,李令奇.基于CAN总线的分布式数据采集与控制系统[J].工业控制计算机,2000(5):34-38.
[4] 付亮,李伟.CAN总线技术及其在现代汽车中的应用[J].中国汽车制造,2006(7):23-26.
[5] 秦贵和,葛安林.汽车网络技术[J].汽车工程,2008,25(2):1 -4.
[6] 欧阳琰,王贵槐.基于CAN总线的汽车仪表盘电控单元设计[J].武汉理工大学学报:信息与管理工程版,2009,31(1):78 -80.
[7] 胡思德.汽车车载网络(VAN/CAN/LIN)技术详解[M].北京:机械工业出版社,2006:182-183.
[8] 何进进,肖金生.基于CAN总线的汽车电子标识系统[J].武汉理工大学学报:信息与管理工程版,2007,29(1):15 -18.
[9] 王正山,顾耀林,戴月明.全自动汽车安全性能检测系统的设计与实现[J].汽车工程,2003,20(3):279 -282.
[10] 田亮,乔弘.LIN总线协议分析[J].中国仪器仪表,2007,3(12):5-7.