找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7332|回复: 16
收起左侧

基于STM32F407单片机的四轴裸机飞控源程序与制作调试

  [复制链接]
ID:888558 发表于 2021-3-5 09:58 | 显示全部楼层 |阅读模式
这个是两年前自己制作的,
选用STM32F407单片机最小系统,外围模块均可某个宝弄,非开源飞控板,
具体程序、模块信息及接线在附件word文档中。
程序代码质量不好,望大家多多指点。
在这里感谢正点原子,裸机程序使用正点原子的程序模块搭建。

制作出来的实物图如下:

IMG_0466.JPG
四轴飞行器动力学建模
2.1 四轴飞行器的飞行原理

四轴飞行器的结构是由两个支架交叉形成机架,然后在两个支架的两端配备螺旋桨如图2-1。根据牛顿第三定律中作用力与反作用力的关系,螺旋桨产生向下的力,而对飞行器自身会得到一个向上的升力,从而去克服重力作用。当四个螺旋桨产生的升力大于重力时,飞行器将会脱离地面,根据牛顿第二定律中物体加速度跟质量与受力的关系,四轴飞行器将会得到一个向上的加速度使得飞行器在垂直方向上运动得越来越快,但是当飞行器脱离地面后,当升力与重力相等时,飞行器将会保持之前的上升速度做匀速上升。因此四旋翼飞行器通过改变四个电机的转速来实现飞行器的姿态和位置控制,然而飞行器由于机械结构的差异和环境影响,若只通过电机得到升力来达到稳定飞行是远远不够的,所以需要加入微型计算机来实时控制各个电机的转速。


图2-1 四旋翼飞行器模型

2.2 四轴飞行器的数学模型

在不计飞行器的弹性形变和震动的情况下,四旋翼飞行器当作一个具有六自由度刚体,并输出四个电机的转速。令飞行器相对于地面坐标系的三个欧拉角分别为滚动角、俯仰角、偏航角,因此地面坐标系与刚体坐标系的旋转矩阵R(推导见4.3章节)和平移矩阵为T(推导见4.3章节)

  (2.1)

                   (2.2)

假设飞行器三个轴所受的扰动,并且飞行器为“X”型,根据牛顿第二定律有公式(2.3)

                         (2.3)

式中表示飞行器在地面坐标系三个轴上的合力;F表示飞行器四个旋翼的整体升力大小;R表示从飞行器坐标系(刚体坐标系)映射到地面坐标系的旋转矩阵;表示F在飞行器坐标系的方向。再根据角动量定理得到最终的系统动力学模型为:

              (2.4)

                (2.5)

                          (2.6)

              (2.7)

              (2.8)

                     (2.9)

其中,是四个旋翼的转速,b为阻力因素;m为飞行器质量;g为重力加速度;l为电机到四旋翼飞行器几何中心的距离;为螺旋桨绕轴的转动惯量;为各方向上的转动惯量;为桨叶整体的速度;d为风阻系数。

而在实际控制中是写成系统状态方程的形式,其中状态惯量与控制量输入可表示为

                   (2.10)

                  (2.11)

2.3 四轴飞行器的姿态解析

四旋翼作为一个四输入六输出的欠驱动系统,只需要控制四个电机的转速,便可以有效的控制飞行器的姿态,需特别注意的是为了抵消电机旋转产生的力矩,遵循相邻电机的旋转方向相反,对角电机旋转方向相同的原则。





图2-2垂直运动模型图                      图2-3前后运动模型图



图2-4左右运动模型图                     图2-5偏航运动模型图

在上图里,电机1、3做顺时针旋转,电机2、4做逆时针旋转,令正方向为飞行器前方。

2.3.1 垂直运动

   在图2-2中,同时增加四个电机的转速,使得飞行器的总体升力增大,当总的升力大于飞行器重力时,就能使四旋翼垂直上升;相反,若四个电机的速度同时减小,四旋翼飞行器就能够垂直向下运动;因此只有当飞行器的升力刚好抵消重力时才满足悬停条件。

2.3.2 前后运动

   在图2-3中,电机1、2的转速下降,电机3、4的转速增加,使得飞行器产生向前的倾斜,对此姿态进行受力分析如图2-6,F为四旋翼桨叶产生的合力,为四旋翼的俯仰角,忽略空气阻力,将F沿着水平方向和竖直方向进行分解后,竖直方向的力为F*cos,为避免垂直运动F*cos=mg;在水平方向的分力为F*sin,因此会飞行器会向水平方向运动。





图2-6 受力分析图

2.3.3 左右运动

在图2-4中,电机2、3的转速下降,电机1、4的转速增加,使得飞行器的横滚角发生改变,与图2-6类似,飞行器的升力在侧向会产生一个水平分力,因此飞行器对发生左右运动。

2.3.4 偏航运动

在图2-5中,电机1、3转速增加,电机2、4转速减小,使得两个方向力矩不平衡,让飞行器自旋,从而引起四旋翼飞行器的头部方位发生改变,为了使飞行器升力与重力平衡,电机1、3转速增加的同时需减少另外两个电机的转速。

2.4 四轴飞行器的位置控制解析

