吉林建筑大学学士学位论文
3.5 实物介绍
本次毕业制作了实物,实物图如图3-15、3-16所示。
图3-15 遥控器实物图
图3-16 飞行器实物图
25
吉林建筑大学学士学位论文
实物操作细节如下所示:
上电:首先给遥控器上电,等待遥控器LED信号灯闪烁之后再给飞行器上电。第一步必须要这样做,这样做是为防止飞行器先上电之后接收到无线信号不准确从而导致飞行器出现不确定的飞行情况。
解锁:解锁过程需要双手同时操作,双手握住摇杆,左边摇杆控制油门,右边摇杆控制方向,当双手遥杆同时往下掰到最下方,持续2S左右,可以看到飞行器四周的LED灯开始闪烁,说明解锁成功。
上锁:上锁过程也需要双手同时操作,左手把摇杆掰到最左边位置同时右手把摇杆掰到最低位置,等待遥控器闪烁LED熄灭电机停止转动,说明以上锁,飞行器停止等待重新解锁过程。
飞行操作:待飞行器解锁成功之后,左手轻轻推动油门,可以看见飞行器电机慢慢开始转动起来,继续加大油门之后可以使飞行器飞起来,右手可以调整飞行的方向。
注意:上电顺序不能弄反,操作需缓慢进行,飞行器别在狭小的空间飞行,千万要固定好飞行器电池跟无线通信模块。
26
吉林建筑大学学士学位论文
第4章 系统软件设计
4.1 Keil MDK5.12简介
4.1.1 Keil MDK概述
Keil MDK,也称MDK-ARM,Realview MDK、I-MDK、uVision5 等。目前Keil MDK 由三家国内代理商提供技术支持和相关服务。
MDK-ARM软件为基于Cortex-M、Cortex-R4、ARM7、ARM9处理器设备提供了一个完整的开发环境。 MDK-ARM专为微控制器应用而设计,不仅易学易用,而且功能强大,能够满足大多数苛刻的嵌入式应用。
MDK-ARM有四个可用版本,分别是MDK-Lite、MDK-Basic、MDK-Standard、MDK-Professional。所有版本均提供一个完善的C / C++开发环境,其中MDK-Professional还包含大量的中间库。
4.1.1 Keil MDK功能特点
●完美支持Cortex-M、Cortex-R4、ARM7和ARM9系列器件; ●行业领先的ARM C/C++编译工具链;
●确定的Keil RTX ,小封装实时操作系统(带源码); ●μVision5 IDE集成开发环境,调试器和仿真环境; ●TCP/IP网络套件提供多种的协议和各种应用; ●提供带标准驱动类的USB 设备和USB 主机栈;
●为带图形用户接口的嵌入式系统提供了完善的GUI库支持;
●ULINKpro可实时分析运行中的应用程序,且能记录Cortex-M指令的每一 次执行;
●关于程序运行的完整代码覆盖率信息;
●执行分析工具和性能分析器可使程序得到最优化;
●大量的项目例程帮助你快速熟悉MDK-ARM强大的内置特征;
27
吉林建筑大学学士学位论文
●符合CMSIS (Cortex微控制器软件接口标准)。
4.2 软件设计框图
系统软件设计主要包括遥控器程序设计和飞行器程序设计。遥控器主要作用就是采集操控信息发送给飞行器,飞行器的程序是最重要的也是最难的,包括接收无线数据和惯性测量单元数据读取以及数据处理部分。遥控器和飞行器程序设计流程图如图4-1、4-2所示。
飞行器上电遥控器上电程序初始化MPU605初0始化IM偏U零处理GPIO初始化ADC初始化检测无线芯片?LED灯初始化NRF24L01初始化否是接收NRF24L01数据飞控解锁?No设置无线发送模式Yes读取MPU6050数据采集ADC电压以及按键状态并打包数据定时IMU计算以及PID电机控制是NRF24L01发送数据飞控上锁?否LED指示循环闪烁LED灯循环闪烁
图4-1 遥控器程序流程图 图4-2 飞行器程序流程图
在遥控器程序设计中,采用循环采集ADC电压并无线发送数据。ADC电压取值范围是0~2.5V,分辨率为100,采集到数据即为0~250,并把采集到的电压值存入无线传输缓存Buf数组里面。Buf数组定义为8位数据类型,设置了8位长度,Buf[0]里面存入帧头,Buf[1]里存放油门,Buf[2]存放左边摇杆数据,Buf[3]
28
吉林建筑大学学士学位论文
存入前后方向数据,Buf[4]存入左右方向数据,剩余部分存入按键状态信息。NRF24L01直接将读取的8位数据发送到飞行器端,进行实时控制。
在此次飞行器程序设计中,在主程序里面使用了三层while循环,进入初始化之后,首先循环是否检测到NRF24L01芯片,若检测到则往下执行,否则循环等待;其次是循环检测是否有解锁信号,收到解锁信号继续往下执行,否则等待;最后是主循环,循环读取数据并进行处理,电机控制,检测是否有上锁信号,若收到上锁信号,电机停止转动,LED灯停止闪烁,使用goto语句强制跳转到程序初始化,否则继续主循环。
在电机控制程序中,采用芯片自带定时器产生特定的PWM,其频率为20KHz。飞行器MCU通过定时器没2ms产生一次计数,计数5次即10ms读取一次MPU6050的数据并进行一次四元数计算以及PID计算在送给PWM,这10ms的时间里,有大约2ms在接收无线信号,2ms进电机控制程序,剩下时间空闲。这里2ms电机控制程序时间必须是一定的,因为在四元数计算和PID计算都有微分积分时间,这里的2ms既为算法里面微积分的时间。
4.3 软件调试仿真
本次毕业设计使用的是32位ARM芯片,此类芯片都支持JLINK在线硬件仿真调试和下载,跟51相比,在线硬件仿真调试大大缩减的程序的调试时间,并且能够更加直观的观察程序每一步的运行情况,同时处理器中所使用寄存器值的变化也一目了然,非常便于使用。
J-LINK仿真器目前已经升级到V9.1版本,其仿真速度和功能远非简易的并口WIGGLER仿真调试器可比。J-LINK支持ARM7、ARM9、ARM11,Cortex M0/M1/M3/M4,Cortex A4/A8/A9等内核芯片,支持ADS、IAR、KEIL开发环境。V9.3版本较V8.0版本进一步提升了下载速度,最大下载速度提升到1MByte/s。在程序设计过程中,通过KEIL MDK5.12版本创建工程,下载程序也通过JLINK的SWD模式下载。
程序在线仿真,主要是通过仿真器使其运行每一步程序然后观察寄存器值的变化来判断程序是否有Bug,对于程序简单的比如LED灯等这些程序,没必要用
29