為什麼你的 PID 參數調到「剛剛好」,換一顆負載就全毀了?
從手調 PID 升級到系統建模:用轉移函數、二階系統、波德圖與穩定餘裕,量化機電系統「離震盪有多遠」。
為什麼你的 PID 參數調到「剛剛好」,換一顆負載就全毀了?
你照著入門篇把轉檯定位系統做出來了:感測、PWM、離散 PID 一應俱全。你花了一個下午手調 $K_p$、$K_i$、$K_d$,終於讓轎廂平滑停層、轉檯精準定位。然後老闆說:「把轉檯換成兩倍重的那一款。」你重新通電——系統開始劇烈震盪,甚至完全發散。為什麼?
問題的根源在於:手調 PID 是在「試出一組剛好讓某個特定系統穩定的參數」,但你並不真正知道這個系統「離不穩定有多遠」。 你調出來的是一個點,不是一片安全區。當負載慣量 $J$ 變兩倍、或溫度讓馬達電阻 $R$ 漂移、或感測迴路多了 2 ms 延遲時,這個點可能就掉出穩定區之外了。
進階機電整合的核心,是從「試參數」升級到「用數學描述整個閉環系統的動態,量化它的穩定餘裕(stability margin),再據此設計控制器」。這篇文章帶你走過這條路:把物理系統寫成轉移函數(transfer function),理解二階系統的行為,用頻率響應(frequency response)讀出系統的「體質」,並計算它離震盪還有多少安全空間。

