首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

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

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

(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所示,在为本文飞控配套开发的地面控制软件中绘制航线。

继承事业,薪火相传
返回列表