PID 控制基础:比例、积分、微分

飞控调参,说白了就是跟 PID 这三个字母打交道。很多新手一上来就调 P、调 I、调 D,结果飞机要么抖成筛子,要么飘得像风筝。我刚开始做飞控那会儿也踩过这个坑——调了一下午,最后发现连比例方向都搞反了。

这一章,咱们把 PID 的底裤扒干净。你理解了这三个字母到底在干什么,后面调参才不会抓瞎。

1. 比例控制(P)—— 最直接的纠偏

比例控制,就是「偏差越大,修正越猛」。你想想看,飞机往右偏了 10 度,P 项就输出一个向左的力,偏得越多,力越大。

核心公式: P_out = Kp × e(t)
其中 e(t) 是当前偏差,Kp 是比例系数。

我在项目中遇到过一架四轴,悬停时总是往一个方向慢慢飘。检查了重心、电机、桨叶都没问题,最后发现是 P 值太小,根本推不动飞机回正。加大 Kp 之后,飞机立刻稳住了。

但 P 不是越大越好。Kp 太大,飞机会在目标位置来回震荡,就像弹簧拉过头又弹回来。我见过有人把 Kp 调到 8.0,飞机一解锁就开始高频抖动,电机嗡嗡响,差点炸机。

避坑指南: 我曾经在调试一款 250mm 穿越机时,Kp 从 2.0 直接跳到 4.0,结果飞机在滚转轴上出现持续 5Hz 的振荡。记住:P 值每次调整幅度不要超过 30%,调完必须试飞验证。

2. 积分控制(I)—— 消除静差

比例控制有个硬伤:它无法消除「静差」。什么叫静差?就是飞机明明有偏差,但 P 项输出的力刚好被外力抵消了,飞机就停在那里不动了。

举个例子:飞机受到持续侧风,P 项输出一个力去对抗,但风一直吹,P 项只能维持现状,偏差永远消不掉。这时候就需要 I 项出场。

核心公式: I_out = Ki × ∫e(t) dt
积分项把过去的偏差累加起来,时间越长,输出越大,直到把静差吃掉。

我个人习惯把 I 项叫做「记账本」。它把每一次的偏差都记下来,然后一笔一笔地还。你想想看,如果风一直吹,积分值就会一直涨,直到输出足够大,把飞机拉回水平。

但 I 项也有副作用。积分饱和是个大问题——如果飞机被卡住或者传感器异常,积分值会一直累加,等恢复正常时,积分已经大到让飞机猛冲过去。我建议在代码里加上积分限幅,一般限制在油门量的 20%~30%。

参数 作用 调大后果 调小后果
Kp 快速响应偏差 震荡、抖动 响应慢、回正无力
Ki 消除静差 超调、积分饱和 静差无法消除
Kd 抑制变化趋势 高频噪声放大 震荡抑制不足

3. 微分控制(D)—— 提前刹车

微分控制看的是「变化趋势」。飞机正在快速靠近目标,D 项会提前输出一个反向力,防止冲过头。说白了,它就是个刹车。

核心公式: D_out = Kd × de(t)/dt
微分项对偏差的变化率敏感,变化越快,输出越大。

我记得有一次调试一架大型六轴,P 和 I 都调好了,但飞机在快速转向时总是 overshoot 一下才稳住。加了 D 项之后,转向变得干脆利落,几乎没有超调。

但 D 项对噪声极其敏感。飞控的陀螺仪数据本身就有噪声,微分运算会把噪声放大。我建议在 D 项前面加一个低通滤波器,截止频率设在 20~50Hz 之间,否则飞控会一直抖。

实战技巧: 我通常先调 P,让飞机能基本稳住;再加 D 抑制震荡;最后加 I 消除静差。这个顺序在 90% 的机型上都适用。

4. PID 控制器的数学表达式

把三个部分加起来,就是完整的 PID 控制器:

u(t) = Kp × e(t) + Ki × ∫e(t) dt + Kd × de(t)/dt

在飞控里,我们用的是离散形式,因为单片机只能处理离散采样:

u(k) = Kp × e(k) + Ki × Σe(i) × Δt + Kd × (e(k) - e(k-1)) / Δt

其中 Δt 是控制周期。飞控一般跑在 1kHz~4kHz,也就是 Δt = 0.001~0.00025 秒。这个周期越短,控制效果越好,但对算力要求也越高。

5. PID 在飞控中的应用场景

飞控里不止一个 PID 控制器。以四轴为例,至少需要 6 个:

  • 内环(角速度环): 控制滚转、俯仰、偏航的角速度,响应最快
  • 外环(角度环): 控制滚转、俯仰、偏航的角度,响应稍慢
  • 高度环: 控制垂直速度或高度,通常用串级 PID

我习惯先调内环,再调外环。内环调好了,外环才有意义。你想想看,如果角速度都控制不住,角度控制就是空中楼阁。

串级 PID 结构:
外环输出 → 内环目标值 → 内环输出 → 电机
外环周期一般是内环的 3~5 倍,比如内环 1ms,外环 3~5ms。

6. 知识体系图

下面这张图把 PID 在飞控中的完整链路画出来了,你一看就明白:

PID 在飞控中的应用链路 期望姿态 角度环 PID 角速度环 PID 电机输出 陀螺仪反馈 姿态解算 关键说明: • 外环(角度环)输出作为内环(角速度环)的目标值 • 内环响应速度比外环快 3~5 倍,保证控制稳定性 • 陀螺仪反馈经过姿态解算后,同时提供给内外环 • 实际调参时,先锁死外环,调好内环再放开外环

7. 调参顺序建议

我总结了一套调参流程,你照着做,至少不会炸机:

  1. 先调内环 P: 从 0 开始慢慢加,直到飞机出现轻微震荡,然后回调 20%
  2. 加内环 D: 抑制震荡,让响应变得干脆,D 值一般是 P 值的 1/10~1/5
  3. 加内环 I: 消除静差,I 值一般是 P 值的 1/20~1/10
  4. 调外环 P: 内环稳定后,外环 P 从 0 开始加,直到角度响应满意
  5. 外环 D 和 I: 根据实际飞行效果微调,一般外环 D 很小甚至为 0
重要提醒: 我曾经在调参时忘记保存参数,结果炸机后所有数据丢失。每次调参前先备份当前参数,调完一组就保存一次。这个习惯救了我好几次。