卷 I · 成环CH 04深度 4/24

为什么会晃

「力气太大就会晃」是一句半对的话,而半对的话最难纠正。这一章用一张八行的真值表把它拆开:力气大、有第二级惯性、有纯延迟——三个开关,八种组合。你会看到光靠力气一个,怎么加都不晃。

2×2×2 真值表阻尼比振荡的两个必要条件

▷ 先拧一下

一台只有一级惯性的设备(一开阀门温度就开始爬,指数式趋近,没有任何纯延迟)。给它配纯比例控制器。

现在把比例增益从 0.4 一路加到 4,加了十倍

A 会明显开始振荡——增益加十倍,任何系统都受不了 B 会冲过头一两次然后稳住 C 会冲过头一点点,几乎看不出来 D 一次也不会越过它最后停的位置。增益加到一万也不会

顺便再问一个:那这台设备加大增益,究竟换来了什么?

三个嫌疑人

一个环开始来回摆动,通常被归咎于三样东西:

  1. 力气太大(增益高,一点误差就下猛药);
  2. 系统有惯性(东西太重,推起来停不住);
  3. 看得太晚(延迟)。

这三条听起来都很有道理,而且都各自「解释得通」。问题是:它们不是并列关系。下面这个 demo 把它们做成三个独立的开关,八种组合都真跑一遍。

八行结果摆在一起,长这样:

力气惯性延迟越过终点结果
小(0.4)一级0 次一次也没越过
小(0.4)一级2 秒0 次一次也没越过
小(0.4)两级5 次晃 5 下才停(幅度 0.7%)
小(0.4)两级2 秒6 次晃 6 下才停(幅度 2.4%)
大(4.0)一级0 次一次也没越过
大(4.0)一级2 秒41 次晃 41 下才停(幅度 91.7%)
大(4.0)两级18 次晃 18 下才停(幅度 20.8%)
大(4.0)两级2 秒18 次晃 18 下才停(幅度 72.0%)

请盯住第 5 行

力气从 0.4 加到 4,十倍,而这台一级惯性的设备一次都没有越过它最后停的位置。不是「几乎没有」,是数学上精确的零:它的响应曲线是单调的。你把增益加到一百、一万、一亿,结论都一样。

所以:

◆ 这一章的主线

「力气大」单独一个,不会让环振荡。它必须和另一样东西配合:一个能让反馈回来得太晚的东西。

能提供这个「太晚」的有两类:两级以上的惯性,和纯延迟。而第 6 行和第 7 行告诉你它俩不是等价的——同样的力气,第二级惯性让它晃 20.8%,两秒延迟让它晃 91.7%纯延迟贵得多。

反过来也成立:第 3、4 行说明,光有延迟和惯性、没有力气,它也只是懒洋洋地晃两下(幅度 0.7% 和 2.4%),根本不成问题。振荡需要两个条件同时成立。

为什么一级惯性怎么加都不晃

这件事有一个非常干净的解释,不需要任何工具。

一级惯性的设备,行为可以写成一句话:「温度的变化速度,正比于它离目标还差多少」。数学上是 τ · dy/dt = −y + K·u

配上比例控制 u = Kp·(r − y),代进去整理一下,会得到:

# 闭环的运动方程(一级惯性 + 比例控制)

   τ (dy/dt) = −y + K Kp (r − y)
             = −(1 + K Kp) y + K Kp r

# 整理成标准形式:

   [ τ / (1 + K Kp) ] (dy/dt) + y = [ K Kp / (1 + K Kp) ] r
   └────── 新的时间常数 ──────┘      └──── 新的最终值 ────┘

# 看清楚发生了什么:
#   它还是一个一级惯性系统!只是
#     时间常数从 τ 变成 τ/(1+K Kp)      ← 快了 (1+K Kp) 倍
#     最终值从 K·u 变成 K Kp/(1+K Kp)·r ← 永远差一点点

# 而一级惯性系统的阶跃响应是 1 − e^(−t/τ):
#   单调上升,永远不越过终点。加多大增益都改不了这件事,
#   因为增益改的只是「多快」和「停在哪」,改不了「单调」。

这段推导值得多看两眼,因为它演示了闭环最本质的一件事:闭环系统还是一个动力学系统,只是参数变了。你不是给系统「加了一个控制器」,你是造了一台新机器。这台新机器的时间常数、最终值、乃至阶数,都可以和原来那台完全不同。

那么加大增益换来了什么?两样:快了 (1+K·Kp) 倍稳态误差小了 (1+K·Kp) 倍。全是好处,没有代价——在这台理想的一级惯性设备上。

这也是为什么初学者很容易得到「增益越大越好」的印象:在最简单的模型里,它确实如此。代价要到有第二个储能元件、或者有一点延迟的时候才出现——而现实里这两样几乎总是存在。

晃的程度,可以用一个数说清

第 7 行(两级惯性、无延迟)那种「晃几下然后停」的行为,在控制论里有一个标准的描述方式,用一个叫阻尼比的数,记作 ζ(读作 zeta)。

你不需要现在就理解它的定义(第 6 章会自然地推出来),只要先记住它的读法:ζ 是「刹车力度」。ζ = 0 完全没刹车(永远晃下去),ζ ≥ 1 刹车过猛(爬过去就不动了,绝不越线)。中间的每一个 ζ 都对应一个精确的过冲百分比:

  阻尼比 ζ    冲过头     每振一圈还剩     常见叫法
─────────────────────────────────────────────────
   0.05       85.4%       73.01%        几乎不刹车
   0.10       72.9%       53.18%
   0.20       52.7%       27.73%
   0.30       37.2%       13.86%
   0.40       25.4%        6.44%
   0.50       16.3%        2.66%
   0.60        9.5%        0.90%
   0.707       4.3%        0.19%        ← 教科书最爱
   0.80        1.5%        0.02%
   1.00        0.0%        0.00%        临界阻尼

