每個控制器都得回答的兩個問題
想像你把方向盤輕推幾度然後放手。一輛好車會平順地回正、貼著路面行駛。一輛調得糟的車可能左右搖擺、擺幅越來越大直到失控甩尾——或者它會穩下來,但總是偏在你瞄準位置的左邊一點。這正是任何受控系統的兩種失效模式:它可能不穩定(擺動越來越大),也可能有誤差(停在錯的地方)。在你日後調整任何一個增益之前,你得有辦法對這兩者做檢驗。
這兩者彼此獨立。一個系統可以穩如磐石,卻仍然永遠停在離目標一公尺的地方。另一個可以精準命中,卻劇烈失穩。所以工程師把驗收測試一分為二:穩定性問的是*暫態會不會消退?*,穩態準確度問的是*存活下來的訊號落在哪?*整個這一級,就是回答這兩者的工具箱——便宜、而且在你開機前就能用。
BIBO 穩定與左半平面法則
穩定性那個乾淨、工程級的定義叫 BIBO:*有界輸入、有界輸出*(Bounded Input, Bounded Output)。如果每一個維持在有限範圍內的輸入,都產生同樣維持在有限範圍內的輸出,這個系統就是 BIBO 穩定。給穩定的放大器餵 1 伏特訊號,你得到有限的輸出;給不穩定的餵同樣訊號,無論你多溫柔,輸出都會一路衝到電源軌。這就是「輕推產生擺動、而非爆炸」的正式版本。
從第 3 級你已經有了幾何判據。寫出閉迴路轉移函數,找出它的極點——也就是分母的根。每個位於 s = σ + jω 的極點,都對響應貢獻一個形如 e^(σt) 的項。若 σ 為負,該項衰減;若 σ 為正,它無界增長。所以法則簡單得驚人:一個系統穩定,當且僅當每一個極點都嚴格落在 s 平面的左半邊(σ < 0)。只要有一個極點溜進右半邊——哪怕只差一根頭髮——整個系統就不穩定。
jω
^
UNSTABLE | STABLE
(poles run | (poles decay)
off to ∞) |
x | x <- left-half pole: e^(σt), σ<0, dies out
| /
────────────+──────────────> σ
x |
| | poles ON the jω axis (σ=0):
right-half | marginally stable -> sustained oscillation,
pole grows | neither grows nor decaysRouth–Hurwitz:不求根也能判穩定
左半平面法則完美無瑕——只有一個麻煩。找極點意味著要把分母多項式因式分解,而對三階以上的系統,這是一場硬仗(一旦係數裡還藏著一個可調增益 K,更是手算辦不到)。1876 年 Edward Routh 找到一條繞過去的路,後由 Adolf Hurwitz 精煉:你只看係數,就能判定是否*所有*根都有負實部——一個根都不用解。
做法分兩部分。先做必要檢查:任何穩定多項式,每個係數都得存在、而且同號——少一個或變號的係數,立刻判「不穩定」。完整測試:建出 Routh 陣列,一張從係數交叉相乘往下推的小表。系統穩定,當且僅當第一欄的每個元素都同號。第一欄每變號一次,恰好數出一個落在右半平面的極點。
我們來跑一個真實的三階例子。假設某個迴授迴路給出特徵多項式 s³ + 6s² + 11s + 6。每個係數都存在且為正,所以它通過了必要檢查——但對三階以上,光憑這點不能證明穩定。建出陣列:
Characteristic polynomial: s^3 + 6 s^2 + 11 s + 6
Routh array first column
───────────────────── ───────────
s^3 | 1 11 1
s^2 | 6 6 6
s^1 | b1 0 b1
s^0 | c1 c1
b1 = (6*11 - 1*6) / 6 = (66 - 6)/6 = 60/6 = 10
c1 = (b1*6 - 6*0) / b1 = (10*6)/10 = 6
First column: 1, 6, 10, 6 -> all POSITIVE, no sign changes
=> 0 right-half-plane poles => STABLE
(Sanity check: s^3+6s^2+11s+6 = (s+1)(s+2)(s+3),
roots at -1, -2, -3 -- all in the left half-plane. ✓)當增益是符號時,真正的威力才顯現。如果控制器增益 K 出現在係數裡,第一欄的元素就成了關於 K 的表達式。要求它們全部維持為正,就化成一組不等式——而那些不等式正好交給你讓迴路維持穩定的 K 精確範圍。這一招——找出讓某個極點跨上 jω 軸的臨界增益——是整個控制設計中最常用的計算之一。
穩態誤差與終值定理
現在假設系統通過了穩定性測試——暫態消亡,剩下了某個東西。這個存活者是落*在*目標上,還是差一截?你命令輸出去的位置,和它實際停下的位置之間的差距,就是[[ee-steady-state-error|穩態誤差]],通常寫作 e_ss。一個設定 21 °C 卻維持在 20.4 °C 的恆溫器,穩態誤差就是 0.6 °C——惱人、頑固,而且完全能事先預測。
不必模擬哪怕一秒就能預測它的工具,是終值定理:一個訊號的長期值等於 lim (s→0) 的 s·E(s),其中 E(s) 是誤差的拉普拉斯轉換。把誤差轉換乘上 s,讓 s 滑到零,靜止誤差就跳出來了。使用它有一條鐵律:系統必須已經穩定。對不穩定的系統套用這個定理,它會樂呵呵地回你一個有限、卻完全虛構的數字。
Unity-feedback loop, open-loop transfer function G(s):
R(s) --->(+)---->[ G(s) ]----+----> C(s)
^- |
|__________________|
Error: E(s) = R(s) / (1 + G(s))
Final-value theorem: e_ss = lim (s->0) s * R(s) / (1 + G(s))
The three classic test inputs (R(s)) :
step r(t)=1 R(s) = 1/s "can it reach a level?"
ramp r(t)=t R(s) = 1/s^2 "can it track a slope?"
parabola r(t)=t^2/2 R(s) = 1/s^3 "can it track acceleration?"為什麼是這三種輸入?因為它們構成一道難度階梯。[[ee-step-response|階躍]]要求系統到達並維持一個固定位準。斜坡要求它跟上以等速移動的目標——像雷達天線追蹤一架掠過天空的飛機。拋物線要求它跟上一個持續加速的目標。一個比一個難,而一個把階躍考滿分的系統,面對斜坡可能無望地落後。
系統型別:數一數積分器
精妙的部分來了。一個迴路能否以零誤差追蹤階躍、斜坡或拋物線,歸結為一個整數:系統型別,定義為開迴路轉移函數 G(s) 中純積分器(1/s 因子,即位於原點的極點)的個數。積分器是一個不斷累積誤差的記憶體——而正是這份累積把誤差抹平。數一數 1/s 因子,你就能從一張小表上讀出穩態誤差,完全不用微積分。
System type = number of 1/s factors (origin poles) in open-loop G(s)
Error constants: Kp = lim G(s) Kv = lim s G(s) Ka = lim s^2 G(s)
s->0 s->0 s->0
┌────────┬──────────────┬──────────────┬──────────────┐
│ Type │ STEP error │ RAMP error │ PARABOLA err │
├────────┼──────────────┼──────────────┼──────────────┤
│ 0 │ 1/(1+Kp) │ ∞ │ ∞ │ finite step err
│ 1 │ 0 │ 1/Kv │ ∞ │ tracks step!
│ 2 │ 0 │ 0 │ 1/Ka │ tracks ramp too
└────────┴──────────────┴──────────────┴──────────────┘
Pattern: each added integrator kills the error to one harder input,
and leaves a finite error on the NEXT one up the ladder.把這張表當故事讀。一個 Type 0 系統(沒有積分器)有有限但非零的階躍誤差——就像一個樸素的比例式恆溫器,總是停得差一點點。一個 Type 1 系統有一個積分器,所以它的階躍誤差*恰好為零*,但對移動(斜坡)目標仍會落後一個有限量。一個 Type 2 系統能完美追蹤斜坡,只在加速目標上留下有限誤差。注意這個規律:每個積分器替你買到對某一輸入的完美,以及對下一個更難輸入的有限誤差。
綜合起來:驗收測試
從現在起,你在日後每一級設計的每個控制器,都會用同一份兩部分的考卷打分,而你已經握有評分標準了。先穩定、後準確——順序就是這樣,因為對一個不會穩下來的東西談準確,毫無意義。
- 寫出閉迴路特徵多項式(閉迴路轉移函數的分母,即令 1 + G(s)H(s) = 0)。
- 做必要檢查:所有係數都在、且全部同號。在這裡失敗就結束了——它不穩定。
- 建出 Routh 陣列,確認第一欄從不變號。若增益 K 是符號,解不等式求出 K 的穩定範圍。
- 現在、且唯有確認穩定後,數一數開迴路 G(s) 中的積分器以得到系統型別。
- 查型別表(或套用終值定理)以預測階躍/斜坡/拋物線誤差。判斷它是否達標。
- 若誤差太大,加入積分作用以提升型別——然後跳回步驟 1,因為你剛剛動了極點,必須重新檢查穩定性。
那最後一步的回圈,就是整門手藝的縮影。你提升型別來消滅誤差,這把極點往右推、威脅穩定,於是又把你送回 Routh–Hurwitz。穩定與準確不是兩件分開的雜活——它們是同一根槓桿的兩端,而迴授設計者的工作,就是找到讓兩者都待在界內的那個點。日後的各級——根軌跡、波德圖與奈奎斯特法——全都不過是更豐富地看見並調整這同一個平衡的方法。