微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于ARM11+CPLD的小型无人机飞行控制器设计

基于ARM11+CPLD的小型无人机飞行控制器设计

时间:12-12 来源:互联网 点击:

模块实现的可能性。从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所示:

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top