飞控系统架构:从传感器到执行器的完整链路
做飞控调参这么多年,我见过太多人一上来就调PID,结果飞机抖得像筛子。其实啊,你得先搞清楚信号是怎么从传感器跑到电机里的。今天我就带你走一遍这条完整的链路。
信号流的起点:IMU传感器
IMU,说白了就是惯性测量单元。它里面装着三轴加速度计和三轴陀螺仪。加速度计感受重力,陀螺仪感受角速度。这两个东西配合起来,才能知道飞机当前是什么姿态。
我记得刚入行那会儿,总觉得IMU数据是完美的。后来在项目里摔过几次机才明白——传感器数据天生就有噪声和漂移。加速度计高频噪声大,陀螺仪低频漂移严重。所以必须做数据融合。
核心要点:IMU原始数据不能直接用,必须经过滤波和融合才能得到可靠的姿态信息。
姿态解算:从原始数据到欧拉角
姿态解算这块,主流方案就两种:互补滤波和卡尔曼滤波。我个人习惯用互补滤波,简单、轻量、够用。卡尔曼滤波精度更高,但计算量大,对嵌入式MCU不太友好。
互补滤波的原理其实很直观:
- 陀螺仪积分得到短期姿态,但会漂移
- 加速度计给出长期参考,但噪声大
- 两者互补,各取所长
嗯,这里要注意一个坑。我曾经在调试时发现,加速度计在剧烈运动时输出的重力方向是错的。为什么?因为加速度计测的是「比力」,不是纯重力。飞机在加速转弯时,加速度计感受到的是重力和运动加速度的合力。这时候如果还拿它做参考,姿态就歪了。
避坑指南:我曾经在高速前飞时姿态解算发散,查了两天才发现是加速度计被运动加速度污染了。解决办法是加一个动态信任度判断——运动剧烈时降低加速度计的权重。
控制链路:从期望到输出
姿态解算出来的是当前姿态,控制器的任务就是让当前姿态追上期望姿态。四旋翼的控制链路是典型的串级PID结构:
| 层级 | 输入 | 输出 | 作用 |
|---|---|---|---|
| 外环(角度环) | 期望角度 vs 当前角度 | 期望角速度 | 消除角度误差 |
| 内环(角速度环) | 期望角速度 vs 当前角速度 | 期望力矩 | 消除角速度误差 |
| 混控器 | 期望力矩 + 期望推力 | 四个电机的PWM值 | 分配动力 |
你想想看,为什么用串级而不是单级?因为角速度环响应快,角度环响应慢。内环先把角速度稳住,外环再慢慢调角度。这样飞机才不会过冲。
个人经验:我调参时永远先调内环,再调外环。内环调好了,外环随便给个P值都能飞。内环没调好,外环怎么调都是抖。
混控器:数学到物理的桥梁
混控器这块,说白了就是个矩阵运算。四旋翼有四个电机,你要控制三个轴(横滚、俯仰、偏航)加一个总推力。四个输出控制四个自由度,刚好。
标准的混控矩阵长这样:
// 以X型四旋翼为例
Motor[0] = Throttle + Roll_PID + Pitch_PID - Yaw_PID
Motor[1] = Throttle - Roll_PID + Pitch_PID + Yaw_PID
Motor[2] = Throttle + Roll_PID - Pitch_PID + Yaw_PID
Motor[3] = Throttle - Roll_PID - Pitch_PID - Yaw_PID
这里要注意正负号。我曾经在项目里把Yaw的符号搞反了,结果飞机一解锁就在地上转圈。嗯,这种低级错误犯过一次就不会再犯了。
执行器:从PWM到螺旋桨拉力
最后一步是电机和螺旋桨。PWM信号送到电调,电调驱动电机旋转,电机带动螺旋桨产生拉力。这里有个容易被忽略的点——电机的响应延迟。
我测过不少电调,从收到PWM到电机达到目标转速,大概有20-50ms的延迟。这个延迟在调参时必须考虑进去。如果PID频率太高,电机根本跟不上,反而会引入震荡。
经验数据:大多数四旋翼的角速度环频率在200-400Hz,角度环频率在100-200Hz。电机响应延迟决定了你的控制频率上限。
完整信号流总览
说了这么多,我们来画一张完整的信号流图。这张图我每次带新人都会画一遍,因为它把整个飞控系统串起来了。
闭环:为什么飞控必须实时
你看这张图,从传感器到执行器再回到传感器,这是一个完整的闭环。飞控的实时性就体现在这里——每个控制周期都要完成一次完整的信号流。
我见过有人把姿态解算放在100Hz,控制放在400Hz。结果就是控制周期里姿态数据是旧的,相当于用上上帧的数据控制当前帧。飞机能不抖吗?
避坑指南:我曾经在一个项目里为了省CPU资源,把姿态解算降到50Hz。结果飞机低频晃动,怎么调PID都没用。后来把解算频率提到200Hz,问题立刻消失。记住:解算频率不能低于控制频率。
好了,这一章我们把飞控系统的完整链路走了一遍。从IMU怎么采集数据,到姿态解算怎么算角度,再到PID怎么算控制量,最后混控器怎么分配电机。你心里应该有个清晰的信号流地图了。