简介:本人自动化专业在读,自行学习江协系列视频,近期需要用到PID。学习完PID对应视频后,与大家分享一些总结和经验,同时也为了博主方便日后的复习。欢迎大家一起讨论!如果有错误请各位大佬指出


前言

PID 是控制系统中最经典、最常用的一类控制算法。很多初学者第一次接触 PID 时,容易被比例、积分、微分这些概念绕晕,感觉公式很多、名词很杂,不知道它到底在解决什么问题。

其实,PID 的核心思想并不复杂。它本质上是在做一件事:

根据目标值和实际值之间的误差,不断调整控制输出,让系统尽快、尽稳、尽准地逼近目标。

本文只讲 PID 的基本原理,不写代码,不展开串级控制,适合作为入门理解和教学整理。

为了更容易理解,本文会用一个非常直观的比喻来贯穿全文:

  • P 看现在

  • I 看过去

  • D 看未来

你会发现,PID 其实没那么神秘,它只是把“现在偏了多少”“过去积了多少”“未来会不会冲过头”这三件事结合起来,做出一个更合理的控制决策。


1.PID是什么?

PID 是 Proportional(比例)Integral(积分)Differential(微分) 的缩写。

它是一种典型的闭环控制算法。所谓闭环,简单来说就是:控制器在输出控制量的同时,还会持续获取被控对象的反馈值,然后根据 目标值(Target)和 实际值(Actual)的误差(Error)不断修正输出(Out),最终让系统尽可能快、尽可能稳地逼近目标值。

PID 的核心思想可以概括为一句话:

有偏差就修正,而且不是盲目修正,而是根据误差的大小积累和变化趋势来修正。

比如说,我们想让一个电机转到某个速度:

  • 目标速度:1000 rpm

  • 实际速度:800 rpm

那么此时误差就是:

error = target - actual = 1000 - 800 = 200

控制器看到误差后,就知道“现在还差 200”,于是会增加输出,让电机继续往目标靠近。

但问题来了:

  • 只看当前误差够不够?

  • 如果误差已经持续很久了怎么办?

  • 如果速度上升太快,马上就要冲过头了怎么办?

这三个问题,正好对应 PID 的三部分:

  • P:根据现在的误差立刻修正

  • I:根据过去累计的误差继续补偿

  • D:根据误差变化趋势提前刹车

所以你可以把 PID 理解成一个很会“判断局势”的控制器:

  • 看现在,决定推多大力

  • 看过去,决定要不要补一把

  • 看未来,决定要不要提前收一点


2.开环控制与闭环控制

在真正讲 PID 之前,先把“开环”和“闭环”分清楚,因为 PID 本质上属于闭环控制


2.1 开环控制

开环控制就是:只发命令,不看结果

比如给电机一个固定 PWM,占空比发出去了,但不去采集速度反馈,这就是开环。

你可以把它理解成:

我只负责下达指令,至于你最后执行成什么样,我不管。

例如:

  • 给小车电机固定输出 50% 占空比

  • 给加热器固定输出某个功率

  • 给风扇固定一个电压

这类控制方式结构简单,实现容易,但有个明显问题:

它不知道系统最终有没有达到目标。

比如同样是给电机 50% PWM:

  • 空载时转得很快

  • 带负载时转得很慢

  • 电池电压变了,速度也会变

  • 摩擦变化了,结果也会变

也就是说,同一个输入,不一定得到同一个输出结果

开环控制的优点     开环控制的缺点
结构简单 抗干扰能力弱
成本低 无法自动修正误差
实现方便 精度低
对计算资源要求低 环境一变化,结果就容易偏掉


2.2 闭环控制

闭环控制则不同。闭环控制会把系统的实际输出重新测回来,与目标值进行比较,然后根据误差继续修正输出。

也就是说,它不是只下命令,而是会不断问一句:

“我现在到底做到没有?”

如果没做到,就继续调;如果快过头了,就收一点;如果已经到了,就尽量稳定住。

所以闭环控制系统通常具有更好的:

  • 准确性

  • 稳定性

  • 抗干扰能力

  • 自适应修正能力

PID 正是闭环控制中最经典的一种算法。


3. PID 的基本公式与系统框图

基本公式:

这个公式虽然看起来有点长,但本质上就是三部分相加:

  1. 比例项 P (Kp比例系数

  2. 积分项 I  (Ki积分系数

  3. 微分项 D (Kd微分系数

很多实际场景里,更常用的理解方式不是死记公式,而是记住这句话:

PID 的输出 = 现在怎么调 + 过去补多少 + 未来刹多早

也就是:

  • P 决定当前反应有多猛

  • I 决定长期偏差能不能消掉

  • D 决定系统会不会冲过头


3.1 系统框图怎么理解?

一个典型的 PID 控制闭环,大致可以这样理解:

  1. 先给系统一个目标值

  2. 传感器测到当前的实际值

  3. 目标值减去实际值,得到误差

  4. PID 根据误差计算出一个输出值

  5. 输出作用到被控对象

  6. 被控对象状态发生变化

  7. 再次测量,重复上述过程

这就是一个持续循环修正的过程。

你会发现,PID 并不是“一次算完就结束”,而是:

边看边调,边调边看,不断把系统往目标拉。


4. 用“过去、现在、未来”理解 PID

很多人学 PID,最大的问题不是不会背公式,而是不知道三项到底在干什么。

假设你在开车,目标是把车停在停车线前面。

  • 现在离停车线还多远? —— 这是 P

  • 过去是不是一直没停准,总是差一点? —— 这是 I

  • 照现在这个冲法,会不会马上冲过线? —— 这是 D

所以 PID 其实像一个很有经验的司机:

  • 看现在差多少,先踩油门或刹车

  • 看过去一直差着,就多补一点

  • 看趋势快冲过头了,就提前收力

这就是 PID 的直觉本质。


5. 比例项 P:只看“现在”的误差

比例项是 PID 中最直观、最好理解的一项。

它的表达式是:

意思就是:

误差越大,输出越大;误差越小,输出越小。

比如现在误差是 10:

  • 如果 Kp=0.1,那么比例输出就是 1

  • 如果 Kp=1,那么比例输出就是 10

很明显,Kp 决定了系统修正误差时的“手劲”有多大


5.1 比例项的作用

比例项的作用是:快速响应误差,让系统尽快向目标逼近。

如果现在离目标很远,比例项就会给出比较大的调节力度;
如果已经快接近目标了,比例项就会自动减小力度。

所以比例项最大的特点就是:

反应快,动作直接。


5.2 Kp 调大后会发生什么?

如下图所示:

红色线条表示电机目标速度,紫色线条是电机实际速度。

系统到最后可能会停在离目标值还有一点偏差的位置,而不是完全重合。

Kp 增大后,比例项权重变大,通常会带来以下现象:

正面效果      负面效果
系统响应更快 超调增加
上升时间缩短 振荡趋势增强
更有力地朝目标逼近 系统更容易不稳定
稳态误差通常会减小 过大时可能来回摆动

​​​​​​也就是说,Kp 并不是越大越好。可以把 Kp 理解成“推力系数”:

  • 推力太小,系统慢吞吞

  • 推力太大,系统容易冲过头(超调),甚至产生自激振荡


5.3 纯比例控制为什么会有稳态误差?

但纯比例控制通常会有一个问题:稳态误差

这是一条非常重要的结论,也是很多初学者最容易忽略的地方。

纯比例控制时,如果误差变成 0,那么比例项输出也会变成 0:

                

但现实中的被控对象往往并不会在输入为 0 时就稳定不动。

很多系统在没有驱动力时,会因为摩擦、负载、惯性、重力、偏置等因素,自动向某个方向偏移

于是就会出现这样的情况:

  • 如果误差完全为 0,控制器输出也为 0

  • 输出为 0 时,被控对象又会自己偏掉

  • 一旦偏掉,误差又出现

  • 比例项再输出一个平衡这种偏移的力

最终,系统会停在一个:

误差不为 0,但输出刚好足够抵消对象偏移”的位置。

这个残余误差,就是稳态误差

问:那为什么驱动力和外力平衡时,稳态误差存在,系统不会自动增大输出吗?

纯比例控制的输出只等于当前误差乘以比例系数。当这个输出刚好和摩擦力、负载力平衡时,系统就会停在一个仍有误差的位置。由于纯比例控制没有历史累积能力,它不会因为误差持续存在就继续增大 PWM,这就是稳态误差产生的原因。只有加入积分项后,系统才会因为误差长期存在而继续增加输出,最终把误差进一步消除。


6. 积分项 I:它看的是“过去积累了多少误差”

如果说比例项只看现在,那么积分项就是在看历史。

它的核心思想很简单:

如果系统长期都有误差,那就不能只看当前这一点点误差,而要把过去累积的误差也算进去。

积分项的表达式可以理解为:

意思是:

  • 把过去每一时刻的误差都累加起来

  • 误差持续存在得越久,积分项越大

  • 然后再乘上一个系数 Ki,形成积分输出


6.1 积分项到底在解决什么问题?

积分项最核心的作用就是:

消除稳态误差。

前面说过,纯比例控制可能停在“离目标还差一点”的地方。

为什么会这样?因为误差小了以后,比例输出也小了,推不动了。

那积分项的做法是:

只要这个误差一直存在,我就一直记着,一直累计,直到累计出足够大的补偿量为止。

也就是说,哪怕当前误差已经不大了,只要它持续存在,积分项就不会放过它。

这就像一个很“记仇”的人:

  • 你偶尔差一点,算了

  • 但你一直差一点,那就不行

  • 差一天我记一天,差十天我记十天

  • 记到最后,总要把这点偏差补回来

所以积分项是专门用来处理“总差一点”的。


6.2 用生活化的方式理解积分

继续用停车的例子。

假设你停车时总是离停车线差 10 厘米,而且每次都这样。
如果只有比例项,可能每次接近了就收力,最后总停在差 10 厘米的地方。

但如果加入积分项,控制器会想:

“你不是这一次差 10 厘米,你是一直都差 10 厘米。这个误差不能就这么算了。”

于是积分项会把这 10 厘米不断累计,最终形成额外补偿,让你继续往前微调,直到真正停准。

所以积分项看的不是“你现在差多少”,而是:

“你过去到底欠了多少账。”


6.3 Ki 调大后会发生什么?

一般来说,Ki 增大后,会有这些现象:

正面效果 负面效果
消除稳态误差更快 系统更容易超调
长期偏差能被更快补偿 响应更容易变慢、变拖
最终精度提高 积分过强会导致振荡

也就是说,积分不是越强越好。

因为它有一个典型副作用:

滞后。

积分项是靠“累积”起作用的,它不像比例项那样立刻反应,而是需要时间一点点攒起来。

这就意味着:

  • 它消除静态误差很有用

  • 但如果积得太多,也容易让系统“收不住”

所以积分项很像“后劲”:

  • 该有,但不能过猛

  • 有了它,系统能更准

  • 太多了,系统容易拖泥带水,甚至过冲


6.4含有比例项和积分项的PID输出值

积分项用于弥补纯比例项产生的稳态误差,若系统持续产生误差,则积分项会不断累积误差,直到控制器产生动作,让稳态误差消失

Ki越大,积分项权重越大,稳态误差消失越快,但系统滞后性也会随之增加

改变Kp和Ki参数,不同的现象:

图中对比表明:Kp 提高响应速度,Ki 消除静差;参数合适时波形平稳,参数过大时则容易产生超调与振荡。


7. 微分项 D:它盯的是“未来的趋势”

前面两项:

  • P 看现在

  • I 看过去

那 D 看什么?

D 看的是:

误差正在怎么变化。

虽然微分项并不能真的预测未来,但它通过观察误差变化的快慢,能提前判断系统接下来可能发生什么。

这就是为什么很多人会说:

微分项像是在“预测未来”。

它的表达式可以理解为:

也就是看误差变化的斜率。

  • 如果误差变化很快,微分项反应就强

  • 如果误差变化很慢,微分项反应就弱

  • 如果误差基本不变,微分项几乎不起作用


7.1 微分项的本质作用是什么?

微分项最核心的作用是:

抑制误差的剧烈变化,给系统增加阻尼,减少超调和振荡。

比如系统正在快速逼近目标。
虽然这时候误差在减小,看上去是好事,但如果减得太快,就说明系统可能由于惯性马上冲过头。

微分项一看趋势不对,就会提前给出一个“反方向的制动作用”。

斜率一定程度上反映了误差未来的变化趋势,这使得微分项具有 “预测未来,提前调控”的特性

微分项给系统增加阻尼,可以有效防止系统超调,尤其是惯性比较大的系统

所以它的特点是:

不是等冲过头了再救,而是在快冲过头之前先拦一下。


7.2 用开车来理解 D 项

还是用停车线举例。

你开车接近停车线时:

  • 如果离得很远,应该踩点油门

  • 如果已经很近了,但车速还很快,你就会提前刹车

这个“提前刹车”的动作,其实就很像微分项。

因为你不是只看“现在还差多少”,而是在看:

照现在这个冲法,下一秒会不会直接冲过头?

这就是 D 项的意义。

所以可以把它理解为:

  • P 是推你去追目标

  • I 是补你长期欠下的误差

  • D 是防你冲得太猛


7.3 Kd 调大后会发生什么?

通常来说,Kd 增大后,系统会出现这些特点:

正面效果 负面效果
抑制超调 对噪声更敏感
减少振荡 过大时动作发硬、卡顿
增加稳定性 响应可能变慢
提前制动 容易放大测量波动

所以微分项常被称为“阻尼项”。

它像汽车减震器,不是负责把你推到前面,而是负责让整个过程不要太颠、太冲、太飘。

但它有一个问题:

微分特别敏感。

因为它关注的是“变化率”,而噪声本身往往就是快速变化的,所以微分项很容易把噪声也当成真实变化,导致输出抖动。

这也是为什么很多实际系统里,D 项用得比较谨慎。


8. 三项合起来,PID 到底是怎么工作的?

现在把三项放在一起看,就很清楚了。

当系统偏离目标时:

  • P 会立刻根据当前误差给出修正,负责“先动起来”

  • I 会盯住长期存在的误差,负责“最后补到位”

  • D 会关注误差变化趋势,负责“别冲过头”

所以 PID 的整体行为可以总结成一句非常形象的话:

P 负责冲,I 负责补,D 负责稳。

或者换成“过去、现在、未来”的说法:

PID 就是一个同时参考现在、过去和未来趋势的控制器。

  • 现在差多少? —— 比例项马上出手

  • 过去一直差着吗? —— 积分项慢慢补偿

  • 未来会不会冲过头? —— 微分项提前制动

这三者结合起来,系统就比只用一种判断方式更聪明得多。


总结

PID 不是一堆公式的堆砌,而是一种很符合直觉的控制思想:

“用比例处理当前,用积分修正过去,用微分预判未来。”

它的目标始终只有一个——让系统更快、更稳、更准地到达目标。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