PID 算法是工业控制领域应用最广泛的算法之一,堪称经典中的经典。它不仅是很多控制系统的基石,同时也最能体现反馈控制的思想。在 云栈社区 的技术讨论中,PID 一直是嵌入式与自动化方向的高频话题。掌握其设计与实现,对于研发人员来说足以应对大多数常见的控制问题。
PID 算法的一般形式
PID 算法通过误差信号控制被控量,控制器本身是比例(P)、积分(I)、微分(D)三个环节的加和。在 t 时刻,我们规定:
-
输入量为:

-
输出量为:

-
偏差量为:


PID 算法的数字离散化
假设采样间隔为 T,则在第 K 个 T 时刻:
偏差表达式为:

积分环节用加和的形式表示为:

微分环节用斜率的形式表示为:

最终,PID 算法离散化后的式子为:

上式可进一步表示为经典的 PID 位置型公式:

在式中:
-
比例参数 k_p:控制器的输出与输入偏差值成比例关系。一旦出现偏差,比例调节会立即产生作用以减少偏差。

特点:过程简单快速、能够加快调节并减小误差;但会使系统稳定性下降,且容易产生余差。
-
积分参数 k_i:主要用来消除静差(系统稳定后输出值与设定值间的差值)。它实际上是一个偏差累积的过程,通过累积误差来抵消系统固有的静差。

-
微分参数 k_d:反应偏差信号的变化趋势,能够根据趋势进行超前调节,从而增加系统的快速性。

以上是位置型 PID 的离散形式。另一种常见的表述是增量式 PID。根据上文,我们可以轻松地推导出 u(k-1) 的表达式:

那么,增量调节值 Δu(k) 即为:

这就是离散化 PID 的增量式表达。不难看出,增量式的结果仅与最近三次的偏差有关,这大大增强了系统的稳定性。需要注意的是,最终的输出量 u(k) 应该是 u(k-1) 加上增量调节值。

为什么需要 PID?
设想一个场景:我们希望将水温控制到 30℃。普通的“到位即停”策略,会由于加热惯性(余热)导致温度继续上冲,加上环境散热,系统难以稳定。

PID 控制的整体过程是:设定一个目标值,反馈系统传回实际输出值并计算误差,PID 控制器根据此误差实时调整输入量,最终使输出快速、平稳地维持在设定值。

本质上,引入 PID 的原因在于,普通控制手段无法让输出既快速又稳定地达到并锁定在设定值。
控制器 P、I、D 项的选择
深入了解各种控制规律的适用场景,有助于我们更精准地进行 技术文档 中提及的参数整定查阅:
(1) 比例控制(P):能较快地克服扰动,动作快,但不能很好地稳定在理想值,有余差。适用于通道滞后小、负荷变化不大、且允许有余差的场合。
(2) 比例积分控制(PI):在比例的基础上消除余差。应用极为广泛,适用于通道滞后小、负荷变化不大,但不允许有余差的场合。
(3) 比例微分控制(PD):微分具有超前作用。对于容量滞后大的控制通道,引入微分能显著提高系统的动态性能。不适合纯滞后大、或测量信号有噪声的系统。
(4) 比例积分微分控制(PID):一种较为理想的控制规律,结合了三者的优点(消除余差、提高稳定性)。适用于通道滞后大、控制要求高的场合。
值得注意的是,时间滞后包含容量滞后(测量滞后与传送滞后)和纯滞后。控制规律的选用必须依照过程特性和工艺要求来定,而不是所有场合都盲目套用 PID。参数 Kp、Ti、Td 的设定是核心,调试阶段需要程序具备随时修改和记忆参数的能力。
数字 PID 控制器
模拟 PID 的离散化,其对应关系通常如下所示:

进而在数字系统中,我们可以得到差分方程的形式,将其拆解为比例项、积分项和微分项:

参数的自整定
在某些场景下,工作对象不确定,需要引入参数自整定的概念。本质是通过 N 次测量为新对象寻找一套合适的参数。
1. 临界比例度法(Ziegler-Nichols)
在纯比例作用下,逐渐增加增益直到产生等幅振荡。
- 将纯比例控制器接入系统(Ti = ∞,Td = 0)。
- 由小到大改变比例增益 K,直到闭环出现持续等幅振荡。
- 记录此时的临界增益
Ku 和临界周期 Tu。
- 按下表得出 PID 控制器参数。

注意事项:试验时应使系统工作在线性区;对于无自平衡特性的对象,按表求得的参数可能使衰减率偏大;部分具有大时间常数的单容对象可能无法用此法整定。一般认为该法的适用范围最好满足:

- 当 $K_pK_u > 20$ 时,应采用更复杂的控制算法。
- 当 $K_pK_u < 2$ 时,应使用能补偿传输迟延的控制策略。
- 当 $1.5 < K_pK_u < 2$ 且精度要求不高时,可修正使用 PID。
- 当 $K_pK_u < 1.5$ 时,微分作用已不大,使用 PI 控制器即可。
2. 衰减曲线法
闭环扰动试验采用衰减振荡(如 4:1 或 10:1)。
- 置纯比例作用,系统稳定后做设定值阶跃扰动。
- 寻找出现 4:1 衰减振荡的过程(如下图 a),记录此时的比例增益
Ks 和振荡周期 Ts。

- 利用
Ks 和 Ts 按下表计算出控制器整定参数。

注意:给定的干扰不能太大(约 5%);对于反应快的系统(如流量),很难得到严格的 4:1 曲线,一般来回波动两次达稳定即可。
3. 经验整定法
- 常用经验值:流量系统 P 40~100,I 0.1~1 min;压力系统 P 30~70,I 0.4~3 min;液位系统 P 20~80,I 1~5 min;温度系统 P 20~60,I 3~10 min,D 0.5~3 min。
- 整定口诀:阶跃扰动投闭环,参数整定看曲线;先投比例后积分,最后再把微分加;理想曲线两个波,振幅衰减4比1;比例太强要振荡,积分太强过程长;动差太大加微分,频率太快微分降;偏离定值回复慢,积分作用再加强。
4. 复杂调节系统的参数整定
以串级系统为例,常采用“先副后主”的两步整定法。先将主回路的比例度放 100%,积分最大,微分为零,按 4:1 衰减法整定副回路;随后把副回路视为主回路的一个环节,同样用 4:1 衰减法整定主回路,最后按经验公式计算主、副回路参数。需留意,如果主、副对象时间常数相近,调整不当可能会引发“共振”。
PID 核心概念的形象理解
我们可以通过一个“漏水的水缸”来类比:
- 采样周期:小明每隔一段时间检查一次水位。检查间隔太长,水漏光;太短,无用功。这个“检查时间”就是采样周期。
- 比例系数:小明用盆、桶或瓢加水。工具的大小决定了加水的剧烈程度,这就是比例系数。
- 积分时间:为了避免一次性加水溢出,小明在水缸上放一个漏斗,让水慢慢流进。漏斗口径的大小控制了流速,这对应了积分时间。
- 微分时间:为了应对突发要求,小明在水面上方凿了个孔,多余的水会通过管子漏走。这个漏出的快慢就是微分时间。
比例带、稳态误差与手动复位
比例控制(P) 的输出与误差成比例关系。下图清晰地展示了比例带(PB)与操作输出(MVp)之间的关系:

纯粹的比例控制往往会产生稳态误差(Off set)。从响应曲线可见,比例带大或小时,测量值 PV 都会与设定值 SV 存在固定的偏差。

为了消除这个稳态误差,我们可以设定一个手动复位值(Manual Reset,MR)。公式表现为:

通过调整 MR,可以将负荷线与控制特性线交点位移,从而让系统输出尽量逼近目标值。

然而,每次都手动复位并不实用。于是,积分控制(I) 应运而生——它能自动改变输出量,起到与手动复位等价的效果。从下图可以看到,在不同积分时间下,I 控制输出叠加 P 控制输出后,能使合成控制量持续增强以消除误差。

微分控制(D) 则是通过误差的变化率来预测未来的趋势,以此提供超前控制,使被控过程趋于稳定。从波形对比中可以看出,微分时间越长,合成的 P+D 控制作用就越强。

设定值改变时的控制效果
不同的 P、I、D 参数组合,会带来截然不同的控制效果。理想的效果是快速响应且无过大超调,而过强或过弱的参数则会导致超调过大或稳定过慢。

我们还可以根据测量值的变动波形,按照如下象限图来定性调整 PID 参数。

实际应用体会与总结
在实际项目中,PID 算法的运用需要灵活的阶段性策略。
以直流电机控制为例,利用 PID 算法调节转速时,通常是通过光电开关测速、单片机计算偏差并输出 PWM 来调节电压。这类系统往往受限于电机的物理特性。
而以高频感应加热从 25℃ 加热到 700℃ 为例,我们可以这样操作:
- 全力加热阶段(如 25~600℃):温差巨大,采用 100% 全功率输出。
- P 算法阶段(如 600℃ 以上):根据当前温度与目标的误差进行反馈,进一步逼近目标(如达到 650℃)。
- I 算法阶段(如 640~760℃):在 P 的稳态极限附近介入,通过累积误差寻找能维持 700℃ 的驱动值,从根本上消除 P 算法产生的净差。
- D 算法阶段(如 690~710℃):接近目标时进行微动,抑制剧烈变化,维稳。
很多人刚一上手就把 P、I、D 三个环节都加上,结果反而控制不好。本质上,P 是“打个差不多的大样”,I 是“来回修改拟合至逼近理想”,D 则是“定稿后不允许大改,只做有限微调”。