在图2-3、2-4中表明,可以通过姿态控制来控制飞行器的水平位置变化,然而位置变化量取决于四旋翼飞行器的俯仰角,横滚角的大小和持续时间。以前进运动发生位置改变为例进行说明,在发生前进运动是飞行器的高度保持不变,初始状态为悬停(水平方向速度为0),在图2-6中进行受力分析后便可以的到飞行器的加速度值值可以通过陀螺仪测得,再根据已经设定的位移值s求解到水平飞行时间,在加速飞行过后由于飞行器惯性存在减速过程产生的位移量,在此忽略不计,飞行器过程中受到空气阻力也忽略不计。因此可以通过设定的位置量来使飞行器到达目标点。

2.5 本章小结

本章节完成了四旋翼飞行器的动力学建模,分别对飞行器的上升运动、左右运动、前后运动、偏航运动姿态进行模型分析,得到针对不同姿态各个电机的转速变化趋势,并对位置控制进行受力分析及理论阐述。


第3章 四轴飞行器硬件设计
3.1 总体方案论证

方案一:做微型飞行器,其优点是重量轻,耗电少,一般手机电池都能够驱动,易于调试,危险性低,可以用飞控板搭建,很大程度的减少了开发周期,但是有致命的缺点抗由于重量轻抗干扰能力弱,载重能力低,一般只用于单纯的飞行,用途较少。

方案二:做小型飞行器,其优点在于防干扰能力强,具有一定的载重能力,因此用途比较广泛,但是有重量大、耗电高、电机转速快、不易调试、危险性高的缺点。

方案确定:飞行器之所以能够迅速发展,就是因为用途广泛,涉及的领域多,单纯的飞行并没有多大使用价值,因此决定采用方案二进行设计。

3.2 总体方案设计



图3-1 总体结构图

图3-2 总体电路图

电池:为整个飞行器提供电能。

电源转化模块:内含无线继电器开关,控制整个飞行器是否供电,同时有DC-DC模块,为控制器和各个单元模块供电。

按键输入模块:方便在线调试,以及设置位置坐标。

姿态检测模块:采用六轴传感器,实时检测飞行器的加速度数据、陀螺仪数据,通过滤波算法得到稳定准确的姿态角。

高度检测模块:获得飞行器的距离地面高度数据。

无线接收模块:配合遥控器使用接收遥控器传输过来的油门、俯仰、横滚、偏航等数据。

数据显示模块:配合键盘设置目的坐标,同时能够在调试时显示重要数据值。

电子调速器:将主控输出的PWM(脉冲宽度调制)波形转化成电机实际的输入电压,相当于电机驱动器。

3.3 模块电路
3.3.1 电源部分

1.电池

虽然电池容量大,但是电池重量较重。锂电池是同样电池容量中最轻的、起飞效率最高的,综合考虑到整体飞行器的重量和续航,采用锂电池型号为2200mah、35C、3S如图3-3。

2200mah表示电池容量,如果该容量电池以2200ma放电,可以持续放电1小时,若以1000ma放电可持续放电2.2小时;

3S表示电池节数,锂电池一节标准电压3.7V,3S就有11.1V;

35C代表电池的放电能力,这是普通锂电池和动力锂电池的重要区别,动力锂电池需要很大的电流放电,这个放电能力就用              C来表示,如果电池是1000mah、10C,那么得出电池的放电电流可以为1000*10mh,若低C电池大电流放电会损坏电池甚至自燃。

图3-3 电池实物

2.降压电路

图3-4 降压电路图

降压电路由两部分组成,第一部分为无线继电器开关,控制整个飞行器的供电。第二部分为降压,将电池电压降到适合各个模块正常工作的电压值(5V)。

(1)为了控制四旋翼飞行器在飞行过程中的安全,防止意外事故发生加入了直流单路遥控开关继电器如图3-5。

图3-5 12V直流单路遥控开关继电器实物

(2)由于电池输出的电压在11-12.6V之间,无法直接给主控芯片和各个模块电路供电,因此需用DC-DC降压模块将电池电压降到5V,降压模块如图3-6,该模块输入电压3-40V,调节电位器改变输出电压,输出功率高达10W。

图3-6 LM2596直流降压模块实物

3.3.2 按键输入及显示模块

图3-7 按键显示电路图

1. 由于在整个系统设计中,需要调试PID参数和设置位置信息,因此加入了五个按键进行更改值,方便调试。如图3-8最右方按键是增加数值,最左方按键时减小数值,上方和下方按键用来切换更改的变量,中间是确认键。

图3-8 按键模块实物

2. 显示部分采用oled12864显示,其优点重量轻,体积小,分辨率高,较TFT屏幕比较廉价,通信方式为SPI。显示屏如图3-9。

图3-9 oled显示屏实物

3.3.3 微型计算机

选用的MCU为ST公司的stm32f407zgt6如图3-10。

图3-10 stm32f407zgt6最小系统

3.3.4 姿态检测模块

图3-11 姿态检测电路图

姿态检测采用常用的mpu-6050传感器,它整合了陀螺仪、加速度传感器处理组件,相对于其它多组件方案,消除组合陀螺仪于与加速度时之轴间差的问题,缩小包装空间,它还含有第二个IIC端口连接其他加速度、磁力传感器或其他数位运动处理硬件加速引擎,由主要IIC端口以单一数据流的形式,向主控输出完整的九轴融合演算数据。可输出中断,支持姿态识别、摇摄、画面放大缩小、滚动、快速下降中断、high-G中断、零动作感应、触击感应等功能。自带1024字节FIFO,有助于降低系统功耗。InvenSence的运动处理资料库,可处理运动感测的复杂数据,降低了运动处理运算对操作系统的负荷,并为应用开发提供架构的API。Mpu-6050的角速度全格感测范围为/sec(dps),可准确追踪快速和慢速动作,并且可以用程序控制加速度全格感测范围为,并且它可在不同电压下工作。模块实物如图3-12。

