卷 II · 三个旋钮CH 05深度 5/24

比例:永远差那么一点

最朴素的控制律:差得越多,用力越大。它简单、稳、快,而且有一个无法回避的毛病——它永远到不了目标。这个毛病不是实现上的疏忽,是这条控制律的定义直接推出来的,而理解它为什么必然发生,是理解下一个旋钮的前提。

比例控制稳态误差 1/(1+K)增益买来了什么

▷ 先拧一下

一台设备:给它 1 份功率,最终温度升 1 度(增益 K = 1);它有 10 秒的惯性,没有延迟。

你用纯比例控制:控制量 = Kp × (目标 − 当前)。目标设成 1.0,从 0 开始。

把 Kp 设成 9。等它彻底稳下来之后,温度会停在哪?

A 1.0。控制器会一直推到误差为零为止 B 0.9 左右——差个百分之十 C 0.5 左右——差一半 D 9.0——增益 9 会把它推过头九倍

如果你选了 A,请把「一直推到误差为零」这句话再读一遍,然后问:误差真的为零的那一刻,控制器的输出是多少?

一条一行的控制律

比例控制(proportional control,P)就一句话:

   u = Kp × e        其中 e = r − y(目标 减 实际)

差得越多,用力越大;差得少了,就轻点。这条规则朴素到几乎不需要解释,而且它是你每天在做的事:车离前车远了多踩点油,近了松开;账上钱少了多接活,多了就歇歇。

它有三个真实的优点,不该被小看:

  • 不会自己抖起来(在一级惯性对象上,第 4 章已经证过);
  • 没有记忆——它不记得过去发生过什么,所以不存在「攒了一肚子火」这种事(第 15 章会告诉你有记忆的控制器有多能记仇);
  • ——误差一出现,输出立刻到位,没有任何积累过程。

然后是那个毛病。

为什么它必然差一点

先用一句话把它说穿,然后再算:

比例控制器要产生输出,就必须存在误差。误差归零的那一刻,它的输出也归零了。

想象那台加热器已经稳在目标温度上。稳住意味着它在持续散热,所以必须持续加热——阀门必须开着某个开度。而阀门开度 = Kp × 误差。要让开度不为零,误差就不能为零。

换句话说:那个残余的误差,就是它用来「养活」自己输出的东西。它不是没修好,它是必须留着这么多才能维持现状。

这个残余误差有个名字叫稳态误差(steady-state error,ess),而它的大小有一个极其简单的公式:

∑ 算一遍

稳态时一切都不动了,所以:

# 稳态时,设备的输出 = 增益 × 输入
   y = K · u
# 而控制器的输出 = Kp × 误差
   u = Kp · (r − y)

# 代进去:
   y = K · Kp · (r − y)
   y (1 + K Kp) = K Kp · r
   y = r · K Kp / (1 + K Kp)

# 所以误差:
   e = r − y = r · [ 1 − K Kp/(1 + K Kp) ]
             = r / (1 + K Kp)

★ 稳态误差 = 目标 / (1 + 回路增益)

K·Kp 这个乘积叫回路增益(loop gain):信号绕环走一圈被放大了多少倍。它是这本书里最重要的一个量之一,第 14 章那两把尺子量的都是它。

注意这个式子的形状:分母永远比分子大 1。所以稳态误差永远大于零,无论 Kp 多大。你只能让它越来越小,不能让它等于零。这是一条渐近线,不是一个可以够到的点。

这就是本章开头那题的答案:Kp = 9,K = 1,回路增益 9,稳态误差 = 1/(1+9) = 10.00%,温度停在 0.9000

拖动下面的滑杆自己看。注意那条曲线:它单调爬升、不越线,然后停在一个不是 1.0 的地方。

整张表:

Kp回路增益稳态误差最终停在闭环时间常数比开环快
0.50.566.67%0.33336.667 s1.5×
1150.00%0.50005.000 s2.0×
2233.33%0.66673.333 s3.0×
4420.00%0.80002.000 s5.0×
9910.00%0.90001.000 s10.0×
19195.00%0.95000.500 s20.0×
49492.00%0.98000.200 s50.0×
99991.00%0.99000.100 s100.0×

这张表里有一件事值得单独指出:「误差小」和「反应快」是同一个旋钮控制的,而且是同一个倍数。回路增益 9,误差小十倍、响应也快十倍。它们不是两个可以分别调节的性能指标,它们是同一件事的两个说法

这一点在后面会变得很重要:当你为了不振荡而降低增益时,你同时失去了精度和速度,没有办法只放弃一样。

◆ 这一章的主线

比例控制的一切好坏,都由回路增益 K·Kp 这一个数决定:

  • 稳态误差 = 1/(1+K·Kp)
  • 速度提升 = (1+K·Kp)
  • 抗扰动能力 = 扰动的影响被除以 (1+K·Kp)

