1为什么要懂PID?
很多新手飞穿越机,遇到飞机抖、飘、不跟手,第一反应就是"PID没调好"。但到底什么是PID?P、I、D三个数字分别管什么?调高调低会发生什么?如果这些都不清楚,调参就只能靠瞎猜——别人说"P加到45",你就加到45,根本不知道为什么。
PID调参确实是一门"艺术",但它不是玄学。理解了背后的原理,你就能根据飞机的实际飞行表现,有方向地去调整,而不是盲目试错。
这篇文章不讲复杂的数学公式,只用大白话和飞行中的实际感受,帮你搞懂PID到底在干什么。理解了原理,后续的调参操作才会有方向感。
2PID是什么?
2.1 一个控制循环
PID(Proportional-Integral-Derivative,比例-积分-微分)是飞控固件里的一个核心算法。它的工作流程可以简化成三步:
1. 读取:从陀螺仪(gyro)读取飞机当前实际的转动角速度
2. 计算:把"你想要的转动速度"和"实际的转动速度"做比较,算出误差
3. 输出:根据误差计算四个电机应该各自转多快,来缩小这个误差
这个过程每秒重复几千次。在Betaflight里,PID循环频率最高可以设到8KHz,也就是每秒计算8000次。
2.2 几个必须搞懂的术语
在深入之前,先记住四个关键词:
| 术语 | 含义 | 通俗理解 |
|---|---|---|
| Set-point(设定值) | 你想要飞机达到的转动角速度 | 摇杆打了多少,就对应一个目标转速 |
| Error(误差) | 设定值 - 陀螺仪实际测量值 | "想要的"和"实际的"之间差多少 |
| Control Loop(控制循环) | 读取传感器→计算误差→调整电机的完整过程 | 飞控每秒重复几千次的"工作循环" |
| Looptime(循环时间) | 完成一次控制循环所需的时间 | 8KHz对应每次循环0.125毫秒 |
举个例子:你把横滚杆打到一半,设定值可能是"每秒横滚500度"。但飞机因为惯性、风等原因,实际只转到了每秒300度。误差就是200度/秒。PID控制器的任务,就是调整电机转速,让实际转速尽快追上设定值,同时不要冲过头。
2.3 哪些固件用PID?
几乎所有主流飞控固件都使用PID控制器,包括:Betaflight(最主流,花飞/竞技)、Cleanflight / Baseflight(Betaflight的前身)、KISS、iNAV(远航/固定翼)、EmuFlight、Raceflight、Ardupilot等。
所以这篇文章讲的原理,不管你用什么固件都适用。具体数值范围可能不同,但P、I、D各自的作用逻辑是一样的。
3三个增益各自管什么?
PID控制器由三个部分组成,每个部分对应一个增益(gain)。增益就是一个乘数,数字越大,这一部分对最终电机输出的影响就越大。
可以把PID想象成三个工人一起推一辆车:
- P工人:看车离目标还有多远,离得越远推得越用力
- I工人:看车已经偏了多久,偏得越久推得越用力
- D工人:看车冲得有多快,冲太快就帮忙刹车
3.1 P(比例)—— 响应强度
P关注的是"当前的误差有多大"。误差越大,P项的输出就越大,飞控就越用力地去纠正。数学上,P项 = P增益 × 当前误差。
- 飞机变得非常"灵敏",感觉像是Rates被调高了一样
- 翻滚/横滚结束后出现明显回弹(bounce-back)
- 极端情况下出现高频振荡,飞机像手机震动一样抖
- 飞机感觉拖沓、不跟手,打杆后要等一下才有反应
- 跟踪摇杆动作不准确
- 设定值和实际转速之间差距大
P是"力度"。P高 = 反应猛但容易冲过头;P低 = 反应温和但拖沓。
3.2 I(积分)—— 抗干扰刚度
I关注的是"过去累积了多少误差"。它把过去一段时间的误差全部加起来(积分),误差持续的时间越长,I项的输出就越大。数学上,I项 = I增益 × 误差的累积和。
I存在的意义是什么?因为有些干扰力是持续存在的——比如风从侧面吹、电池装偏了导致重心不对、某个电机推力略小。P只能在产生误差瞬间做出反应,但如果一个持续的外力让飞机一直偏着,P每次纠正后又被外力推回去,就会一直存在一个稳态误差。I就是用来消除这种持续误差的。
- 出现低频振荡——比P过高导致的振荡频率慢,像飞机在"慢悠悠地晃"
- 翻滚/横滚后也可能出现回弹,但节奏更慢
- 风中飞行时飞机容易飘,姿态保持能力差
- 快速加减油门时出现点头(nose dip)
- 重心略有偏移时表现更明显
P增益可以抑制I引起的振荡。所以P和I之间存在一个比例关系,不是各自独立调的。一般来说,花飞风格I相对高一些(姿态保持好,动作干脆),远航/航拍风格I相对低一些(更柔和,不容易振荡)。
I是"刚度"。I高 = 抗风、姿态稳,但可能低频晃;I低 = 风中飘、油门点头。
3.3 D(微分)—— 阻尼
D关注的是"误差变化得有多快"。它计算误差的变化率(导数),如果误差正在快速缩小(说明飞机正在快速冲向目标),D项就会产生一个反向的力来"刹车",防止冲过头。数学上,D项 = D增益 × 误差的变化率。
可以把D想象成汽车的减震器。P是弹簧,把车身弹向目标位置;D是减震器,不让弹簧来回弹。
- D项会放大振动和噪声,对快速变化非常敏感
- 出现颤音(trilling)——高频的、类似手机震动的嗡嗡声
- 电机过热——频繁微调导致电流波动大、发热严重
- 手感可能变得"僵硬"
- 翻滚/横滚后回弹明显——P把飞机推过了头,没有足够的D来刹车
- Propwash(桨洗振荡)更严重——垂直下降时自身下洗气流造成扰动
为什么D过高会烧电机?
这是一个很重要的点。D项对噪声敏感,而陀螺仪采集到的信号里不可避免地带有电机振动、机架共振等噪声。D增益越高,这些噪声被放大得越多,飞控就会根据噪声不断发出微小的电机调整指令。电机在高速下频繁微调,电流波动大,发热就严重。所以D不是越高越好,必须配合滤波器使用。
D是"减震"。D高 = 不回弹、propwash小,但放大噪声、电机烫;D低 = 回弹大、propwash严重。
3.4 三个增益对比速查表
| P(比例) | I(积分) | D(微分) | Feedforward | |
|---|---|---|---|---|
| 关注什么 | 当前误差有多大 | 过去累积了多少误差 | 误差变化有多快 | 摇杆移动速度 |
| 通俗比喻 | 推车子的力度 | 对抗持续外力的刚度 | 减震器 | 预判助推 |
| 太高 | 高频振荡、翻滚回弹 | 低频振荡、慢回弹 | 颤音、电机过热、放大噪声 | 翻滚结束回弹 |
| 太低 | 拖沓、不跟手 | 风中飘、油门点头 | 翻滚回弹、propwash严重 | 响应延迟、跟踪差 |
| 主要影响 | 响应速度 | 姿态保持/抗干扰 | 稳定性/抑制过冲 | 初始响应速度 |
4Feedforward(前馈)—— 比P更快的响应
理解了P、I、D之后,还有一个重要概念必须知道:Feedforward(前馈)。
4.1 为什么P不够快?
P有一个本质缺陷:它是反应式的。只有当误差已经产生了——也就是飞机实际转速已经落后于设定值了——P才会开始发力。这就造成了一个固有的延迟:你打杆 → 飞机开始动 → 产生误差 → P才开始纠正。这个延迟在激烈飞行中会让飞机感觉"慢半拍"。
4.2 前馈的原理
前馈不走"误差→纠正"这条路。它直接观察你移动摇杆的速度,预判飞机需要多大的初始推力,然后提前给电机输出,不等误差产生就先动起来。
简单说:
P是"看到落后了才追"
Feedforward是"看到你要动了,先帮你推一把"
4.3 前馈太高会怎样?
和P过高类似,前馈过高会导致翻滚/横滚结束时出现回弹。因为前馈在动作开始时给了太大的初始推力,飞机冲过了目标,然后又被拉回来。
4.4 前馈和PID的关系
前馈不是PID的一部分,而是一个独立的附加项。最终的电机输出 = PID计算结果 + 前馈。现代Betaflight里前馈是默认开启的,而且对飞行手感影响很大。调参时通常先把PID调好,再微调前馈。
5P、I、D 三者的相互关系
到这里你可能会觉得:三个增益各自调各自的不就行了?没那么简单。三者之间存在相互影响,调一个可能会改变另一个的表现。
5.1 P 和 D:一对矛盾体
P负责"推",D负责"刹车"。
- P高了,需要更高的D来抑制过冲
- D高了,会削弱P的响应速度,可能需要适当提高P来补偿
- P/D比例比绝对值更重要
一个常见的调参思路是:先固定P,逐步提高D直到出现颤音/电机过热,然后回退一点;再逐步提高P直到出现振荡/回弹,然后回退。反复几次找到P/D的最佳平衡点。
5.2 P 和 I:比例关系
P可以抑制I引起的振荡。所以:
- 如果I偏高导致低频振荡,提高P有时能压住
- 但根本解决还是要降低I
- P/I之间有一个合理比例,不同机型、不同飞行风格比例不同
5.3 D 和 滤波器:密不可分
D对噪声敏感,所以D越高,就越需要好的滤波器来滤掉陀螺仪噪声。滤波器和D是配套调的——这个我们在第三篇《滤波器与Blackbox日志分析》里会详细讲。
5.4 调参的本质
不是找到"完美的P=40, I=50, D=25"这样的绝对数值,而是:
1. 找到P/D的最佳比例(响应 vs 稳定)
2. 找到P/I的最佳比例(灵敏度 vs 抗干扰)
3. 在不出现振荡的前提下,整体尽量拉高(增益越高,跟踪误差越小)
6为什么没有"万能PID"?
网上经常有人问"求一个5寸机通用PID"。答案是:不存在。因为每架飞机的最优PID都不一样,受以下因素影响:
6.1 硬件因素
| 因素 | 如何影响PID |
|---|---|
| 整机重量 | 越重惯性越大,需要更高的增益来克服惯性,但也更容易振荡 |
| 重量分布 | 质量集中在中心的飞机更灵敏、更跟手;质量外扩(如电池挂在尾部)转动惯量大,响应慢 |
| 推重比 | 推力余量越大,电机调整空间越大,PID可以调得更激进 |
| 电机扭矩 | 扭矩大的电机转速变化快,响应快,可以支持更高的增益 |
| 螺旋桨 | 桨越重、螺距越大,电机响应越慢;桨的平衡也影响振动 |
6.2 状态变化
即使是同一架飞机,以下变化也会让最优PID改变:换了不同重量/品牌的电池、加装了GoPro等外设、换了电机或螺旋桨、炸机后桨/机架/电机有轻微损伤(改变了共振频率)、电池位置变化导致重心偏移。
6.3 环境因素
风大的时候需要更高的I来抗风;海拔高、空气稀薄,螺旋桨效率下降,推重比变化;湿度影响空气密度。
理想的做法是:针对你自己的飞机、你常用的电池和配置、你常飞的环境,调出一套属于你自己的PID。别人的PID只能作为起点参考,不能直接照搬。
7小结
这一篇我们搞懂了PID的基本原理:
- PID是一个控制循环:每秒几千次地比较"想要的转速"和"实际的转速",调整电机来缩小误差
- P是力度:决定响应有多猛,高了振荡回弹,低了拖沓
- I是刚度:决定抗风和姿态保持能力,高了低频振荡,低了风中飘
- D是减震:决定抑制过冲和propwash的能力,高了放大噪声烧电机,低了回弹大
- Feedforward前馈:比P更快,通过预判摇杆动作提前给电机输出
- 三者相互影响:P/D平衡、P/I比例、D和滤波器配套,调参是找比例而非找绝对值
- 没有万能PID:每架飞机、每种配置、每个环境的最优值都不同