图3-12 MPU-6050实物

3.3.5 高度检测模块

图3-13 高度检测电路图

高度检测方案主要有以下三种:通过气压计检测,它的检测高度范围大,但是精度不高,并且螺旋桨产生的气流影响气压计;通过红外线检测,精度高,检测的高度有限,价格昂贵,并且会对人体造成伤害;最后就是通过超声波检测,其方案精度高,检测距离有限,不易受外界干扰,对人体无害。综合各个因素采用超声波测距,超声波模块如图3-14。

图3-14 超声波模块实物

VCC电源,Trig 输入控制信号端,Echo 接收端,Gnd 共地。

采用IO触发测距、给trig至少10us的高电平信号,然后模块会自动发送8个40KHZ的方波、自动检测是否有信号返回,有信号返回、就通过echo端口输出一段时间的高电平信号,高电平的持续时间就是超声波从发射到返回的时间,因此距离=(高电平时间*声速*0.5)。

3.3.6 无线传输模块

无线传输方案主要有:通过接收机数传,传输距离比较远,但需要配套输出及遥控器,买成套成品价格比较昂贵;通过2.4G的nrf24l01+模块进行搭建传输系统,造价低,但是传输距离短;通过WiFi传输信号,可用手机应用作为遥控器,只需要在购买WiFi接收模块,传输距离足够,信号质量好,不易被干扰。综合各个因素选择WiFi无线传输方案。

1. 采用ATK-WIFI-MODULE是ALIENTEK推出的一款百万高清wifi航拍摄像头模块,此模块支持在平板/手机端 1280*720 分辨率录像和拍照,以及图像实时回传。模块使用也较为简单,只需要在主控端配置一个串口(数据格式:波特率19200,一个起始位,一个终止位,间隔40MS发送一次,一次发送8个字节)就能实现手机与该模块的数据传输。该模块如图3-15,该模块电路图如图3-16

图3-15 ATK-WIFI-MOUDLE 实物

图3-16 WiFi传输电路图

2.采用nrf24l01+模块进行搭建遥控器,nrf24l01+是一款工作在2.4-2.5G通用ISM频段的单片手法芯片,此模块包括:频率发射器、模式控制器、功率放大器、晶体放大器、调制器、解调器、输出功率频段选取、协议的设置可以通过SPI接口进行设置低的电流功耗,当工作在发射模式下发射功率为6dBm时电流为9mA,接收模式为12.3mA,掉电模式和待机模式下电流消耗更低。支持六通道的数据接收。

图3-17 nrf24l01+模块实物

图3-18 nrf24l01+传输电路图

3.3.7 电机、桨叶、机架及电子调速器

首先是机架,机架是一架飞行器的核心硬件,要求硬度高、质量轻、在剧烈震荡的情况下不易发生形变,因此采用F330四轴机架如图3-19。

图3-19 机架实物

其次是桨叶,要求轴心稳定,质量轻不易发生形变,浆的尺寸需与电机的kv值匹配,一般kv值的无刷电机配低尺寸浆叶,但是考虑到机身的总体重量选择配大尺寸的桨叶8045。需注意的是高kv值配大尺寸电机,不宜让电机长时间工作在高转速,容易造成电机负载过大损坏电机。电机如图3-20,桨叶如图3-21。

图3-20 电机实物


图3-21 桨叶实物

最后电子调速器作为无刷电机的驱动器,只需要输入PWM波形就可输出相应的电压驱动电机,PWM波形的频率为50HZ,最大油门为一个周期里面2MS高电平时间,最小油门设置为一个周期里面1MS的高电平时间。电子调速器实物如图3-22。

图3-22 电子调速器实物

图3-23 电机驱动电路图

3.3.8 遥控器

1.对于使用WiFi模块传输数据时,采用配套的APP使用。首先在手机端下载相应APP然后打开飞行器电源启动WiFi模块(大约在10s左右),接着用手机连接名字为“minifly”的网络,连接成功后打开APP可以看到摄像头画面,打开操作界面时,数据就发送到WiFi模块,在设置中可以切换不同的操作界面。在调试过程中主要用APP控制飞行器。

2.对于用nrf24l01+模块需要自己搭建遥控器,因此需要用到单片机来控制无线传输模块,发送数据。同时控制飞行器的数据用两个双轴摇杆,摇杆处于不同位置具有不同的电压值,因此需要将电压值用单片机进行AD转化成数字量,再通过无线传输模块将数据发送个飞行器上的接收模块。双轴摇杆如图3-24,遥控器框架如图3-25,遥控器电路如图3-26。

图3-24 双轴摇杆实物                       图3-25 遥控器硬件框图

图3-26 遥控器电路图

3.4 本章小结

本章节阐述了多种方案优缺点,搭建硬件系统框图和电路原理图,以及各个单元电路的选取,分析各个单元电路的电气特征。最后完成整体电路的实物搭建,对电路进行测试,再上电检测,观察供电情况,各个模块都能正常工作。

第4章 四轴飞行器软件设计
4.1开发环境