三条全是「越大越好」。所以你自然会问:那到底是什么拦着我把它调大?

不是功耗,不是成本,不是执行器上限。是那个到卷 III 才登场的东西。而在此之前,第 6 章会先给你一个不用加大增益就能把稳态误差干掉的办法。

「比例带」:同一件事的另一种说法

如果你去看工业温控器或者老一点的资料,会看到一个叫比例带(proportional band,PB)的参数,单位是百分比。它就是 Kp 的倒数换了个说法:

   PB = 100% / Kp

# 读法:「误差要有多大,控制量才会从 0 走到满量程」
#   PB = 10%  ⇔ Kp = 10   —— 误差占量程 10% 时,阀门就全开了(很凶)
#   PB = 100% ⇔ Kp = 1    —— 误差要占满量程,阀门才全开(很温和)
#   PB → 0%   ⇔ Kp → ∞    —— 退化成开关控制(第 16 章)

比例带的好处是它有物理直觉:「差 5 度阀门就全开」比「Kp = 20」好想象得多。见到它别慌,就是同一个旋钮。

▸ 在现实里

老式抽水马桶的浮球。那是一个纯粹的机械比例控制器:水位越低,浮球越低,杠杆把进水阀开得越大。它也精确地表现出稳态误差——水永远停在略低于关闭点的位置,因为阀门要保持一丝丝开度才能补上漏掉的水。老马桶那种「一直细细地流」就是这么来的。

自动扩容的目标利用率。「目标 CPU 60%」这类规则,本质是比例控制。而如果你的扩容规则没有积分项,它就会稳定在一个不等于 60% 的值上——很多人以为是配置没生效,其实是 1/(1+K) 在起作用。

限速时的油门。没有巡航定速的时候,人靠比例控制维持车速:慢了多踩点,快了松一点。而上坡时你会发现车速稳定地比限速低一点点——你的脚也有稳态误差。人克服它的方式是「觉得不对劲就多踩一点」,那正是下一章的积分项。

✗ 这个直觉是错的
稳态误差是因为增益不够大。把增益调够大,误差就消失了。 稳态误差永远不会消失,只会变小。而且加大增益不是消除它的正确手段——正确手段是换一种控制律(加积分项),那一招能把它变成精确的零,而且不需要动增益。

这个直觉的错误在于它把「渐近趋近」当成了「可以达到」。1/(1+K) 这条曲线永远在零上方,你只是在花越来越大的代价买越来越小的改善:从 10% 压到 1%,回路增益要从 9 涨到 99——力气涨 11 倍,只换回 9 个百分点

而这 11 倍力气是有代价的,只不过在这台理想的一级惯性设备上还看不见。等到第 9 章给它加上 2 秒延迟,你会发现回路增益连 8.5 都过不去——压到 1% 所需要的那个 99,从一开始就不在选项里。

这才是积分项真正的价值:它不是「另一种把误差调小的办法」,它是在你的增益预算被延迟卡死之后,唯一还能把稳态误差干到零的东西。

◈ 回读

B温度停在 0.9000,稳态误差 10.00%。而且顺便:闭环时间常数从 10 秒变成 1.000 秒,快了整整 10 倍。

那个残余的 0.1 不是没修完,是必须留着:控制器靠它产生输出 0.9,而这台设备正需要 0.9 的输入才能维持在 0.9 度。误差、输出、温度三者互相咬合,一个都不能动。

A 「一直推到误差为零」——这是把比例控制器想成了一个有意志的东西。它没有意志,它只有一条乘法。误差真的为零时它的输出也是零,而输出为零时温度会掉下来——所以这个状态不可能是稳态 C 「差一半」——这是 Kp = 1 时的答案(回路增益 1 → 误差 50%)。很多人对「增益」的直觉停在「乘以 1」附近,而这个式子是 1/(1+K),不是 1/K,那个 +1 很关键:它是没有控制器时的基准。 D 「推过头九倍」——把开环增益和闭环行为搞混了。开环里给输入 9 确实会到 9;但闭环里温度一升起来,误差就变小,控制量随之变小。环会自己把自己拉住,这正是闭环和开环的根本区别。

这一章的一句话

比例控制靠误差活着,所以它绝不会把误差消灭干净——那个残余不是缺陷,是它维持现状的口粮。

下一章加上第二个旋钮,它专治这个毛病,而且治得非常彻底:只要积分增益大于零,不管多小,稳态误差都精确归零。代价是这个环从此有了记忆——而记忆会带来一样比例控制从来没有过的东西:过冲。你还会看到全书最漂亮的一次凑巧:一阶设备加 PI 控制,闭环恰好是那个标准的二阶系统,第 4 章那张阻尼比对照表可以直接套上去用。