# 这张表是精确的,来自一个闭式公式:
#   过冲 = exp(−π ζ / √(1 − ζ²))
# 反过来也能解:想要 25% 过冲,ζ = 0.4037
#              想要 10% 过冲,ζ = 0.5912
#              想要  2% 过冲,ζ = 0.7797

这张表在整本书里会被反复引用,值得记住三个锚点:ζ = 0.5 → 16.3%ζ = 0.707 → 4.3%ζ = 1 → 0%

「每振一圈还剩」那一列也很有用:ζ = 0.2 时每振一圈幅度剩 27.7%,所以你会看见明显的好几个来回;ζ = 0.7 时剩 0.19%,等于振一圈就没了——看起来就是「冲一下就稳住」。

✎ 术语正名:「过冲」

本书书名的这个词,在不同场合有两种算法,混起来会吵架:

  • 相对目标(峰值 − 目标) / (目标 − 起点)。这是你在乎的那个——「我冲过了要求线多少」。
  • 相对终值(峰值 − 最终停的地方) / (最终停的地方 − 起点)。这是描述系统脾气的那个。

纯比例控制永远到不了目标(第 5 章),这时候第一种算法会给出 0(因为它压根没越过目标线),但系统明明在晃。所以本章的真值表用的是第二种:它越过的是自己最后停的位置。到了卷 II 有了积分项、稳态误差归零之后,两种算法就重合了。

验证器会同时核对这两个量,正文里每次都会说清用的是哪一种。

▸ 在现实里

汽车悬挂。减震器就是那个 ζ。全新的减震器 ζ 大约 0.2–0.3,过减速带后车身晃一两下就停。减震器老化漏油之后 ζ 掉到 0.1 以下,你会明显感到车「一直在忽悠」——那正是表里 72.9%、每圈剩 53% 那一行。而如果 ζ 太大(比如某些运动车型),过坎会「哐」一下硬邦邦,因为它一点也不肯让。

关门器。公共场所门上那个液压筒是一个整定过的阻尼器。厂家调的就是 ζ ≈ 1:门恰好合上,不弹回来,也不慢吞吞。调坏了的那种要么砰地撞上(ζ 太小),要么半天关不严(ζ 太大)。

招人。业务忙不过来 → 招人 → 人到岗要三个月(延迟)→ 到岗时业务已经过了高峰 → 冗余 → 裁员 → 业务又起来了。这是一个典型的「大力气 + 长延迟」组合,对应表里最惨的第 6 行。缓解办法不是「招人时更谨慎」(那是降低增益,会让你一直缺人),而是缩短延迟:外包、内部调岗、提前建立候选人池。

✗ 这个直觉是错的
系统开始振荡,说明增益调大了,把增益调小就好。 调小增益确实能让它不晃——代价是它同时变慢、变软、稳态误差变大。而如果振荡的真正来源是延迟,你付出的这些代价换来的是一个本可以避免的妥协

请注意我不是说「调小增益是错的」。看真值表:降增益一定有效(第 1、2 行都不晃)。它是一个有效手段,而且是最便宜的一个。

问题在于它是一笔交易,不是修复。用第 5 章的话说,你把稳态误差从 1/(1+4K) 换成了 1/(1+0.4K);用第 2 章的话说,你抗扰动的能力按同一比例下降了。

正确的顺序是先问一句:这个环的相位滞后是从哪来的?

  • 如果来自纯延迟(第 6 行)——去缩短它。缩短延迟能同时拿到更大的增益上限和更快的响应,那是净收益,不是交易。
  • 如果来自第二级惯性(第 7 行)——考虑加微分项(第 7 章),它专治这一类。
  • 如果两样都改不了——那才是调小增益的时候,而且此时你应该知道自己在买什么、卖什么。
◈ 回读

D一次也不会越过。增益从 0.4 加到 4(十倍),一级惯性的设备越过终点 0 次;加到一万也一样,因为闭环仍然是一个一级惯性系统,而一级惯性系统的阶跃响应单调——这是它的结构决定的,不是参数决定的。

那加大增益换来了什么?两样,都是纯好处:响应快了 (1+K·Kp) 倍稳态误差小了 (1+K·Kp) 倍。在这台理想设备上,增益确实是越大越好。

而现实里几乎不存在这台设备——因为几乎一切东西都有第二个储能元件,或者一段传输时间。这本书剩下的部分,讲的就是那个「几乎」有多贵。

A 「增益加十倍,任何系统都受不了」——这是把「大增益」当成了振荡的充分条件。它连必要条件都不是(第 3、4 行说明小增益也能晃),更不是充分条件。真正的充分条件要到第 10 章才能说清:在某个频率上,环路的相位滞后达到 180°,而那个频率上的增益还大于 1。 B、C 「冲过头一两次」「一点点」——这两个答案都假设了「多少总会有一点」。而这里的答案是精确的零,不是「很小」。这个区别很重要:它意味着这不是一个程度问题,是一个结构问题。一级惯性系统的闭环阶跃响应,形状上不可能有峰。

这一章的一句话

振荡需要两样东西同时到场:足够的力气,和一个让你晚知道的东西——只有一个的时候,你其实很安全。

卷 I 到此结束。你现在手里有:一个环的五个零件、惯性和延迟的区别、以及「什么时候会晃」的真值表。卷 II 开始打开那个叫「控制器」的盒子,看看工业界九成的控制器里到底装了什么。第一个旋钮最简单,也最诚实:它会告诉你,纯比例控制永远差那么一点——回路增益 9 的时候差 10.00%,加到 99 才差 1%。