MDK5是由keil公司发行的一个包括C编译器、链接器、宏汇编、库管理的强大集成IC开发环境,支持多种语言编程,编译后能够快速生成执行效率较高的汇编代码,开发环境支持在线调试、仿真,支持断点调试,能够实时观测到程序执行过程中每个量和内存里面数据的变化情况,keil公司虽然没有发布中文的开发环境,但keil系列的产品一直是电子类行业工作人员的常用软件[7]。

4.2调试软件

主要使用的程序调试软件是“ANO_Tech匿名四轴上位机_V2.6”,此软件需在程序中搭配串口程序才能够将飞行控制器中的数据通过串口发送到电脑端的软件上,再在软件中连接该端口就能使用。通过调试软件可以观察飞行器的姿态数据,实时呈现飞行器的欧拉角,同时有数据变化曲线显示的功能。也可以观察遥控器的传输数据是否正常。也能够在上位机中设置相应的PID参数,对飞行器进行测试,可以看到电机的实时PWM数据变化情况。

4.3 模块程序设计

如图4-1,程序开始先对所有程序中要用到的中断优先级、串口配置、定时器进行初始化,然后在对飞行器重要硬件进行检测,若硬件有引脚松动、脱落等问题程序不会向后执行,硬件检查通过后就是电机自检设置最大油门和最小油门,在通过按键显示程序来设置目标位置的坐标,显示的初始坐标为当前飞行器的坐标。在通过姿态检测程序获得飞行器的欧拉角,高度检测程序获得飞行器距离地面的高度,再接收遥控器的控制信号,通过控制信号的不同使飞行器工作在不同的三种状态:仅姿态控制状态,定高状态,位置控制状态。最后执行完一次又返回到姿态检测程序中循环执行。


图4-1 总体程序流程图

4.3.1 姿态检测程序设计

四元数姿态解算过程:

先从一次平面的旋转(绕Z轴)如图4-2,假如坐标系旋转角度后得到的坐标系,在空间中有一矢量,分别在两个坐标系的坐标分别为,因此两坐标关系如下:

图4-2 坐标系变换关系图

      (4.1)

                                    (4.2)

                                                           (4.3)

转换成矩阵表达形式后为:

                             (4.4)

同理再依次绕Y轴、X轴旋转得到欧拉角方向余弦矩阵:

    (4.5)

  

       (4.6)

采用与推导欧拉角方向余弦矩阵相同的思路可以得到坐标系平移的平移矩阵T:

                                       (4.7)

由于四元数可表示一个三维坐标系的旋转坐标对应关系为公式(4.8)[16]

                                (4.8)

其中,表示两个四元数相乘又称四元数的格拉斯曼积满足分配律、结合律;V1=、V=;

因为四元数可逆,需要=1所以||=1; = = = ;根据四元数的性质有222 -1;= = -= = -= = -

解公式(4.8)得到公式(4.9)

           (4.9)

        

转换为矩阵表达形式后为公式(4.10)

     (4.10)

从公式(4.10)中得到四元数方向余弦矩阵为公式(4.11)

           (4.11)

最后有公式(4.6)和公式(4.11)RT=R1得到四元数转化成欧拉角公式(4.12)

              (4.12)

设计思路:利用模块自带的数字运动处理器(DMP: Digital motion processor)硬件加速引擎,通过IIC接口输出六轴姿态融合人演算数据,利用DMP可以使用InvenSence公司的运动处理资料库,能够将原始数据直接转化成四元数[4]。得到四元数后根据公式(4.12)计算出欧拉角。降低了程序开发难度,提高系统的实时性。程序流程图如图4-3.

图4-3 姿态检测流程图

初始化IIC接口:在使用MPU-6050时需要把传感器的数据传送给控制器,因此需要配置一个通信接口,这里配置的IIC接口用于数据通信。

复位MPU-6050:由电源管理寄存器1(0x6b)控制。

设置满量程范围:即是设置角速度传感器和加速度传感器的量程范围,由陀螺仪配置寄存器(0x1b)和加速度传感器配置寄存器(0x1c)设置。同时设置陀螺仪采样率,由采样率分频寄存器(0x19)控制;设置数字低通滤波器,由寄存器(0x1c)控制。

设置系统时钟:由电源管理寄存器(0x6b)控制,一般选择X轴陀螺PLL作为时钟源,以获得更高精度的时钟。

使能传感器:使能角速度传感器和加速度传感器,由电源管理寄存器2(0x6c)控制。

程序调试:把模块程序编写完成后,首先是要对程序进行测试,在测试是采用匿名四轴上位机软件,将mpu-6050采集到的角速度、加速度和欧拉角通过控制器配置的串口发送到软件,用三角板实际测量传感器的角度数据去对比传感器的测量数据,观测两者是否吻合,同时在上位机中观察数据是否出现较大的波动。若出现误差需在程序中进行角度补偿,来提高测量的准确性。

4.3.2 高度检测程序设计

程序流程如图4-4,使用的超声波模块,测量高电平时间利用TIM5定时器的捕获功能,利用公式(s:高度,单位m;t:时间,单位s)得到距离[2]。控制信号由TIM3定时器每200ms中断一次,在中断中发出15us的高电平给trig引脚,触发TIM5捕获中断计算出高电平的持续时间。

