8、微型四轴二次开发 - XDU-Educational-UAV/Drone_Master_PID GitHub Wiki
8.1 MDK开发环境搭建
我们微型四轴源码工程是基于 MDK5 开发,下面我们先安装这个软件。MDK5 安装源文件在微型四轴资料中有提供,如下图 7.1.1 所示。
图 7.1.1 MDK 安装源文件目录
MDK 安装过程就不详细说明,安装前先看“安装过程.txt”。安装完 MDK 软件之后还需要安装芯片包(图 7.1.1 中.pack 文件),直接双击芯片包文件即可安装(先安装 MDK 软件)。所有都安装完成之后打开微型四轴源码工程如下图 7.1.2 所示。
图 7.1.2 源码工程示图
8.2 CubeMX开发环境搭建
STM32CubeMX 是STM32 芯片图形化配置工具, 允许用户使用图形化向导生成C 初始化代码,可以大大减轻开发工作,时间和费用。STM32CubeMX几乎覆盖了STM32 全系列芯片。
目前,ST公司已基于STM32CubeMX的基础上,融入eclipse开发生态环境,通过arm交叉编译器设计出新一代嵌入式开发IDE——STM32CubeIDE。
首先安装Java运行环境,双击JavaSetup8u151在线下载安装包,全部点击默认安装即可。(需要注意,STM32CubeMX的 Java 运行环境版本必须是 V1.7及以上,如果你的电脑安装过 V1.7以下版本,请先删掉后重新安装最新版本),然后安装STM32CubeMX,直接双击STM32CubeMX 安装包,默认安装在C盘,可以改变安装路径。安装之后打开该软件,接下来我们安装STM32 库,点击Help->Install New Libraries 或者按快捷键 ALT + U。这里我们推荐使用离线下载(在线下载速度较慢而且不支持断点续传功能),也可使用我们提供的STM32G030系列的库函数。注意:固件库的固件要与开发板的主控型号对应,否则无法使用。
8.3 固件下载
首先我们给下载器安装驱动。下载器驱动文件路径:“微型四轴资料\ST LINK驱动及教程\STLINK驱动”。驱动安装过程这里就不详细说明,安装完成后将 USB 线连接好下载器并插入电脑,然后打开设备管理器,在通用串行总线控制器中即可找到 ST-Link driver,如下图 7.2.1 所示。
图 7.2.1 下载器驱动
然后将下载器连接到四轴,下载器通过 4Pin 线连接到四轴,如下图 7.2.2 所示。
图 7.2.2 下载器连接图
然后打开程序源码。驱动安装完成之后,我来看看程序源码文件。程序源码目录树如下
图 7.2.3 程序源码目录树
编译固件并下载。解压 CubeMX_Code.zip 并打开程序工程,点击编译,等待编译完成再点击下载。操作步骤如下图 7.2.5 所示。下载完成后如图 7.2.6 所示。所有程序源码下载都可以按照此方法执行,这里就不重复。
图 7.2.4 固件下载操作步骤示图
图 7.2.5 程序下载完成示图
提示: 下载时,芯片必须是上电状态。
8.4 安卓地面站使用
我们微型四轴兼容了功能强大的MWC地面站,该软件路径:“微型四轴资料\匿名四轴上位机”。MWC地面站支持很多通信方式,这里我们使用的是蓝牙无线串口方式通信。下面介绍怎么使用匿名科创地面站查看飞控姿态,显示数据波形及 PID 调试。
第一步,打开四轴飞行器,使用杜邦线将USB-TTL串口连接至蓝牙无线传输模块,而后将USB-TTL无线串口模块连接至电脑端,在设备管理器中找到端口号。注意:使用遥控器和地面站通信时,只有四轴是开机状态才有数据上传。
第二步,打开软件选择串口通信
图 7.3.1 串口通信设置图
打开软件后点击左边一列图标的程序设置,即可显示程序设置界面,如图 7.3.1 所示。我们选择通信连接方式为 COM 方式,然后选择端口号,设置波特率为 500000,最后点击右下角的打开连接,即可通信。当有数据上传时,RX:显示接收到数据的个数。
第三步,查看飞控状态
图 7.3.2 飞控状态图
点击左边一列图标的飞控状态即可显示飞控状态界面,如图 7.3.2 所示。飞控状态显示主要包括当前四轴姿态(PIT\ROL\YAW)、接收机(遥控器控制数据)、电机输出(PWM)、传感器原始数据(ACC\GYR\MAG)、气压高度(单位cm)、电池电压。飞行模式和 GPS 信息功能未使用。
第四步,查看数据波形
图 7.3.3 数据波形图
点击左边一列图标的数据波形即可显示数据波形界面,如图 7.3.3 所示。首先选中我们要显示的数据,再点击飞控数据即可显示数据波形。
第五步,PID 调试
图 7.3.4 PID 调试图
点击左边一列图标的飞控设置即可显示飞控设置界面,如图 7.3.4 所示。飞控设置包括 PID 设置、飞行模式设置、传感器校准,这里我们只使用了 PID 设置的功能。读取飞控:读取四轴当前 PID 参数。写入飞控:将显示的所有 PID 参数写入到飞控。恢复默认值:将四轴 PID 参数恢复成出厂默认值。这里我们总共使用了 7 组 PID,分别是 roll 速率、pitch 速率、yaw 速率、roll 角度、pitch 角度、yaw 角度、高度位置。
注意:显示的 PID 数值是实际数值的 10 倍。由于地面站 PID 数据传输只能是 int16 类型不能浮点型,所以将实际数值乘以 10 再上传,同时写入时也除以了 10。
8.5 微型四轴 PID 调试
众所周知 PID 调试是四轴最难的一部分,也是最核心的一部分,PID 参数是否合理直接影响四轴飞行的效果。下面就介绍一下我们微型四轴的 PID 调试方法。
第一步,修改 G030 固件代码
图 7.4.1 PID控制函数示图
打开CubeMX_Code源码文件夹,打开MDK-ARM/CubeMX_Code.uvprojx工程文件,PID控制器的内外环函数位于Application/User文件夹下的Control.c,如上图所示。修改后编译固件并下载到四轴。
第二步,搭建四轴调试平台
图 7.4.2 MiniFly 四轴调试平台搭建示图
如上 7.4.2 所示,使用两条细绳一端拴住微型四轴用于固定电池的排针,另一端拴住椅子的两端扶手,并保证微型四轴可以 360 度旋转不会碰到椅子面。绳子拴住的排针最好是四轴中间位置的排针,排针不在机身中间,所以机身中间的排针不一定是排针中间的那一根。最好选择扶手较高的椅子,这样机身离椅子面足够的距离排风。注意:四轴开机后一直晃动陀螺仪是校准不通过的,需要使用物体卡住使其静止等待校准通过。
第三步,遥控器连接上位机
图 7.4.3 PID 初始设置示图
使用 USB 线将遥控器连接到上位机,点击右下角打开连接,然后并打开飞控设置,设置自稳 ROL 和自稳 PIT 的 P 为 10,点击写入飞控,上方会显示“PID 数据 6”发送成功,如图 7.4.3 所示。串级 PID 调试一般先调内环(速率环),所以先将外环(角度环)PID 的 P 设置为 1,I 和 D 设置为 0。注意:上位机显示是放大了 10 倍,后面的调试值均是上位机显示的值。
第四步,调内环 pitch 和 roll 的 P
设置遥控器为手动模式,然后解锁长按 KEY_R 键进入调试界面。按照第三步操作后,我们给内环 ROL 速率和 PIT 速率的 P 同时设置一个值,然后推动油门至 50 左右观察并记录现象。下面是测试我们不同 P 的值和对应的现象:
P = 10 时,四轴乱晃无法固定于某一个角度,用手轻轻干扰四轴会绕绳子旋转,说明 P 值太小,力度不够。
P = 100 时,四轴晃动幅度减小但还是无法固定于某一个角度,用手轻轻干扰四轴还会绕绳子旋转,说明 P 值还是太小,力度不够。
P = 1000 时,四轴已经不晃动了,用手轻轻干扰明显感觉有回复力,说明 P 值已经慢慢趋向理想值。
P = 5000 时,四轴机身晃动严重已经震荡,说明 P 值已经过大,由此可确定理想的 P 值应该在 1000~5000 范围内。
P = 2500 时,四轴不晃动并且能固定在某一个角度了,机身也不震荡,用手去干扰能感觉到明显的回复力。说明 P 值已经很接近理想值了。
P = 3500 时,四轴机身轻微晃动说明已经轻微震荡,用手去干扰能感觉到很强的回复力。说明 P 值已经稍大于理想值了。
P = 3200 时,四轴没有晃动,用手去干扰能感觉到很强的回复力并有点晃动。说明 P 值就是我们的理想值了,晃动问题后期可以通过加点 D 抑制。
第五步,调内环 pitch 和 roll 的 D
根据第四步内环 P 已经调节好,但如果四轴受到干扰则会震荡,说明稳定性不好,这时我们就需要通过加 D 来增强稳定性。按照第四步的操作方法,设置 P 值为 3200,,测试不同的 D 值对应的现象:
D=10 时,用手去干扰四轴,能感觉到很强的回复力并有点晃动,说明 D 值有点小,抑制不了干扰。
D=100 时,用手去干扰四轴,能感觉没有晃动了但四轴需要长时间才能回复到水平,说明 D 值太大了,抑制了 P 的调整。
D=50 时,用手去干扰四轴,能感觉没有晃动了四轴也能较快回复到水平,说明 D 值接近理想值了。
就这样我们暂时把 D 值调好了,因为后面整机试飞时可能还会调节 D 值,这里先不用精确调节至某一个值。
第六步,调外环 pitch 和 roll 的 P
内环调好了,下面我们开始调外环。外环的主要作用是控制四轴姿态响应快慢,下面我们测试不同的 P 值,观察四轴的响应速度。按照前面操作方法,我们测试 P 值和现象如下:
P=10 时,方向摇杆往前打到最大,发现四轴慢慢倾斜,最终达到设定角度。响应速度不够快,说明 P 太小了。
P=100 时,方向摇杆往前打到最大,四轴瞬间倾斜了达到设定角度,而且力量很大。说明 P 值太大了。
P=50 时,方向摇杆往前打到最大,四轴较快的达到设定角度,不是很快也不是很慢。
说明 P 值是我们理想值了。
第七步,调内环yaw 的 PID
调节内环 yaw 的 PID 前需将第一步注释掉的 ENABLE_PID_TUNING 宏定义重新注释回来,并且编译下载至四轴。然后设置 yaw 外环 P 为 10,内环 P 设定为某一个值,慢慢推油门让四轴起飞至水平,推油门摇杆时不要向左或向右打到航向角。飞至水平后,推油门至 50,然后用手轻轻向左边或向右拨动四轴,感受四轴的回复力,并且听电机的声音。下面是我们设置不同内环 P 的值时对应的现象:
当 P=10 时,四轴几乎没有回复力,受干扰后左右摆晃,电机声音差异不大。说明 P 值太小了,没有修正的回复力。
当 P=100 时,四轴有一点点回复力,受干扰后左右摆晃,电机声音差异不大。说明 P 值还是太小。
当 P=1000 时,四轴有明显的回复力,受干扰后不会摆晃,电机声音差异很大。说明 P 值接近理想值了。
当 P=5000 时,四轴有明显的回复力,受干扰后两个电机停止转动,电机声音差异非常大。说明 P 值已经太大了。
跟以上调试现象和经验我们最终选定 P 值为 1200,然后再逐渐添加一点了积分 I,没有添加 D。内环的反馈是陀螺仪,航向角也是由陀螺仪积分而得,陀螺仪在四轴飞行过程有高频干扰,高频干扰使得 D 具有相反作用,所以我们没有添加 D。
第八步,调外环 yaw 的 PID
调节外环 yaw 的 P 和调节外环 pitch\roll 的 P 方法一样,主要是调节四轴的受控制的响应速度。给外环 yaw 的 P 设定一个值然后推油门和航向角,感受四轴旋转的快慢。这里我们选定 P 的值为 100。
第九步,手动试飞
经过以上步骤调试,四轴基本可以手动飞行了,松开绳子测试手动飞行。飞行过程中如果在无风条件下发现四轴晃动说明内环 pitch 和 roll 的 P 值大了,这时可以通过减小 P 或增加 D 来抑制晃动。如果发现航向角受外力干扰不能快速回复到原本状态,这可能是内环 yaw 的 P 太小了,需要增加 P。如果发现飞行过程会慢慢自旋,说明 yaw 的 I 太大了,需要减小I 值。经过以上反复调试,我们最终确定我们 MiniFly 四轴 PID 参数如下图 7.4.4 所示:
图 7.4.4 微型四轴 PID 参数
第十步,调定高的 PID
定高 PID 调节是比较揪心的,调试过程我们按照正常的 PID 调试方法先调 P 再调 I 最后调节 D,反复调试发现根本行不通,四轴依旧很难定在一定高度范围内。后来经过分析,我们发现使用气压计定高,气压数据有很大的滞后性,并且四轴飞行过程垂直向下的风也会干扰气压读数。所以我们调试时不管怎么调节 P,出现的现象是要么慢慢的上升或慢慢的下降,要么快速上蹿下跳,根本不受控制。后来我们根据 PID 理论中 D 有抑制超调和干扰的作用,索性把 D 也先加上一点点,果然有效果,四轴上蹿下跳没那么厉害了。继续增加 D 四轴更加稳定了,当 D 增加到很大时,我们发现,推动油门四轴不怎么受控制了,说明 D 值太大了将 P 的作用都抑制了。反复调试后,我们最终选定 PID 的值为 210,0,600。
总结
PID 三项的的意义:P 是系统平衡的回复力; I 是消除误差,有辅助 P 的作用;D 是阻尼,抑制超调和干扰的作用。调试时一般先调节 P 找到临界震荡的 P 值,然后减小一点 P 值,增加 I 值消除静态误差,最后增加 D 值抑制干扰。要不要加 I 和 D 需根据实际情况而定。调试定高 PID 时,需要 P 和 D 同时调。PID 调试是比较繁琐的事情,需要耐心观察现象并分析原理。