1 引言
小型无人机具有重量轻、使用费用低、机动灵活等特点,在军用、民用领域有着广泛的应用。在民用领域,无人机可搭载不同任务载荷完成诸如国土资源保护、城市规划、电视台航拍、大气监测、交通监察、边境及海岸线巡逻、灾情监视等任务;在军事上,可以执行空中侦察、充当靶机、导弹攻击、充当诱饵、战场损伤评估和电子站等任务,已成为许多国家军队的主要武器装备。
飞行控制器承担着无人机的姿态控制、导航控制、与地面控制站的通信、任务载荷控制等任务,是小型无人机的核心。评价小型无人机的飞行控制器的优劣的指标之一是其控制的精度。提高飞行控制器的控制精度的方法有:提高获取飞机状态信息的精度;采用先进的控制算法提高控制性能[1-3];提高控制指令输出的实时性等。而要实现以上目标就须有高性能的MCU和合理的硬件电路设计。
本文针对这一问题,设计了基于ARM11(S3C6410)+CPLD(EPM1270)的飞行控制器。ARM11架构的MCU S3C6410接口丰富、运算速度快;CPLD芯片的应用提高了系统的实时性。以下将阐述该飞行控制器的设计。
2 飞行控制器硬件系统的设计
本文飞行控制器以S3C6410和CPLD(EPM1270)为核心,将无人机系统各部分有机整合,硬件构架具体如图1所示。
S3C6410采用ARM1176JZF-S的核,该核在电压为1.2V的情况下,可以运行到667MHz[4],高主频保证了飞控有较强的计算能力。S3C6410拥有丰富的接口,本文通过UART串口通讯连接了GPS模块和数传电台;SPI通讯接口连接了ADIS16365惯性系统传感器(含加速度、角速度传感器),两个MS5540气压传感器。S3C6410可连接大容量内存和FLASH,本设计中配置了256M 的DDR RAM和1G的NAND FLASH,大容量的内存是飞控进行大量计算及数据存储的保证。
而CPLD模块选用ALTERA公司的EPM1270芯片,该模块完成遥控接收机控制指令的接收及解码;多路PWM控制指令的解码及输出;任务载荷的控制管理。CPLD的应用,使得飞行控制器在处理遥控指令、姿态控制上具备了运算速度快、实时性强的特点。
基于上述两模块构建的飞行控制器,按其功能可分为:导航功能模块、姿态控制功能模块、通信功能模块、任务载荷功能模块。本文选取导航功能模块和姿态控制功能模块的硬件设计进行阐述。
2.1 导航功能模块硬件设计
导航功能模块主要实现无人机按设定航点、航线飞行的功能,这需要计算无人机当前的位置和目标位置之差。本文设计了GPS、气压传感器来获取无人机当前的位置信息,即经度、纬度、高度、速度、航向等。在硬件设计上,设计了UART口与GPS模块连接,气压传感器与GPIO口连接的外围硬件电路。
飞控的GPS模块采用的是UBLOX公司的型号为LEA-5H的GPS模块,本设计中GPS模块采用的是外接的形式,即GPS模块可根据机体的实际情况放置在合适位置,所以设计时在飞控主板的接口中预留TX、RX、VDD5V、GND四个引脚,这四个引脚连接到MCU的UART口。
飞控的两个气压传感器都采用瑞士INTERSEMA公司的MS5540芯片,一个用以测量飞机的高度,另一个用来测量飞机的空速。本设计中利用S3C6410的GPIO,模拟SPI通讯接口方式来实现通讯。MS5540需要外接工作时序脉冲,利用CPLD分频后产生相应工作脉冲,接入MS5540。其余MS5540通讯引脚都与普通IO相连。
2.2 姿态控制功能模块硬件设计
姿态控制功能模块主要由采集姿态数据和输出姿态控制指令两部分构成。
本文姿态传感器采用ADI公司的ADIS16365惯性传感器。ADIS16365内部集成3个陀螺仪和3个加速计,测量范围可达为±300°/sec,±18g,角度分辨率为±80°/sec。应用ADI的iMEMS Motion Signal Processing(运动信号处理)技术,对电压变化、温度变化及其它影响进行校准,具有动态补偿功能[5]。ADIS16365提供一个串行外部接口SPI。硬件电路设计上,连接SPI通讯端口、片选脚,如图2所示。ADIS16365对于电压的稳定性要求较高,其工作电压为4.75V-5.25V,系统板电源设计上要考虑到电压的输出范围。
姿态控制是通过控制无人机上各数字舵机的转角大小和动力大小来实现。本文无人机以锂聚合物电池作为动力电源,由电子调速器来控制直流无刷电机的转速,电子调速器通过输入的PWM信号控制。数字舵机的转动角度由输入到舵机信号线的PWM信号决定。本文无人机上的4路PWM控制信号,周期为20ms,脉宽范围为1ms至2ms,都由CPLD产生,其内部实现过程如图3所示,各模块功能介绍如下:
(1) SPI数据接收模块,负责对MCU发出的数据及指令进行实时的接收。实现的基本原理是模拟从设备SPI通讯协议,数据通讯采用的是16位数据结构,另外SPI接收模块只负责对MCU数据的接收,不负责对CPLD内部数据的发送操作,目的是增加了模块实现的可能性。从SPI接收模块的端口引脚可以大致将其定义为一个由串口通讯转化为并口通讯的转换模块。
(2) 数据内部传送模块,负责对SPI接收进的数据进行解析,主要是将数据与命令分开。这里所谓的命令,指的是PWM控制通道的选择。本设计中只需有4路PWM输出,所以只需在模块中任选4路。通过这种方案,可以实现任意多路PWM输出,可解决MCU PWM输出端口不足,实现端口扩展。
(3) 数据保存模块,数据保存模块功能可以描述成一个数据寄存器,即实现传送数据的保持与刷新,存放的数据即为PWM波形的高电平数值。也可称其为数据的缓冲器,在SPI数据传输到PWM发生器过程中加入该模块,可使得数据更加的稳定可靠。
(4) PWM波形发生模块,通过对端口数据的读写,实现PWM波形的发生。PWM的数据是多变的,即占空比的大小是多变的。在设计时程序中加入了状态判断,实现波形的稳定输出,避免了由于数据多变造成的PWM波失真。PWM发生模块的基准时钟频率由CLK端口进入,周期为0.4us。
(5) PWM周期设定模块,提供了PWM波的周期数据输出,通过改变程序参数可以任意改变波形频率。
(6) 分频模块,实现对系统时钟25M进行分频,提供一个周期为0.4us的PWM基准时钟。
本文飞行控制器在特定模式下可接收地面遥控器的指令实现姿态控制,指令分为升降、副翼、方向、油门、是否定高、是否盘旋、是否开伞、平衡量、任务载荷9个通道发送到无人机上的遥控接收机,遥控接收机转换为PWM信号后,由CPLD采集。CPLD采集接收机PWM信号的实现如图4所示,实现过程如下:
本文设计了9路PWM脉宽数据采集,该模块输入0.4us的基频,将外部PWM波形信息转换为数值信息,再由SPI传输模块,传入MCU。SPI数据传送模块,实现上模拟从SPI设备。该设计有效解决端口不足,释放了MCU资源,也提高系统实时性。
3 软件系统设计
在上述飞行控制器硬件平台上,移植Linux操作系统(Linux 2.6内核),并对Linux内核作裁剪,对内核加上Xenomai补丁[8],Xenomei技术使得操作系统运行在双内核下,多了一个强实时的微内核,能满足飞控的实时性要求。在此基础上进行飞行控制器软件设计。飞行控制器软件主要由硬件接口驱动、导航控制程序、姿态控制程序组成。
3.1 接口驱动程序设计
(1) UART接口驱动:GPS与MCU的连接通过UART串口,所以GPS驱动需要串口驱动的支持。本文的GPS接口驱动,没有采用linux内核里自带的串口驱动程序,而是通过内存映射以及内核函数直接对MCU内部UART寄存器进行读写操作,从而实现了高效的GPS数据读取操作。由于对GPS数据信息实时性要求不高,驱动采用了查询模式[9]。接收的数据量大小为一组完整GPS NMEA协议定义的数据的大小,本设计使用了NMEA协议中的GGA,RMC语句,最后通过底层的内核数据传递函数将GPS数据从内核层传输到应用层。
(2) 姿态传感器驱动程序:ADIS16365通过SPI接口与MCU进行数据通信,所以在ADIS16365驱动模块中要实现SPI的读写驱动。方法是通过内核函数对SPI寄存器读写赋值操作,从而实现数据的收发。除了SPI数据收发驱动外还得构造出ADIS16365规定的数据通信时序,只有正常的时序才能实现数据的正确利用。ADIS16365一次完整的数据读取流程需要32个CLK脉冲,1秒内平均采集数据408次,满足精度要求。
(3) CPLD驱动设计:本文飞控MCU与CPLD的通信采用的是SPI通信方式,驱动程序的实现也是通过内核函数对SPI寄存器读写赋值操作,从而实现数据的读写。CPLD为自定义的硬件模块,其通信的数据格式也是自己定义的,CPLD内部通讯数据位为32位,定义前二位为路数控制地址信号。
3.3 导航控制程序设计
导航控制是指控制无人机按照存储在飞行控制器中的航点数据自主飞行,航点依次两两连接成直线段即构成航线。每个航点包括航点序号、经度、纬度、高度值信息。而航点、航线的输入是通过地面控制站软件中绘制并通过数传电台上传到飞控中,如图5所示,在为本文飞控配套开发的地面控制软件中绘制航线。
导航控制中的高度控制主要通过计算无人机的高度误差,进而计算输出给升降舵机的PWM值来控制高度。高度可由MS5540气压传感器测得的高度与GPS模块的高度数据融合计算后获得。
导航控制中的航向控制流程如图6所示。该流程先读入FLASH中的航点数据,再由GPS获取当前位置信息,进而计算航向角、偏航距、偏航角。航向角的计算是在GPS读出的航向字段基础上,加上前后两时刻的位置差进行修正获得。
偏航距和偏航角的计算如图7所示。
设A点为无人机当前位置,B为第n个航点,C为第n+1个航点。图7中,以B为坐标原点,X轴表示经度,Y轴表示纬度构建直角坐标系。在地球表面,任意两点
离即线段AB的值,无人机与终点距离即线段AC的值,航线起点与终点距离即线段BC的值,再根据点到直线距离公式,可求得线段AD即偏航距,根据三角形余弦定理可求出∠ABD, ∠ABD即为偏航角。
无人机飞行过程中,判断是否过航点是读取下一个航点的必要条件。当无人机飞过航线的垂直线EF既为过航点。判断方法是,过C点绘出Y轴平行的线段CG,求线段BC与CG的夹角减线段AC与CG夹角的差值,计算该差值的绝对值,若|a1-a2|>90则判定为过点。
3.4 姿态控制程序设计
姿态控制主要由俯仰姿态、滚转姿态控制构成,以俯仰姿态控制为例,其控制结构如图8所示:
本文设计了PID控制器实现姿态控制,而俯仰角由姿态传感器ADIS16365测量并经姿态计算而得。ADIS16365测量的是机体坐标系下的数值,而要表达机体相对于参考坐标系的姿态,需进行姿态计算。姿态计算以角速度测量值和运载体的初始条件为输入,姿态计算后,输出飞机的姿态信息和比力坐标变换所需的姿态矩阵。在姿态计算过程中,因四元数法在实际求解中需更新的参数少、精度较高的特点,本文采用四元数法求解。
载体坐标系中的矢量在参考坐标系的表示可通过式(1)计算出:
(4)
是由其在载体坐标系的对应各轴的角速率分量构成,由姿态传感器ADIS16365测得。本文采用四阶龙格库塔法解(3)式。的求解,构建了姿态矩阵 ,再根据(8),(9),(10)求解俯仰角 、横滚角、偏航角 ,即获得机体的姿态。
基于姿态数据及各轴角速率,PID控制器的输出由(11)式计算[6][7]:
K为采样序号、为第k次控制输出值、为第k次采样输入偏差、为前次采样输入偏差、积分系数、微分系数,为比例系数。
4 系统测试
基于上述设计方案研制的飞行控制器主板如图7所示,安装于测试飞机如图9所示。
本文在某校园区进行多次飞行测试,飞行的航线如图9所示,航线由16个航点构成,航点高度都为300米,航线总长度为8.57公里。无飞机的实际飞行航迹如图9中蓝色线条所示,本次测试从进入航线开始到航线结束共自主飞行了18分钟,姿态稳定,最大偏航距≤15米。
试飞测试的任务载荷为航拍相机,CPLD每4秒输出一拍照脉冲,航拍图片如12所示。
5 结束语
本文阐述基于ARM11+CPLD飞行控制器的构建, ARM11的高速处理能力,使得系统的实时性高,系统飞行更加稳定,且接口丰富,利于功能扩展;CPLD在飞控系统中一方面起到扩充MCU IO口的作用,另一方面提高了系统的实时性。在此飞控主板上,本文实现了导航、姿态、任务等功能模块,飞行测试结果理想。
参考文献:
[1] 徐田来,崔平远,崔祜涛.基于置信度加权的组合导航数据融合算法[J].航空学报,2007,28(6):1389-1394.
[2] Ick-Ho Whang,Won-Sang Ra.Simple Altitude Estimator using Air-Data and GPS Measurements[C].Proceedings of the 17th World Congress of the International Federation of Automatic ControlSeoul,Korea,ION,2008:4060-4065.
[3] 陈龙胜,姜长生.基于干扰观测器的无人机着陆飞行逆控制器设计[J].电光与控制,2009,16(9):52-56.
[4] SAMSUNG Company.S3C6410 HW Design Guide V1.0 [EB/OL].[2011-08-10]. http://www.samsung.com
[5] Analog Devices.ADIS16365 MANUAL [EB/OL]. [2011-08-10].http://www.analog.com
[6] Bryson.A.E.Jr.,Control of Spacecraft and Aircraft[M].Princeton,NJ:Princeton University Press,1994.
[7]ROBERT C.NELSON 顾均晓(译).飞行稳定性和自动控制[M].北京:国防工业出版社,2007.
[8] 韩守谦,裴海龙,王清阳.基于Xenomai的实时嵌入式Linux操作系统的构建[J].计算机工程与设计,2011,(1):96-98
[9] 俞永昌.设备驱动开发技术及应用[M].北京:人民邮电出版社,2010.
拍照脉冲,航拍图片如12所示。