测序测试:将程序于硬件相结合,用oled12864显示测出的高度值,并将测量值于实际值作对比,观测数据是否准确,同时观测数据是否发生较大范围的波动。若出现问题需更改程序进行校正。

图4-4 高度检测流程图

4.3.3 电机驱动程序设计

电机作为四旋翼飞行器的动力来源,无刷电机需要与电子调速器配合才能够用单片机的定时器输出不同占空比的PWM来控制电机的转速,在上电是需要对电子调速器进行初始化的程序如图4-5。

图4-5 电子调速器控制流程图

4.3.4 无线传输设计

1.WiFi模块

程序流程如图4-6,采用无线wifi传输方案需要配置一个串口中断程序,APP中的数据每间隔40ms发送一次,每次发送八个字节。因此通过串口来接收WiFi模块发送过来的字节数据,再利用中断进行数据处理,筛选出每次发送的8个字节数据。

Byte[0]:数据头,固定为0x66;

Byte[1]:副翼:中间值0x80,左边最大为 0x00,右边最大为0xff,即在0x00-0x80-0xff线性变化。

Byte[2]:升降舵:中间值0x80,后边最大为 0x00,前边最大为0xff,即在0x00-0x80-0xff线性变化。

图4-6 串口中断数据处理流程图

Byte[3]:油门:0x00为最小,0xff为最大。

Byte[4]:方向舵:中间值0x80,左转最大为 0x00,右转最大为0xff,即在0x00-0x80-0xff线性变化。

Byte[5]:标志位:含定高使能位,含追踪目的坐标使能位。

Byte[6]:校验字节。

Byte[7]:数据尾,固定为0x99。

程序测试:连接好相应的硬件,连接好WiFi,打开APP内的控制界面,用上位机观测手机发送的初始数据是否准确的发送到主控芯片,再滑动油门、姿态摇杆、观测对应的数据是否正确,若数据未发送到上位机,检查硬件来连接;若数据出错,检查串口中断内数据筛选程序。最终调试出正确的程序。

2. nrf24l01+模块

(1)接收机

图4-7 nrf24l01+接收程序流程图

(2)遥控器

程序流程如图4-8,使用nrf24l01+模块,不仅需要搭建接收部分,还要自制遥控器,两者要匹配才能够使用,nrf24l01+模块主要是配置spi通信接口来与主控芯片通信。AD转化主要使用主控芯片内部集成的AD 转化器进行识别模拟量,并转化成数字量,在AD采样时还利用均值滤波来减小数据的误差。

程序测试:搭建好接收电路和遥控器电路,接上供电电源,将飞行器上串口与电脑端的上位机连接。首先观测上位机中出现遥控器的初始数据,再拨动双轴摇杆到最大、最小角度,观察上位机中的数据是与程序中的目标数值吻合,然后缓慢滑动摇杆,观察摇杆数据是为线性变化,证明遥控器的数据能够成功的发送到飞行器的控制器中。

图4-8 遥控器程序流程图

4.3.5 PID控制器设计

PID控制器流程图如图4-9,控制器的输入是期望的俯仰角、横滚角、航向角、高度这四个数据,姿态控制器的设计是用串级PID搭建,外环是控制飞行器的角度,传感器反馈量是角度数据,外环的输出作为内环的输入,内环的反馈是姿态传感器的角速度,内环是控制飞行器角度变化快慢的环节,增加飞行器的稳定性。

对于姿态控制使用串级PID控制相对于单级的姿态PID控制器,有方便调试、响应迅速、输出稳定的优点。在通过高度PID控制闭合回路,实现在姿态控制的同时稳定飞行器的高度,若不稳定飞行器的飞行高度,飞行器在调节姿态时可能使得电机的PWM值低于飞行器正常悬停的油门值,使得飞行器会出现掉高的现象。PID控制器参数介绍:P参数是使系统对变化量做出快速响应,在三个参数中对系统的调节能力是最强的;I参数是使系统能够准确调到目标值;D参数是控制系统的波动,控制系统在目标值附近出现波动,增加系统的稳定性。

程序测试:对于此部分模块程序的测试,需要用到姿态检测传感器的数据、高度检测数据和无线传输的数据。在前面的模块程序都测试通过的情况下才能够进行测试。由于此部分程序直接影响飞行器的飞行质量,将在调试章节详细讲解测试过程。

图4-9 PID控制程序流程图

4.4 本章小结            

简要介绍了开发环境和调试软件的使用,搭建软件系统的流程图,以及介绍重要模块程序的流程,结合硬件测试各个模块程序的功能,证明各个硬件模块结合软件能够实现相应模块的功能。最后联合模块程序进行系统综合测试,观察各个关键量的变化情况,完成程序系统设计。


第5章 系统调试
5.1 调试步骤
5.1.1 姿态PID调试

由于姿态PID是采用串级的思路,在调节参数时需要先调节内环参数再调整外环参数。对于质量分布对称的四旋翼飞行器,理论上它的俯仰角和横滚角的PID控制参数是相同的,所以在搭建实物时尽量让四旋翼的重心在模型的几何中心,这样有利于调试,若重心与几何中心偏离很远,不仅需要多调节一个轴的PID参数,还会导致重心偏向侧的电机长时间处于较高速旋转,容易引起电机损坏。

在调节姿态PID前,需要飞行器脱离地面,才能进行姿态观测,因此需要估计飞行器的大致起飞油门。