從微分方程到轉移函數:系統的「指紋」
入門篇給了直流馬達的兩條時域微分方程式。但只要系統一複雜,直接解微分方程就變得不切實際。控制工程的關鍵工具是拉普拉斯轉換(Laplace transform),它把「時域的微分方程」變成「s 域的代數方程」。微分 $\frac{d}{dt}$ 變成乘以 $s$,積分變成除以 $s$,整個動態被壓縮成一個分式——轉移函數。
轉移函數 $G(s)$ 定義為「輸出的拉普拉斯轉換」除以「輸入的拉普拉斯轉換」(假設零初始條件):
$$ G(s) = \frac{Y(s)}{U(s)} $$
以直流馬達為例,把入門篇那兩條方程式(電壓平衡與旋轉牛頓第二定律)做拉普拉斯轉換並消去電流 $i$,可得「輸入電壓 $V$ → 輸出轉速 $\omega$」的轉移函數:
$$ G(s) = \frac{\omega(s)}{V(s)} = \frac{K}{(Ls + R)(Js + b) + K^2} $$
分母展開是 $s$ 的二次多項式,所以馬達本質上是一個二階系統。但這裡有個關鍵的工程簡化:電氣時間常數 $\tau_e = L/R$ 通常遠小於機械時間常數 $\tau_m = J/b$(電流變化比轉子加速快得多)。當 $L \to 0$ 時,分母降為一次:
$$ G(s) \approx \frac{K}{R J s + (R b + K^2)} = \frac{K_{dc}}{\tau_m s + 1} $$
這是一個一階系統,$\tau_m = \dfrac{RJ}{Rb+K^2}$ 是時間常數,$K_{dc} = \dfrac{K}{Rb+K^2}$ 是直流增益。轉移函數的分母(特徵多項式)的根,叫做「極點(pole)」,它們完全決定了系統的動態行為。 這就是為什麼工程師說極點是系統的「指紋」。
看一個例子:算出馬達的時間常數
沿用入門篇的馬達:$K = 0.05\ \text{N·m/A}$、$R = 2\ \Omega$。再補上 $J = 1.2\times10^{-4}\ \text{kg·m}^2$、$b = 2\times10^{-4}\ \text{N·m·s}$。
機械時間常數:
$$ \tau_m = \frac{RJ}{Rb + K^2} = \frac{2 \times 1.2\times10^{-4}}{2 \times 2\times10^{-4} + 0.05^2} = \frac{2.4\times10^{-4}}{4\times10^{-4} + 2.5\times10^{-3}} \approx 0.0828\ \text{s} $$
也就是約 83 ms。一階系統對階躍輸入的響應是 $\omega(t) = \omega_\infty(1 - e^{-t/\tau_m})$,在 $t = \tau_m$ 時達到終值的 63.2%,在 $t \approx 4\tau_m \approx 0.33\ \text{s}$ 時達到 98%。這個數字立刻告訴你:不論控制器多聰明,這顆馬達自然的反應速度就是這麼快,你的控制頻率沒必要遠超過它,但取樣週期 $T_s$ 必須遠小於 $\tau_m$(例如取 $\tau_m/20 \approx 4\ \text{ms}$)才能讓數位控制忠實逼近連續設計。
注意「把負載換兩倍重」就是 $J$ 變兩倍。代入上式,$\tau_m$ 約變成 0.143 s——系統明顯變鈍。這還只是開迴路;閉上迴路後,$J$ 的變化會直接改變閉環極點位置,這正是手調參數失效的數學原因。
二階系統:超調、阻尼與自然頻率
當你把位置(而非轉速)當輸出,或保留電感 $L$,系統就是不折不扣的二階。二階系統是整個控制工程的「原型」,因為高階系統的行為往往由最靠近虛軸的一對極點(dominant poles)主宰,近似成二階。標準二階轉移函數寫成:
$$ G(s) = \frac{\omega_n^2}{s^2 + 2\zeta\omega_n s + \omega_n^2} $$
兩個參數定義了一切:
- 自然頻率(natural frequency) $\omega_n$:系統「想振動」的固有頻率,決定反應快慢。
- 阻尼比(damping ratio) $\zeta$:決定振盪會不會、以及多快被壓下來。
極點位於 $s = -\zeta\omega_n \pm \omega_n\sqrt{\zeta^2-1}$。依 $\zeta$ 的大小分三種情況:
- $\zeta > 1$(過阻尼,overdamped):兩個實極點,緩慢無振盪。
- $\zeta = 1$(臨界阻尼,critically damped):最快的無超調響應。
- $0 < \zeta < 1$(欠阻尼,underdamped):一對共軛複數極點,會超調並振盪後收斂。
機電系統最常落在欠阻尼區,因為我們想要快、但快就容易超調。對欠阻尼系統,有幾個能「秒算」的工程公式。最大超調量(percent overshoot) 只跟 $\zeta$ 有關:
$$ M_p = \exp\!\left(\frac{-\pi\zeta}{\sqrt{1-\zeta^2}}\right) \times 100\% $$
安定時間(settling time,2% 準則) 約為:
$$ t_s \approx \frac{4}{\zeta\omega_n} $$
動手試試:從規格反推設計
假設轉檯定位的規格是:超調不得超過 5%、安定時間在 0.5 秒內。我們反推需要的極點位置。
先由超調限制求 $\zeta$。令 $M_p = 0.05$:
$$ \ln(0.05) = \frac{-\pi\zeta}{\sqrt{1-\zeta^2}} \;\Rightarrow\; -2.996 = \frac{-\pi\zeta}{\sqrt{1-\zeta^2}} $$
解得 $\zeta \approx 0.690$。工程上常取 $\zeta \approx 0.7$(對應約 4.6% 超調),這也是「最佳折衷阻尼」的經典值。
再由安定時間求 $\omega_n$。令 $t_s = 0.5\ \text{s}$:
$$ \omega_n = \frac{4}{\zeta\, t_s} = \frac{4}{0.7 \times 0.5} = 11.4\ \text{rad/s} $$
於是目標閉環極點為:
$$ s = -\zeta\omega_n \pm j\omega_n\sqrt{1-\zeta^2} = -8.0 \pm j\,8.16 $$
這就是控制器設計的真正起點:你不再是亂試 $K_p$、$K_i$、$K_d$,而是先把規格翻譯成「我要把閉環極點放在 $-8 \pm 8.16j$」,再回頭算出能達成此目標的 PID 增益(極點配置法,pole placement)。 這把「調參數」從玄學變成了求解代數方程。
頻率響應:用「掃頻」讀出系統體質
時域看得到超調與安定時間,但要量化「離震盪還有多遠」,頻域工具更銳利。核心想法是:把 $s = j\omega$ 代入轉移函數,$G(j\omega)$ 就告訴你「當輸入是頻率 $\omega$ 的正弦波時,輸出的振幅放大幾倍、相位落後幾度」。把所有頻率的振幅(取分貝)與相位畫出來,就是波德圖(Bode plot)。
對一階系統 $G(s) = \dfrac{K_{dc}}{\tau_m s + 1}$,其頻率響應的幅值為:
$$ |G(j\omega)| = \frac{K_{dc}}{\sqrt{(\tau_m\omega)^2 + 1}} $$
當 $\omega = 1/\tau_m$ 時(轉折頻率,corner frequency),幅值降為直流增益的 $1/\sqrt{2} \approx 0.707$ 倍,即下降 3 dB。這個頻率就是系統的頻寬(bandwidth) $\omega_B$——超過它,系統就「跟不上」輸入變化了。沿用前例 $\tau_m = 0.0828\ \text{s}$:
$$ \omega_B = \frac{1}{\tau_m} \approx 12.1\ \text{rad/s} \approx 1.92\ \text{Hz} $$
頻寬把入門篇的取樣定理串了起來: 系統頻寬約 2 Hz,依「控制頻率至少為頻寬 10–20 倍」的經驗法則,控制迴圈該跑在 20–40 Hz 以上;前面算的 $T_s \approx 4\ \text{ms}$(250 Hz)綽綽有餘。
穩定餘裕:把「離震盪多遠」變成數字
現在回答開頭的問題:怎麼量化系統離不穩定有多遠?答案是增益餘裕(gain margin, GM) 與 相位餘裕(phase margin, PM)。
一個負回授系統會在「開環增益為 1(0 dB)且相位剛好 $-180°$」時陷入持續振盪——因為此時負回授變成了正回授。穩定餘裕就是量「我們離這個危險點還有多少」:
- 相位餘裕 PM:在增益剛好為 0 dB 的頻率(增益穿越頻率 $\omega_{gc}$)處,相位比 $-180°$ 還高出多少度。
- 增益餘裕 GM:在相位剛好為 $-180°$ 的頻率(相位穿越頻率 $\omega_{pc}$)處,增益還差多少 dB 才到 0 dB。
兩者越大越安全。實務經驗值:PM 約 $45°\sim60°$、GM 約 $6\sim12\ \text{dB}$ 是健康系統的甜蜜區。有個極實用的近似:對主導極點為二階的系統,相位餘裕與阻尼比近似滿足
$$ \zeta \approx \frac{PM\,(\text{度})}{100} $$
所以 $PM = 70°$ 對應 $\zeta \approx 0.7$——和我們前面從超調規格算出的阻尼比完全呼應。這就是頻域與時域的美妙統一:你在波德圖上看到「相位餘裕 70 度」,就等於在階躍響應上看到「超調約 5%」。
回到老闆的負載問題:當 $J$ 變兩倍,開環增益曲線整體上移、相位曲線下滑,增益穿越頻率 $\omega_{gc}$ 移動,相位餘裕可能從原本的安全 $50°$ 掉到 $10°$ 甚至負值。$PM < 0$ 就是發散震盪。手調 PID 之所以「換負載就全毀」,正是因為它原本的相位餘裕太小,禁不起參數漂移——而你當初根本不知道餘裕有多少。 把系統建模、畫出波德圖、保留足夠餘裕,才是穩健(robust)設計。
重點回顧
- 轉移函數 $G(s)$ 把時域微分方程壓成 s 域分式,其分母的根(極點)是系統的「指紋」,完全決定動態;直流馬達因 $\tau_e \ll \tau_m$ 常可從二階近似為一階 $\dfrac{K_{dc}}{\tau_m s+1}$。
- 二階系統由自然頻率 $\omega_n$ 與阻尼比 $\zeta$ 主宰;超調 $M_p = e^{-\pi\zeta/\sqrt{1-\zeta^2}}$ 只跟 $\zeta$ 有關,安定時間 $t_s \approx 4/(\zeta\omega_n)$,可從規格反推目標極點位置。
- 極點配置法讓設計從「亂試 PID」升級為「先定極點、再解增益」,把調參數變成可重複的工程程序。
- 波德圖與頻寬揭示系統能跟上多快的輸入;頻寬 $\omega_B = 1/\tau_m$ 直接決定該用多高的控制頻率,與取樣定理一脈相承。
- 增益餘裕與相位餘裕量化「離震盪多遠」:健康值約 PM $45°\sim60°$、GM $6\sim12\ \text{dB}$,且 $\zeta \approx PM/100$ 把頻域與時域接通;餘裕不足正是「換負載就全毀」的數學病因。
深入探討(研究所視角)
本文用單輸入單輸出(SISO)的線性轉移函數打通了時域與頻域,但真實機電系統的前沿挑戰,往往來自這些假設的失效。
根軌跡與參數變動。 老闆換負載讓 $J$ 連續變化,閉環極點會在 s 平面上劃出一條軌跡,這正是根軌跡法(root locus)研究的對象:當某個參數(如控制器增益或負載慣量)從 0 掃到無限大時,極點如何遷移、何時跨越虛軸進入不穩定區。它讓你一眼看出「設計對參數變動的敏感度」,是穩健性分析的幾何利器。
非最小相位與時間延遲。 入門篇的感測濾波、嵌入式運算、PWM 都引入純時間延遲(time delay) $e^{-sT_d}$。延遲在波德圖上只增加相位落後、不改變增益,因此會無情地吃掉相位餘裕——這解釋了為何「多加一級濾波器讓訊號更乾淨」反而可能讓系統失穩。更棘手的是非最小相位(non-minimum phase)系統(右半平面零點),它們有「先往反方向動再回正」的反直覺響應,存在理論上的頻寬上限,是控制設計的硬骨頭。
從線性到非線性與不確定性。 真實致動器有飽和(saturation)、齒輪有背隙(backlash)、接觸面有庫倫摩擦(Coulomb friction),這些非線性讓線性轉移函數只在小訊號附近成立。研究所層級會用李雅普諾夫穩定性(Lyapunov stability)直接對非線性系統證明穩定,或用強健控制($H_\infty$ control)明確地把「模型不確定性」納入設計,保證在一整個參數範圍內都穩定——這才是真正回答「換負載也不會毀」的嚴謹途徑。
前沿方向。 當系統難以建模時,資料驅動控制(data-driven control)與自適應控制(adaptive control)讓控制器在運行中即時辨識系統參數並自我調整;模型預測控制(MPC)則在每個時步求解帶約束的最佳化,天然處理飽和與安全限制。但無論工具多先進,本文的主線始終是底層素養:先理解極點在哪、頻寬多寬、餘裕多大,你才知道一個「會自己穩下來」的系統,究竟穩在哪裡、又會在哪裡失守。