卷 II · 三个旋钮CH 06深度 6/24

积分:把「差一点」攒起来

第二个旋钮只做一件事:把误差一直加起来。就这么一个动作,能把上一章那个「永远差一点」精确地干成零。但它同时给这个环装上了记忆——而有记忆的东西会记仇,会惯性行事,会在事情已经解决之后还接着做。这一章讲它换来了什么,也讲它的账单。

积分项PI = 标准二阶教科书公式失手的地方

▷ 先拧一下

还是上一章那台设备(K = 1,惯性 10 秒,无延迟)。现在给控制器加上积分项:控制量 = Kp·e + Ki·∫e dt

把 Ki 设成一个非常小的数,比如 0.01——小到几乎可以忽略。

A 稳态误差从 10% 降到 9% 左右,聊胜于无 B 稳态误差降低的幅度正比于 Ki,Ki 这么小基本没用 C 稳态误差精确变成 0,只是要等很久 D 稳态误差变成 0,而且和 Kp 之前的值无关

C 和 D 只差半句话,但那半句话是这一章的重点。

一个不肯罢休的装置

积分(integral,I)的控制律:

   u = Ki × ∫ e dt        (把误差从头到现在累加起来)

# 离散实现(你实际会写的代码):
   I += Ki * e * dt
   u  = I

它和比例项的区别,可以用一句话概括:

比例项问的是「现在差多少」,积分项问的是「一共差了多久」。

这个区别带来一个关键性质。回忆上一章那个死结:比例控制器要有输出就必须有误差。而积分器不受这个约束——它的输出来自历史,所以即使此刻误差为零,它照样可以保持一个非零的输出。

换句话说,积分器把「维持现状所需要的那份输出」记了下来,从此不再需要用误差去养活它。

于是稳态误差被干掉了。而且干得非常干净:

◆ 这一章的主线

只要 Ki > 0,不管它多小,稳态误差都精确等于零。

道理是一句反证:假设最后稳定下来时误差不为零,那积分器就还在往上(或往下)累加,输出就还在变,那就不叫稳定。所以稳定的唯一可能是误差恰好为零。

Ki 的大小不影响这个结论,只影响到达零所需要的时间。这就是本章开头那题 C 和 D 的区别:不只是「和 Ki 无关」,而是和 Kp 也无关——积分项的这个性质是结构性的,不是参数调出来的。

代价:这个环长了一岁

天下没有白拿的东西。加上积分项之后,这个闭环发生了一件大事:它的阶数从一阶变成了二阶。

「阶数」听起来抽象,但它的物理含义很具体:系统里有几个能储存东西的地方。原来只有一个(设备的热惯性),现在多了一个——积分器本身。积分器里存的是「历史欠账」,它和热惯性一样,是一个有记忆、需要时间排空的东西。

而两个储能元件凑在一起,就满足了第 4 章那张真值表里的振荡条件。所以:

# 纯比例(一阶闭环)        加了积分(二阶闭环)

   1 │      ╭──────           1 │     ╱╲
     │    ╱   ← 停在 0.9    目标 ═╪════╱══╲═╱╲═══════
     │  ╱                       │   ╱    ╲╱
   0 │╱                       0 │ ╱
     └───────────→ t            └───────────→ t
   永不越线,但永远差一点      能到位,但会冲过头

# 这不是巧合,这是一笔交易:
#   你用「可能冲过头」换来了「一定能到位」。

全书最漂亮的一次凑巧

现在来看看这个二阶闭环长什么样。把 PI 控制器接到一阶设备上,整理特征方程,会得到:

∑ 算一遍
# 设备:τ (dy/dt) = −y + K u
# 控制器:u = Kp e + Ki ∫e dt,  e = r − y
# 对整个式子再求一次导(把积分号消掉),整理后得到闭环特征方程:

   τ s² + (1 + Kp K) s + Ki K = 0

# 而标准二阶系统长这样(第 4 章那张表就是给它用的):

   s² + 2 ζ ωn s + ωn² = 0

# 对照系数,两边一一对上:

   ωn = √( Ki K / τ )                ← 固有频率:它晃得多快
   ζ  = (1 + Kp K) / ( 2 √(Ki K τ) )  ← 阻尼比:刹车有多狠

这两行是卷 II 的核心。它们把两个抽象的旋钮翻译成了两个有画面的量:

  • Ki 只出现在 ωn 里(还有 ζ 的分母)——加大积分,系统晃得更快,刹车更弱。
  • Kp 只出现在 ζ 的分子里——加大比例,刹车更狠,但不改变晃动的频率。

所以「PI 怎么调」有了一个具体得多的说法:用 Ki 决定这件事有多快,用 Kp 决定它冲不冲过头。这比「凭感觉试」强太多了。

拖动下面两个滑杆,同时盯着 ζ 那一格:

几组具体的数(都是这台设备,K = 1,τ = 10):

KpKiζωn二阶公式说真跑出来
10.051.41420.07070.0%0.0%
20.21.06070.14140.0%0.0%
30.90.66670.30006.0%13.8%
10.40.50000.200016.3%19.1%
52.50.60000.50009.5%19.5%

看最后两列。前两行完全对上,后三行对不上,而且差得不小——第三行是 6.0% 对 13.8%,差了一倍多

这不是仿真的误差,也不是我算错了。这是一件真实发生、值得单独讲清的事。

教科书公式为什么会失手