首先将外环所有参数置零,将打舵量作为内环的期望,加上内环P参数,如果P太小,表现为不能修正角速度误差,不能够调节倾斜的情况,如果P值过大,便会引起飞行器的震荡,该震荡强烈时会引起飞行器无法正常起飞。因此在调节P参数时一般从小到达改变,依次观察飞行器的摆动情况,合适的P值就是能够根据打舵量快速做出反应,同时又不会太震荡。

P参数调到合适后,系统可能不会在目标位置震荡,此时加上I参数,I参数的作用就是使系统能够到达目标值附近,大的I值会使得系统在高于目标值的区域发生轻微震荡,过小的I值,会使得系统响应慢稳定时间长,因此合适的I值使让系统在我们预想的目标值附近。

对于飞行器姿态在期望角度发生震荡的情况,就需要系统能够预测下一时刻的姿态趋势,来减小震荡,因此加入D参数,D参数的使用会使得飞行器姿态不会出现摆动,看上去飞行器十分的稳定。

然后就是在已有的内环参数上调节外环参数,外环就是给系统输入一个期望的姿态角度,在通过外环PID控制,将飞行器稳定在期望的姿态角度。对于外环PID参数的调节,由于飞行器的姿态角并非水平,飞行器会随着摇杆的方向发生水平移动,因此采用“烤四轴”的方案如图5-1,对每个轴进行调节,调节过程与内环相同,观测飞行器在期望角度的飞行情况。在分别调整好三个轴的PID参数后,由于每个轴之间存在鲁棒性,每个轴的参数之间会相互影响,因此需要三个轴一起调节如图5-2。最终调试出适合飞行的所有PID参数。

图5-1 “烤四轴”调试方案图

图5-2 整体调试图

5.1.2 高度PID调试

调节高度PID时需要将油门加大到飞行器能够脱离地面,打开遥控器的定高按钮,再来观察飞行器的高度变化。

首先调节P参数,将I、D参数置零,在程序调试时,在程序内部设置目标高度为50cm。P参数从小到大调整,在调节过程中,若出现飞行器偏离目标高度较远,飞行器也没有明显的上升下降趋势的情况,此时说明P参数过小调节力度不够。若出现飞行器高度震荡范围越来越大,说明P值过大,引起系统发散,合适大小的P值是当飞行器偏离目标高度较远时,飞行器能够迅速反应上升或者下降,同时在一定高度范围内震荡。

然后确定I参数,使飞行器能够调节的目标高度,若飞行器很久才稳定在目标高度,说明I参数值过小,若飞行器出现较小幅度震荡,说明I参数过大,因此合适的I参数就是使得飞行器能够调整到目的高度。

最后确定D参数增加高度控制的稳定性,该值从小到大依次调试,合适大小的D值使得飞行器在目标高度十分稳定。

5.1.3 位置控制调试

用油门控制飞行器脱离地面,开启定高模式,再按下位置键进行位置控制。由于位置控制是结合姿态控制的持续时间来控制飞行器水平移动的距离,因此在固定的俯仰角、横滚角下进行位置移动,在调节的过程中需要根据实际距离修改控制程序中的循环次数。

先调整水平方向的位置控制程序,固定飞行器的目标飞行距离,根据实际飞行距离调整相应的循环次数。然后改变目标具体,观测实际飞行距离是否准确,若有误差,微调循环次数即可

后调节高度控制,调节步骤与水平位置调节类似。

最后将两个环节相结合,在程序中飞行器先是水平位置控制,再是高度控制。

5.1.4 调试结果

经过对串级姿态PID参数的整定,得到表5-1和表5-2数据对飞行器的姿态控制起到很明显的作用,能够有效的控制飞行器的飞行姿态如图5-3、5-4、5-5、5-6、5-7、5-8、5-9、5-10、5-11、5-12,而对于单级PID控制的高度环节,能够调节到期望高度,但是在期望高度附近有明显的波动。位置控制环节受高度环的影响,位置控制上还存在一定误差,若高度控制环调好,位置控制误差将能够有效降低。

表5-1 姿态外环PI参数表


俯仰角

横滚角

偏航角

P值

200

200

1.5

I值

0.2

0.2

0.2





表5-1 姿态内环PD参数表


俯仰角

横滚角

偏航角

P值

0.004

0.004

0.046

D值

0.003

0.003

0.012

图5-3 三轴加速度和三轴陀螺仪数据曲线图

在图5-3中,横坐标是时间轴,单位是,时间数据被扩大了100倍;纵坐标是加速度和陀螺仪数据,单位分别是

图5-4  X轴加速度数据曲线图

在图5-4中,横坐标是时间轴,单位是,时间数据被扩大了100倍;纵坐标是X加速度数据被扩大了16384倍,单位是

图5-5  Y轴加速度数据曲线图

在图5-5中,横坐标是时间轴,单位是,时间数据被扩大了100倍;纵坐标是Y加速度数据被扩大了16384倍,单位是

图5-6  Z轴加速度数据曲线图

在图5-6中,横坐标是时间轴,单位是,时间数据被扩大了100倍;纵坐标是Z加速度数据被扩大了16384倍,单位是

图5-7  X轴陀螺仪数据曲线图

在图5-7中,横坐标是时间轴,单位是,时间数据被扩大了100倍;纵坐标是X陀螺仪数据被扩大了16.4倍,单位是

图5-8  Y轴陀螺仪数据曲线图

