2. 飞控核心原理:姿态解算、PID控制与电机控制
各位同学,欢迎来到飞控核心原理这一章。说实话,很多新手一上来就被四元数、PID这些名词吓住了。其实没那么玄乎。我做了这么多年飞控,今天就把这些核心概念掰开了揉碎了讲给你听。
2.1 姿态解算:四元数与欧拉角
先说说姿态解算。说白了,就是让飞控知道飞机现在是什么姿势——是平飞、侧倾还是抬头?
2.1.1 欧拉角:直观但有问题
欧拉角有三个:俯仰角(Pitch)、横滚角(Roll)、偏航角(Yaw)。很直观,对吧?
- 俯仰角:机头抬多高
- 横滚角:机身侧倾多少
- 偏航角:机头朝哪个方向
但欧拉角有个致命问题——万向锁。当俯仰角接近±90°时,横滚和偏航会混在一起,解算就乱套了。我在项目中遇到过一架固定翼,做筋斗动作时姿态突然跳变,差点炸机。从那以后,我内部运算一律用四元数。
2.1.2 四元数:数学上的优雅方案
四元数用四个数表示旋转:q = w + xi + yj + zk。看着抽象,但好处很明显:
- 没有万向锁问题
- 插值平滑
- 计算效率高
嗯,这里要注意:四元数虽然好,但人眼看不懂。所以最终输出给地面站时,还是要转成欧拉角。
核心转换公式:
// 四元数转欧拉角
roll = atan2(2*(w*x + y*z), 1 - 2*(x*x + y*y))
pitch = asin(2*(w*y - z*x))
yaw = atan2(2*(w*z + x*y), 1 - 2*(y*y + z*z))
2.1.3 传感器融合
光有数学还不够。实际中,陀螺仪有漂移,加速度计有噪声。怎么办?融合。
我个人习惯用互补滤波——简单、轻量、够用。对于资源受限的飞控MCU,这比卡尔曼滤波实在多了。
我的经验:互补滤波的系数α一般取0.98左右。α越大,越信任陀螺仪;α越小,越信任加速度计。调试时从0.98开始,根据实际飞行效果微调。
2.2 PID控制原理
姿态解算完了,接下来就是控制。PID是飞控的灵魂。
2.2.1 比例控制(P)
最简单:偏差越大,输出越大。比如飞机偏右了,就向左打舵。但只有P会震荡——你想想看,飞机快回正时速度太快,冲过头了。
2.2.2 积分控制(I)
解决静态误差。比如有风一直吹,P控制拉不回来,I项就慢慢累积力量,直到把飞机拉正。
我曾经吃过I项太大的亏。一架四轴悬停时一直低频晃动,查了半天发现是I项饱和了。后来加了积分限幅,问题解决。
2.2.3 微分控制(D)
预测未来。D项看偏差的变化率,提前刹车,抑制震荡。
警告:D项对噪声极其敏感。我建议在D项前加低通滤波,否则飞控会抖得像筛糠一样。
2.2.4 串级PID结构
实际飞控用的是串级PID——内环控制角速度,外环控制角度。
// 伪代码示例
// 外环:角度环
angle_error = target_angle - current_angle
angle_output = Kp_angle * angle_error
// 内环:角速度环
rate_error = angle_output - current_rate
rate_output = Kp_rate * rate_error + Ki_rate * integral + Kd_rate * derivative
// 最终输出到电机
motor_output = rate_output
为什么用串级?因为内环响应快,外环响应慢。这样飞机既稳又灵活。
2.3 PWM信号与电机控制
PID算完了,怎么让电机转?靠PWM。
2.3.1 PWM基本原理
PWM就是方波。通过调节占空比(高电平时间占比)来控制电机转速。
| 占空比 | 电机状态 |
|---|---|
| 0% | 停止 |
| 50% | 半速 |
| 100% | 全速 |
2.3.2 电调与PWM频率
无人机用的无刷电机,需要通过电调(ESC)驱动。电调接收PWM信号,一般频率是50Hz-400Hz。
这里有个坑:不同电调支持的PWM频率不同。我遇到过用400Hz驱动一个老款电调,结果电调直接冒烟了。所以一定要看电调手册。
2.3.3 油门曲线与电机映射
PID输出值(比如-1000到+1000)需要映射到PWM占空比(比如1000us到2000us)。
// 油门映射
pwm_value = 1500 + pid_output * 500 / 1000
// 1500us是中点,500us是行程范围
避坑指南:我曾经在代码里忘了做限幅,PID输出超了范围,结果电机直接全速旋转,飞机差点翻倒。所以一定要加饱和处理。
2.4 知识体系总览
下面这张图,是我梳理的本章知识脉络。你把它记在脑子里,整个飞控的骨架就有了。
好了,这一章的内容就到这里。姿态解算是飞控的眼睛,PID是大脑,PWM和电机是手脚。三者缺一不可。下一章我们开始动手写代码,把这些理论变成真正的飞控程序。
本章要点回顾:
- 四元数用于内部运算,欧拉角用于人机交互
- 串级PID:外环角度、内环角速度
- PWM信号要加限幅,防止电机失控
- 互补滤波是轻量级传感器融合的好选择