第 4 章那张阻尼比对照表,是给标准二阶系统用的:

   标准二阶:     ωn² / (s² + 2ζωn s + ωn²)      ← 分子是个常数

   而 PI 闭环:  (Kp s + Ki) K / (τ s² + (1+KpK) s + KiK)
                  └────┬────┘
                   分子里有一个 s !

分子里那个 s 意味着闭环有一个零点,位置在 s = −Ki/Kp。而零点会做一件事:把响应的前半段加速,于是曲线冲得更猛,过冲比纯粹的二阶公式预测的更大。

第三行那组参数(Kp = 3,Ki = 0.9),零点在 −0.3,而 ωn 恰好也是 0.3——零点和系统本身的速度一样快,影响就非常明显:预测 6.0%,实际 13.8%。而第一、二行的零点相对很远(−0.05、−0.1,而 ζωn 更大),影响就可以忽略,两者完全吻合。

✎ 术语正名:「零点」

控制论里有一对总被一起提到的词:极点(poles)和零点(zeros)。它们是传递函数分母和分子的根。

极点是这本书的主角:它们决定系统的脾气——晃不晃、多快衰减、会不会炸。第 13 章讲的全是极点。

零点常常被初学者忽略,因为它们不影响稳定性。但它们影响形状:一个靠近原点的零点会让响应更冲,一个在半平面的零点会让系统先往反方向走一下(叫非最小相位,比如水位控制、飞机抬头时先掉高度)。

本书不深入零点,但至少你现在知道了:当仿真和教科书公式对不上时,先去看看分子。——顺便,很多真实的 PID 实现会用「目标值加权」(把比例项写成 Kp(βr − y),β < 1)来削弱这个零点,这是工业界的常规做法。

我把这一段完整写出来,是因为它是一个诚实的样本:公式是从模型来的,而模型和真东西之间总有一道缝。这本书里的每一个数字都真跑过一遍,正是为了让这种缝暴露出来,而不是被公式盖住。

▸ 在现实里

巡航定速上长坡。纯比例的巡航定速在长上坡会稳定地慢几公里;有积分项的会慢慢补上来,最后精确到位。而下坡时你会感到它「一开始收油收得不够,过一会儿才收够」——那是积分器在排掉上坡时攒的账。

自动扩容的目标利用率。纯比例规则会稳在 60% 以外的某个值;加上积分项(很多云厂商的实现里有)能精确落在 60%。但同时你会看到扩容器在流量下降后还多开了一会儿机器——积分器在排账。

人的「补偿心理」。「这周落后了,下周多做点补上」就是积分行为——你在对累积的偏差做反应,而不是对当前的偏差。它保证你长期不掉队(稳态误差为零),代价是节奏会晃:欠账多了猛冲,冲过头了又歇几天。典型的 ζ 偏小的二阶系统。

✗ 这个直觉是错的
积分项就是「加强版的比例项」——它让控制器更用力地追目标,所以 Ki 越大追得越紧。 积分项和比例项是两种不同的东西,不是同一个东西的强弱。比例项对现在反应,积分项对历史反应;加大 Ki 不会让它「追得更紧」,只会让它晃得更快(ωn 变大)同时刹车更弱(ζ 变小)。

看那两个公式就明白了:ωn = √(KiK/τ)ζ = (1+KpK)/(2√(KiKτ))。Ki 出现在 ωn 的分子和 ζ 的分母上——它把两件事往相反方向推

这带来一条实用的整定纪律:Ki 和 Kp 要一起动。只加大 Ki 不加大 Kp,ζ 会掉,过冲会涨;想更快又不想更晃,两个得按比例一起加。(第 8 章那些整定公式全都同时给出 Kp 和 Ti,正是因为这个。)

另外一个更实际的教训:积分项的记忆是会闯祸的。它记住的是「历史欠账」,而如果那笔账是因为设备根本做不到(阀门已经全开),它会一直记下去,越记越多,直到目标变了也放不下——第 15 章会给你看这笔账要还多久:同一个环,有抗饱和 41.1 秒回到目标,没有的话 340.9 秒

◈ 回读

D稳态误差精确变成 0,而且这个结论和 Ki 无关,也和 Kp 无关。哪怕 Ki 是 0.0001,最后也是精确的零——只是它要花很久很久。

Ki 只决定多快到零,不决定能不能到零。这是一个结构性质,不是参数性质:只要控制器里有一个积分器,稳态误差就活不下来。

A 「从 10% 降到 9%」——把积分项当成了比例项的小补丁。它不是补丁,它是另一种机制。 B 「降低幅度正比于 Ki」——这个直觉来自「参数越大效果越强」这条几乎放之四海皆准的经验。而在这里它彻底失效:效果是阶跃式的,Ki 从 0 变成任何正数,稳态误差就从 1/(1+K) 变成 0。这是一条不连续的边界。 C 「精确变成 0,只是要等很久」——这个答案基本正确,只差了后半句。之所以把 D 列出来,是想强调那个更强的结论:它和你之前调的 Kp 完全无关。这意味着你可以放心地为了「不振荡」把 Kp 调小,而不必担心精度——精度由积分项独立保证。这个分工,是 PI 控制器统治工业界的根本原因。

这一章的一句话

积分项用「记住历史」换来了「一定到位」,而记忆的账单是:这个环从此会冲过头,也从此会记仇。

下一章是第三个旋钮,它管的是将来。它能把过冲从 20.0% 压到 7.5%,听起来白拿——直到你看见执行器那一栏:抖动涨了 11.5 倍。而且这个代价在无噪声的仿真里完全看不见,这也是为什么现实中一大半的 PID 控制器最后都把 D 关掉了。