在图5-8中,横坐标是时间轴,单位是,时间数据被扩大了100倍;纵坐标是Y陀螺仪数据被扩大了16.4倍,单位是

图5-9  Z轴陀螺仪数据曲线图

在图5-9中,横坐标是时间轴,单位是,时间数据被扩大了100倍;纵坐标是Z陀螺仪数据被扩大了16.4倍,单位是

图5-10 横滚数据曲线图

在图5-10中,横坐标是时间轴,单位是,时间数据被扩大了100倍;纵坐标是横滚角度数据被扩大了100倍,单位是度。

图5-11  俯仰数据曲线图

在图5-11中,横坐标是时间轴,单位是,时间数据被扩大了100倍;纵坐标是俯仰角度数据被扩大了100倍,单位是度。

图5-12 偏航数据曲线图

在图5-12中,横坐标是时间轴,单位是,时间数据被扩大了100倍;纵坐标是偏航角度数据被扩大了100倍,单位是度。

从图5-10、5-11、5-12中可以看出飞行器在自稳状态下,俯仰角和横滚角都控制很好,曲线都在零度上。然而偏航角度控制曲线离零度渐渐变远,可见飞行器存在缓慢的自旋,方向都是逆时针。因此在飞行器的姿态控制器中偏航角控制还存在一定的误差。

5.2 疑难问题及解决方案
5.2.1 两个无线模块相互干扰

在实际测试程序的过程中,出现WiFi模块的初始数据小概率被干扰,以至于在初始化飞行器后,准备起飞前,飞行器会出现失控。

解决方案:飞行器失控是出现在加入无线继电器开关后出现,但无线继电器的品那段处于315M,WiFi传输频段在2.4G,从理论上来讲两个频段的信号是不会发生干扰,因此便在程序中进行优化,在进入起飞前加入WiFi初始数据判定函数,对干扰信号进行拦截,只有当遥控器的初始数据发送到飞行器上才进入起飞就绪阶段。这样就能够兼并使用无线继电器模块,又能确保不会出现数据错误。

5.2.2 主控板震动剧烈

将主控板安装在机架上,由于电机的剧烈转动和机架的机械结构使得电路板上的震动十分剧烈,对MPU-6050姿态传感器的影响较大。

解决方案:用泡沫胶连接电路板与机架,能够避免电路板与机架的直接接触,通过泡沫胶将机架的震动抵消掉一部分,有效的减小MPU-6050上的震动。

5.2.3 部分电机自检失败

在加入按键显示程序后,某些电机无法自检,影响正常的转动。

解决方案:自检失败的电机是随机的、不固定,最初认为是电子调速器的控制线未连接好,但是很少出现四个电机完全自检通过的情况。因此考虑到程序结构问题,去掉按键显示程序后,四个电机都能够成功自检,将按键显示程序放在电机自检程序后也能避免这个问题,因此更改程序初始化顺序就能解决。

5.2.4 飞行器脱离地面发生飘移

飞行器在油门的驱动下能够平稳的脱离地面,但是在稳定油门后飞行器总是朝某一方向移动,无法比较好的稳定在初始位置。

解决方案:检查飞行器的初始角度俯仰角0度、横滚角0度、航向角0度,都属于正常值;检查遥控器的姿态数据也都是中值数据,所以在程序中的数据并未发现异常。在测试中发现出现飘逸的飞行器可以通过遥控器输入姿态来矫正,因此对姿态数据进行补偿,可以有效的避免飞行器的明显飘移。

5.2.5 油门控制

在飞行器最初测试中,油门滑杆太过灵敏,不利于控制飞行器的起飞油门。

解决方案:这个问题源于自己使用的电机转速较高,桨叶较大造成,电机在低转速是飞行器也能够获得较大的升力,在实际测试中,滑杆在油门的四分之一处就能飞离地面,因此为降低油门的灵敏度,把[1000-2000]的油门范围只利用[1000-1500]。便能够很好的控制起飞、降落。

5.3 实物

如图5-13是自制的遥控器,需要外接USB供电,左边摇杆是方向控制,右边摇杆是油门、航向角控制。四旋翼飞行器如图5-14,将所有的电路布局在一块洞洞板,只需要接上电池和给电子调速器供电就能使飞行器正常工作,洞洞板上的立杆是用来辅助调试。

图5-13 遥控器实物图

图5-14 飞行器实物图

5.4 本章小结

本章介绍了四旋翼飞行器的实物调试过程及最终调试结果,调试中遇到的问题及解决方案,证明通过本文的设计思路结合调试过程是能够完成四旋翼飞行器的姿态控制。


