基于STM32的四旋翼飞行器设计.docx
《基于STM32的四旋翼飞行器设计.docx》由会员分享,可在线阅读,更多相关《基于STM32的四旋翼飞行器设计.docx(24页珍藏版)》请在冰豆网上搜索。
基于STM32的四旋翼飞行器设计
第十一届中国研究生电子设计竞赛
技术论文
论文题目:
基于stm32的四旋翼飞行器设计
DesignofQuadrotorAircraftBasedonSTM32
参赛单位:
南京信息工程大学
队伍名称:
weare伐木累
指导老师:
行鸿雁
参赛队员:
张兰戴学飞钱坤
完成时间:
2016.6.18
摘要
四轴飞行器是一种结构紧凑、飞行方式独特的垂直起降式飞行器,与普通飞行器相比,具有结构简单、故障率低和单位体积能够产生更大升力等优点,所以在军事和民用多个领域都有广阔的应用前景,非常适合在狭小空间内执行任务。
本设计采用stm32f103zet6作为主控芯片,3轴加速度传感器mpu6050作为惯性测量单元,通过2.4G无线模块和遥控板进行通信,最终使用PID控制算法以PWM方式控制电子调速器驱动电机实现了四轴飞行器的设计。
关键词:
四轴飞行器,stm32;mpu6050,2.4G无线模块.PID.PWM
Abstract
Quadrocopterhasbroadapplicationprospectintheareaofmilitaryandcivilianbecauseofitsadvantagesofsimplestructure.Smallsize,lowfailurerate,takingoffandlandingertically.etc.itissuitableforhavingtaskinnarrowspace.
ThisdesignusesSTM32f103zet6asthemasterchip,andtriaxialaccelerometermpu6050inertialmeasurementunit,via2.4Gwirelessmoduleandremotecontrolpanelforcommunication.Finallyusingpidcontrolalgorithmwithpwmdrivestheelectronicspeedcontrollertochangemototorealizethedesignofquadrocopter.
Keyword:
quadrocopter,stm32,mpu6050,2.4Gwirelessmodule;pid;pwm
第一章作品难点与创新
1.1作品难点
对于一种芯片,最麻烦的就是底层的驱动了,很多驱动得自己编写,为了最大发挥处理器的性能,做了很多驱动优化,将不必要的延时降到最低,比如I2C总线驱动,官方的代码不符合自己的要求,通信效率低,我们花了几天的时间去优化这个驱动,使用了模拟的IIC接口,最后在保证稳定性的前提下,速度提高了一倍。
这个设计遇到的最大问题就是怎样保持飞行器的平衡。
开始的时候,我们以为很简单,不就是简单的闭环控制么,随着深入研究和实验,发现有些东西已经不能用我现有的知识来解答了,比如姿态的解算。
我想姿态解算也是这个项目的难点,怎样时时刻刻都准确的跟踪到飞行器的姿态。
很多人都知道使用加速度和陀螺仪检测物体的姿态,很多手机就有这些传感器,但是这两传感器在飞行器上貌似水土不服,陀螺仪随时间推移漂移了,加速度计由于电机的高速运转震动基本上处于半瞎状态。
所以我们使用了串级pid算法,并且优化了串级pid算法,使得在只用一个mpu6050的情况下,可以实现稳定的飞行,并且在飞行20层楼层的高度时可以飞出定高的效果。
调试过程中,采用无线通信芯片nrf24l01和stm32单片机作为控制端,同时用匿名四轴上位机显示状态。
1.2创新点
设计的创新点有两个,一是在于遥控器的控制方面,传统的飞行器控制飞行在于通过遥杆控制,通过对遥杆的物理操作实现飞机的左右前后飞行,我们则采用感应式姿态控制,通过遥控器上板载的mpu6050,去跟踪手的姿势,然后将手的物理动作对应到相应的角度,发送给飞控部分,飞控部分将接受到的信号作为期望的角度,实现飞行器的左右前后飞行。
本次设计的第二个创新点在于优化pid算法,单纯的pid算法是不足以控制动力如此大的大四轴,再加上只有一个六轴传感器mpu6050是不足以控制好大四轴的,通常市面上的飞行器姿态测量这方面会用到多个传感器,以实现飞行器姿态的跟踪。
但是我们只用了一个六轴传感器mpu6050就可以做到非常稳定的飞行,主要原因在于对算法的优化。
第二章方案论证与设计
本次设计选择的材料如下:
主控芯片:
STM32F103ZET6
无线通信:
NRF24L01
传感器:
MPU6050六轴传感器
遥控主芯片:
STM32F407ZGT6
机架的型号:
F450,重量282克。
电机轴距450mm,螺旋桨采用1045型。
电机则采用银燕MT-2216,810KV无刷电机,最高转速2极马达 210000 转/分钟,重量:
37g。
电调为好盈20A电子调速器,持续电流30A,短时电流40A。
电池则采用了 2200mah锂电池。
2.1飞控部分硬件框图
图2-1
从图中可以看出,STM32是电路的核心,它受5v电源控制,它负责和mpu6050,nrf24l01进行通信,处理数据,输出pwm信号给电子调速器,以得到控制电机的转速,实现飞行姿态的调整。
2.2遥控器部分硬件框图
图2-2
遥控部分STM32F407ZGT6作为主要芯片,nrf24l01f负责和飞控部分无线通信,遥杆主要控制油门大小,mpu6050负责跟踪手的姿势。
2.3各部分元器件介绍
本次设计主要的工作在于程序的编写,所以就需要对所需要的主芯片和各个模块有一个详细的了解,接下来给大家介绍下我们所用的芯片口和模块介绍。
2.3.1stm32介绍
内核:
ARM32位的Cortex-M3,最高72MHz工作频率,在存储器的0等待周期访问时可达1.25DMips/MHZ(DhrystONe2.1)单周期乘法和硬件除法。
存储器:
从32K到512K字节的闪存程序存储器(STM32F103XXXX中的第二个X表示FLASH容量,其中:
“4”=16K,“6”=32K,“8”=64K,B=128K,C=256K,D=384K,E=512K),最大64K字节的SRAM。
电源管理:
2.0-3.6V供电和I/O引脚,上电/断电复位(POR/PDR)、可编程电压监测器(PVD),4-16MHZ晶振振荡器,内嵌经出厂调教的8MHz的RC振荡器,内嵌带校准的40KHz的RC振荡器,产生CPU时钟的PLL,带校准的32KHz的RC振荡器
低功耗:
睡眠、停机和待机模式,Vbat为RTC和后备寄存器供电。
模数转换器:
2个12位模数转换器,1us转换时间(多达16个输入通道),转换范围:
0至3.6V,双采样和保持功能,温度传感器。
DMA:
2个DMA控制器,共12个DMA通道:
DMA1有7个通道,DMA2有5个通道。
支持的外设:
定时器、ADC、SPI、USB、IIC和UART,多达112个快速I/O端口(仅Z系列有超过100个引脚),26/37/51/80/112个I/O口,所有I/O口一块映像到16个外部中断;几乎所有的端口均可容忍5V信号。
调试模式:
串行单线调试(SWD)和JTAG接口,多达8个定时器,3个16位定时器,每个定时器有多达4个用于输入捕获/输出比较/PWM或脉冲计数的通道和增量编码器输入,1个16位带死区控制和紧急刹车,用于电机控制的PWM高级控制定时器,2个看门狗定时器(独立的和窗口型的),系统时间定时器:
24位自减型计数器。
多达9个通信接口:
2个I2C接口(支持SMBus/PMBus),3个USART接口(支持ISO7816接口,LIN,IrDA接口和调制解调控制),2个SPI接口(18M位/秒),CAN接口(2.0B主动),USB2.0全速接口。
计算单元:
CRC计算单元,96位的新批唯一代码。
封装:
ECOPACK封装。
图2-3
2.3.2电子调速器
电调全称电子调速器,英文ElectronicSpeedControl,简称ESC。
针对电机不同,可分为有刷电调和无刷电调。
它根据控制信号调节电动机的转速。
本文采用好盈电调20A。
对于它们的连接,一般情况下是这样的:
1、电调的输入线与电池连接;
2、电调的输出线(有刷两根、无刷三根)与电机连接;
3、电调的信号线与接收机连接;
另外,电调一般有电源输出功能,即在信号线的正负极之间,有5V左右的电压输出,通过信号线为接收机供电,接收机再为舵机等控制设备供电。
电调的输出为三~四个舵机供电是没问题的。
因此,电动的飞机,一般都不需要单独为接收机供电,除非舵机很多或对接收机电源有很高的要求。
2.3.3mpu6050六轴传感器
MPU6050是InvenSense公司推出的全球首款整合性6轴运动处理组件,内带3轴陀螺仪和3轴加速度传感器,并且含有一个第二IIC接口,可用于连接外部磁力传感器,利用自带数字运动处理器(DMP:
DigitalMotionProcessor)硬件加速引擎,通过主IIC接口,可以向应用端输出完整的9轴姿态融合演算数据。
有了DMP,我们可以使用InvenSense公司提供的运动处理资料库,非常方便的实现姿态解算,降低了运动处理运算对操作系统的负荷,同时大大降低了开发难度。
DMP是InvenSense公司的MPU器件独特的硬件功能,它能够直接从传感器读出计算好的四元数的数据,获取设备的姿态。
DMP功能保存在主处理机的易失性内存中,若需要使用DMP功能,则每次芯片上电后都需要初始化。
DMP程序库项目中提供的示例应用程序中给出了更新映像和初始化DMP功能的一系列步骤。
加载并启用DMP功能的步骤包括:
(1)通过函数dmp_load_motion_driver_firmware()把DMP载入MPU内存。
(2)通过dmp_set_orientation()函数更新定位矩
(3)当DMP检测到运动或撞击时会触发DMP回调功能。
(4)通过函数dmp_enable_feature()启用DMP功能。
四旋翼飞行器运用姿态解算计算出空间三轴欧拉角。
MPU6050与MCU连接方式如图2-4所示,陀螺仪采样三轴角速度值,加速度传感器采样三轴加速度值,而磁力传感器采样得到三轴地磁场值,将陀螺仪、加速度传感器、磁力传感器采样后的数据进行标定、滤波、校正后得到三轴欧拉角度,其中陀螺仪和加速度传感器选用MPU6050芯片,采用IIC总线与主控板通信。
图2-4
2.3.4无线通信NRF24L01
NRF24L01是NORDIC公司生产的一款无线通信通信芯片,采用FSK调制,集成NORDIC自家的EnhancedShortBurst协议。
可以实现点对点或是1对6的无线通信。
无线通信速度最高可达到2Mbps。
NRF24L01采用SPI通信,可以很方便的连接到MCU上面。
①2.4G全球开放的ISM频段,免许可证使用。
②最高工作速率2Mbps,高校的GFSK调制,抗干扰能力强。
③126个可选的频道,满足多点通信和调频通信的需要。
④内置CRC检错和点对多点的通信地址控制。
⑤可设置自动应答,确保数据可靠传输。
NRF24L01模块介绍
图2-5
CE:
模式控制线。
在CSN为低的情况下,CE协同CONFIG寄存器共同决定NRF24L01的状态(参照NRF24L01的状态机)
CSN:
SPI片选线
SCK:
SPI时钟线
MOSI:
SPI数据线(主机输出,从机输入)
MISO:
SPI数据线(主机输入,从机输出)
IRQ:
中断信号线。
中断时变为低电平,在以下三种情况变低:
TxFIFO发完并且收到ACK(使能ACK情况下)、RxFIFO收到数据、达到最大重发次数。
第三章原理分析与硬件电路图
3.1飞行器空气动力学分析
四旋翼对称分布在机体的前后、左右四个方向,四个旋翼处于同一高度平面,且四个旋翼的结构和半径都相同,四个电机对称的安装在飞行器的支架端,支架中间空间安放飞行控制计算机和外部设备。
结构形式如图3.1所示。
图3-1
四旋翼飞行器通过调节四个电机转速来改变旋翼转速,实现升力的变化,从而控制飞行器的姿态和位置。
四旋翼飞行器是一种六自由度的垂直升降机,但只有四个输入力,同时却有六个状态输出,所以它又是一种欠驱动系统。
四旋翼飞行器的电机1和电机3逆时针旋转的同时,电机2和电机4顺时针旋转,因此当飞行器平衡飞行时,陀螺效应和空气动力扭矩效应均被抵消。
图3-2
在图3-2中,电机1和电机3作逆时针旋转,电机2和电机4作顺时针旋转,规定沿x轴正方向运动称为向前运动,箭头在旋翼的运动平面上方表示此电机转速提高,在下方表示此电机转速下降。
垂直运动:
同时增加四个电机的输出功率,旋翼转速增加使得总的拉力增大,当总拉力足以克服整机的重量时,四旋翼飞行器便离地垂直上升;反之,同时减小四个电机的输出功率,四旋翼飞行器则垂直下降。
俯仰运动:
在图(b)中,电机1的转速上升,电机3的转速下降(改变量大小应相等),电机2、电机4的转速保持不变。
由于旋翼1的升力上升,旋翼3的升力下降,产生的不平衡力矩使机身绕y轴旋转,同理,当电机1的转速下降,电机3的转速上升,机身便绕y轴向另一个方向旋转,实现飞行器的俯仰运动。
(3)滚转运动:
与图b的原理相同,在图c中,改变电机2和电机4的转速,保持电机1和电机3的转速不变,则可使机身绕x轴旋转(正向和反向),实现飞行器的滚转运动。
(4)偏航运动:
旋翼转动过程中由于空气阻力作用会形成与转动方向相反的反扭矩,为了克服反扭矩影响,可使四个旋翼中的两个正转,两个反转,且对角线上的各个旋翼转动方向相同。
当电机2和电机4的转速下降时,机身便在富余反扭矩的作用下绕z轴转动,实现飞行器的偏航运动。
(5)前后运动:
要想实现飞行器在水平面内前后、左右的运动,必须在水平面内对飞行器施加一定的力。
在图e中,增加电机3转速,使拉力增大,相应减小电机1转速,使拉力减小,同时保持其它两个电机转速不变,反扭矩仍然要保持平衡。
飞行器首先发生一定程度的倾斜,从而使旋翼拉力产生水平分量,因此可以实现飞行器的前飞运动。
(6)倾向运动:
在图f中,由于结构对称,所以倾向飞行的工作原理与前后运动完全一样。
3.2飞控部分硬件电路图设计
图3-3
3.3遥控部分硬件电路图设计
图3-4
第四章软件设计与流程
4.1pid算法分析
PID控制器(比例-积分-微分控制器)是一个在工业控制应用中常见的反馈回路部件,由比例单元P、积分单元I和微分单元D组成。
PID控制的基础是比例控制;积分控制可消除稳态误差,但可能增加超调;微分控制可加快大惯性系统响应速度以及减弱超调趋势。
PID(比例(proportion)、积分(integral)、导数(derivative))控制器作为最早实用化的控制器已有近百年历史,现在仍然是应用最广泛的工业控制器。
PID控制器简单易懂,使用中不需精确的系统模型等先决条件,因而成为应用最为广泛的控制器。
PID控制器的数学模型:
输入量为r(t);
输出量为y(t);
偏差量为e(t)=r(t)-y(t);
PID算法的定义:
(1)
其流程框图如图4-1。
图4-1
PID算法公式适用于连续系统,因此单片机控制系统不能够直接使用,因此在此基础上使用离散的控制模型,也叫0阶保持器的离散系统,将上式离散化,需要使用后向差分法。
首先将上式的积分传递函数转化为连续的S域模型:
(2)
使用后向差分法可以得到s域到z域的映射关系:
(3)
于是可以得到:
(4)
其中:
因此得到离散的PID表达式:
(5)
在编程时,可写成:
(6)
P-----改变P可提高响应速度,减小静态误差,但太大会增大超调量和稳定
时间。
I-----与P的作用基本相似,但要使静态误差为0,必须使用积分。
D-----与P,I的作用相反,主要是为了减小超调,减小稳定时间。
e(n)--------------------------本次误差。
e(n)+e(n-1)+...+e(0)------所有误差之和。
e(n)-e(n-1)------------------控制器输出与输入误差信号的微分(即误差的变化率),具有预见性,能预见偏差变化的趋势,因此能产生超前的控制作用,在偏差还没有形成之前,已被微分调节作用消除。
因此,可以改善系统的动态性能。
在微分时间选择合适情况下,可以减少超调,减少调节时间。
微分作用对噪声干扰有放大作用,因此过强的加微分调节,对系统抗干扰不利。
4.2串级pid系数的整定
内环P:
从小到大,拉动四轴越来越困难,越来越感觉到四轴在抵抗你的拉动;到比较大的数值时,四轴自己会高频震动,肉眼可见,此时拉扯它,它会快速的振荡几下,过几秒钟后稳定;继续增大,不用加人为干扰,自己发散翻机。
特别注意:
只有内环P的时候,四轴会缓慢的往一个方向下掉,这属于正常现象。
这就是系统角速度静差。
内环I:
PID原理可以看出,积分只是用来消除静差,因此积分项系数个人觉得没必要弄的很大,因为这样做会降低系统稳定性。
从小到大,四轴会定在一个位置不动,不再往下掉;继续增加I的值,四轴会不稳定,拉扯一下会自己发散。
特别注意:
增加I的值,四轴的定角度能力很强,拉动他比较困难,似乎像是在钉钉子一样,但是一旦有强干扰,它就会发散。
这是由于积分项太大,拉动一下积分速度快,给的补偿非常大,因此很难拉动,给人一种很稳定的错觉。
内环D:
这里的微分项D为标准的PID原理下的微分项,即本次误差上次误差。
在角速度环中的微分就是角加速度,原本四轴的震动就比较强烈,引起陀螺的值变化较大,此时做微分就更容易引入噪声。
因此一般在这里可以适当做一些滑动滤波或者IIR滤波。
从小到大,飞机的性能没有多大改变,只是回中的时候更加平稳;继续增加D的值,可以肉眼看到四轴在平衡位置高频震动(或者听到电机发出滋滋的声音)。
D项属于辅助性项,因此如果机架的震动较大,D项可以忽略不加。
外环P:
当内环PID全部整定完成后,飞机已经可以稳定在某一位置而不动了。
此时内环P,从小到大,可以明显看到飞机从倾斜位置慢慢回中,用手拉扯它然后放手,它会慢速回中,达到平衡位置;继续增大P的值,用遥控器给不同的角度给定,可以看到飞机跟踪的速度和响应越来越快;继续增加P的值,飞机变得十分敏感,机动性能越来越强,有发散的趋势。
4.3串级pid系统框图
图4-2
4.3软件设计流程图
4.3.1飞控部分程序设计
图4-3
4.3.2遥控部分程序设计
图4-4
第五章系统测试与误差分析
5.1PID调试一般原则
1)在输出不振荡时,增大比例增益P
2)在输出不振荡时(能消除静态误差就行),减小积分时间常数Ti
3)在输出不振荡时,增大微分时间常数Td
5.2matlab仿真模拟测试pid参数
图5-1
纯P调节(Kp大,稳态误差小,响应快,但超调大)
PI调节(TI小,响应速度快,超调大,系统震荡加剧)
PI调节(在同样积分常数Ti下,减小比例增益Kp可减小
超调,增加系统的稳定性)
PD调节(引入微分项,提高了响应速度,增加了系统的稳定性但不能消除系统的余差)
PD调节(微分时间越大,微分作用越强,响应速度越快,系统越稳定)
PID调节(PD基础上I作用的引入消除了余差,达到了理想的多项性能指标要
求:
超调、上升时间、调节时间、余差等)
5.3心得
在整定PID参数时,PID三个参数的大小都不是绝对的,而是相对的。
也就是说,如果发现一个参数比较合适,就把这个参数固定死,不管别的参数怎么变化,永远不动前 面固定的参数。
这是要不得的。
串级调节系统,在整定参数时,一般把主、副调隔离开来,先整定一个回路,再全面考虑。
一般而言,先整定内回路。
把PID参数隔离开来,先去掉积分、微分作 用,让系统变为纯比例调节方式,再考虑积分,最后考虑微。
第六章总结
首先,为了让四轴平稳的悬停或飞行在半空中,四个电机必须提供准确的力矩->假设力矩与电机PWM输出呈线性关系,也就是必须提供准确的4路PWM->4路PWM由遥控器输入(期望角度)、PID算法及其参数和姿态解算输出(当前角度)组成,假设遥控器输入不变(类似脱控)、PID算法及其参数也较为准确(PID参数无需十分精确,但只要在某个合理的范围内,控制品质差不了多少),也就是姿态解算的输出必须是十分准确的,可以真实反应飞行器的实际角度->姿态解算的结果由加速度计和陀螺仪给出,根据前述惯性导航的描述,加速度计补偿陀螺仪,因此要得到精确的姿态解算结果,务必要求加速度输出精确的重力加速度g->这里仅讨论悬停飞行,因此忽略掉额外的线性加速度(事实证明,在四轴强机动飞行过程中,线性加速度必须要考虑并消除),假设加速度计输出重力加速度g,这个重力加速度g必须十分“精确”。
总结一下:
精准力矩->精准PWM->精准姿态->加速度计输出“精确”重力加速度g。
这里的“精确”打了引号,意思不是说加速度的性能十分好,要输出精确的当地加速度g,而是说它能够准确反应机架的角度。
为了达到悬停、平稳的飞行效果,控制算法输出的PWM会让加速度计输出的重力加速度g在XOY平面内的分量就可能少,也就是说:
PID控制算法控制的不是机架水平,而是加速度计水平,PID不知道机架是什么东西,它只认加速度计,它的使命就是让加速度计水平。
我现在假设加速度计与机架存在某个角度,比如右倾30°,四轴主视图如图6-1所示。
图6-1
加速度计(红线)与四轴机架的水平面(虚线)呈30°。
起飞后,PID控制算法会尝试将加速度计调整至水平位置,因此四轴就会往图中左边飘,倾斜角度也为30°。
这就是为什么飞机无法垂直起飞,或者飞行过程中往一个方向飘的原因:
加速度计和机架没有水平。
因此在加速度计的机械安装时,尽量保证加速度计与机架水平。
如果有些朋友已经将加速度计固定在飞控板上,可以通过遥控器的通道微调功能设置悬停时的期望角度,软件上校正这种机械不水平。
除了上述讨论的加速度计安装水平问题,也需要对加速度计进行零偏置校正,具体的方法叫做6位置标定法:
即将加速度计沿着6个方向放置,分别记录重力加速度计g在6个方向上的最大输出值,然后取平均,得到圆球的中心点(这里假设g投影为球,实际上为椭球,需要进行最小二乘法拟合求三轴标定系数)。
最后提一点,如果加速度计和遥控器均做了调整,飞机可以做到垂直起飞,并且飞行效果还行,但是飞机的回中速度较慢,感觉就像是在抬轿子一样。
具体描述:
悬停时,猛往一个方向打摇杆后立即放手,飞机会往摇杆方向走很远才停下。
这是因为飞机过于稳定,也就是内环的作用过强或者外环作用过弱导致,解决方法是降低内环P或者加大外环P。
参考文献
[1]吴东国.基于四旋翼飞行器平台的低空遥感技术在公路环境调查中的应用[J].公路交通技术,2012,第6期:
137-138.
[2]姬江涛,扈菲菲,贺智涛,杜新武,刘剑君.四旋翼无人机在农田信息获取中的应用[J].农机化研究,2013,第2期:
1-4.
[3]赵晨,杜勇.四旋翼无人机在输电线路巡视中的应用[