由于飞行器是一个比较大的系统,在硬件选取时需要仔细考虑硬件配套的问题,特别是电池、电子调速器、电机、桨叶的型号组合,这部分与控制部分无关,若型号选取不好很容易导致硬件烧毁。然后就是飞行器上控制部分硬件电路,这部分设计需要结合软件设计来搭建各个模块的硬件电路,通过软硬件联合测试各个模块的功能。完成整体软硬件的设计。
在此次飞行器的设计中最重要的是控制器的设计,对于姿态控制的设计采用串级PID的架构,通过实际实物的制作、调试,证明通过这种架构不仅调试方便,而且控制器的输出比较稳定的姿态,因此采用串级PID的姿态控制策略是可行的。对于高度控制器采用单极PID设计思路,在实际调试过程中单级PID确实不好调试,较串级的PID需要花更多的时间去整定PID参数,而对于输出也能达到较好的稳定效果。对于位置控制,由于未使用光流元件进行定位,飞行器不能建立自己的位置坐标系,亦无法将位置控制做成闭环,而对于自己设计的方案,只是开环控制飞行器的大概位置,调试过程也相对闭环简单,但是开环下若只是单纯的位置改变,也还是能获得不错的控制效果。
在本设计中还有很多地方值得完善,高度PID还不能够稳定准确的将飞行器高度控制在期望高度,若将高度PID调试好,便能有效的控制飞行器的高度,并且飞行器不会掉高,就能够实现悬停的功能。在位置控制上也存在很大的误差,飞行器不能够感知外界的障碍物,若将位置控制器作成闭环系统,就能够有效准确的控制飞行器的位置,再结合蔽障等功能就能实现脱离遥控器完全意义上的自主飞行。还有采用的WiFi无线传输方案距离小,飞行器的可操作范围不高,飞行器中也未做自动返航的功能,因此容易发生坠机。用手机APP控制飞行器较用手炳控制飞行器的难度更高,用手机控制时感觉不到摇杆的具体偏离程度,在实际操作中还需要一边观测手机一边观察飞行器,还不能够做到很好的操作飞行器。
相信未来的飞行器,无论从材料、做工、结构上都会更加成熟,更加有利于飞行器的飞行控制,抗干扰能力、负重能力越来越强,更能适应在复杂环境下工作。随着传感器的精度越高,飞行器在姿态控制和位置控制上的稳定性能越好、误差也越小。同时随着电池行业的进步,四旋翼飞行器的续航能力也会更强,实现更久的作业时间。


全部资料51hei下载地址:
keil5_code.7z (434.19 KB, 下载次数: 163)

评分

参与人数 2黑币 +105 收起 理由
jianbudan123 + 5 很给力!
admin + 100 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:899171 发表于 2021-4-7 14:19 | 显示全部楼层
写的真详细,学习了
回复

使用道具 举报

ID:441471 发表于 2021-4-16 13:29 | 显示全部楼层
超级详细的解说,好好学习
回复

使用道具 举报

ID:907536 发表于 2021-4-17 20:53 | 显示全部楼层
stm32f407zgt6最小系统如何下手呀
回复

使用道具 举报

ID:888558 发表于 2021-4-17 22:14 | 显示全部楼层
gow1 发表于 2021-4-17 20:53
stm32f407zgt6最小系统如何下手呀

直接某一个宝上买,也可以自己画板子
回复

使用道具 举报

ID:551457 发表于 2021-4-24 23:39 | 显示全部楼层
请问为什么不用电调的5V输出直接给控制板供电呢
回复

使用道具 举报

ID:888558 发表于 2021-5-3 17:17 | 显示全部楼层
月下丘比特 发表于 2021-4-24 23:39
请问为什么不用电调的5V输出直接给控制板供电呢

也可以,最开始调参时就是这样做的,虽没出现什么问题,但不清楚电调硬件就没用电调供电
回复

使用道具 举报

ID:137939 发表于 2021-6-2 18:16 | 显示全部楼层
学到了很多知识,感谢楼主分享!
回复

使用道具 举报

ID:915207 发表于 2021-6-3 23:45 | 显示全部楼层
膜拜大神,小弟原先只是想着四轴起飞4个字,现在学到了整体的详细设计流程,感谢万分!!!!
回复

使用道具 举报

ID:198286 发表于 2021-7-1 21:15 | 显示全部楼层
膜拜了,手柄太有个性了
回复

使用道具 举报

ID:620239 发表于 2022-1-13 22:45 | 显示全部楼层
dmp求欧拉角也可以用在四轴上?
回复

使用道具 举报

ID:504613 发表于 2022-10-17 12:29 | 显示全部楼层
楼主,您好!目前看了下遥控器的代码发现NRF24101引脚定义不详能否说明下,另外遥控器上的PB14是接哪里的NRF24101引脚已经接满了不明白这PB14是接什么地方的。搭了环境,并不能用
回复

使用道具 举报

ID:888558 发表于 2022-11-28 18:04 | 显示全部楼层
12332323 发表于 2022-10-17 12:29
楼主,您好!目前看了下遥控器的代码发现NRF24101引脚定义不详能否说明下,另外遥控器上的PB14是接哪里的NR ...

文档里面没接PB14啊
回复

使用道具 举报

ID:888558 发表于 2022-11-28 18:08 | 显示全部楼层
12332323 发表于 2022-10-17 12:29
楼主,您好!目前看了下遥控器的代码发现NRF24101引脚定义不详能否说明下,另外遥控器上的PB14是接哪里的NR ...

NRF24101引脚定义,原理图封装和实物线序是对应的,记得当时用的I2C通讯,线序没有整理
回复

使用道具 举报

ID:1091320 发表于 2023-8-16 12:55 | 显示全部楼层
太棒了。。。。对整个设计过程和注意事项有了详细的了解。改天自己动手尝试一下。
回复

使用道具 举报

ID:1099301 发表于 2023-11-17 20:03 | 显示全部楼层
写的真好,学习了。
回复

使用道具 举报

ID:430492 发表于 2023-11-18 09:56 | 显示全部楼层
超级详细的设计说明,牛人!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表