傳統 PID 控制
PID 控制器是工業上用得最多的回授控制器:溫度、流量、壓力、馬達轉速與位置,大多數迴路都是 PID。它由三項組成,所以也叫「三項控制器」(three-term controller)。(本頁文字為依原講義改寫的中文說明)
| 項 | 名稱 | 看的是 | 主要作用 |
|---|---|---|---|
| P | 比例 Proportional | 現在的誤差 | 誤差越大推得越用力,決定反應快慢;單獨使用會留下穩態誤差 |
| I | 積分 Integral | 過去累積的誤差 | 只要還有誤差就持續累加,消除穩態誤差,提供精確度 |
| D | 微分 Derivative | 誤差變化的趨勢 | 提早踩煞車,增加阻尼、減少超越量;但會放大量測雜訊 |
PID 演算法 Algorithms
控制器比較設定值(SP)與量測值(PV)得到誤差 \(e = SP - PV\),輸出 \(u(t)\) 有兩種常見寫法。理想式(ISA 標準式)以一個增益 \(K_p\) 乘上整個括號,積分、微分強弱用時間常數表示:
$$u(t) = K_p\left(e(t) + \frac{1}{T_i}\int_0^t e(\tau)\,d\tau + T_d\,\frac{de(t)}{dt}\right)$$把括號展開就是並聯式,三項各有獨立的增益:
$$u(t) = K_p\,e(t) + K_i\int_0^t e(\tau)\,d\tau + K_d\,\frac{de(t)}{dt},\qquad K_i = \frac{K_p}{T_i},\quad K_d = K_pT_d$$取拉氏轉換,控制器的轉移函數為
$$C(s) = \frac{U(s)}{E(s)} = K_p + \frac{K_i}{s} + K_d\,s = \frac{K_d s^2 + K_p s + K_i}{s} = K_p\left(1 + \frac{1}{T_i s} + T_d s\right)$$實作細節(取樣、梯形積分、微分只作用在量測值、輸出限制)見數位實作;用運算放大器做的版本見類比實作。
例題:直流馬達轉速控制 DC Motor Speed Control
以原講義 DCMotorData.m 的參數建模:電感 \(L\) = 0.5 H、電阻 \(R\) = 1 Ω、轉子慣量 \(J_m\) = 0.01 kg·m²、黏滯摩擦 \(B\) = 0.1 N·m·s、反電動勢常數 \(K_e\) = 轉矩常數 \(K_t\) = 0.01。
穩態增益 \(K_t/(RB+K_eK_t)\) = 0.01/0.1001 ≈ 0.0999 (rad/s)/V。
開迴路
輸入 0.6 V,轉速只到 0.6 × 0.0999 ≈ 0.060 rad/s;在 \(t\) = 4 s 加上負載(原模型以 \(T_L/J_m\) = 3 rad/s² 加在角加速度上,即 \(T_L\) = 0.03 N·m),轉速再掉 \(R\,T_L/(RB+K_eK_t)\) ≈ 0.30 rad/s,變成 −0.24 rad/s——馬達被負載拖著反轉,開迴路完全無法應付。
加上 PID 回授
設定值 1 rad/s 的步階響應(三組增益與原講義相同):
- \(K_p\)=100、\(K_i\)=1、\(K_d\)=1:反應很快,但積分太弱,3 s 時只到 0.91,誤差要很久才消失。
- \(K_i\) 加到 200:穩態誤差很快歸零,但超越量變成約 25%。
- 再把 \(K_d\) 加到 10:超越量降到約 12%,約 1.3 s 安定。
verify_pid.py 重算,三條曲線的峰值(1.08、1.25、1.12)與峰值時間都和原圖吻合。若微分真的作用在誤差上(虛線),設定值的步階會在 \(t=0^+\) 產生一個電壓脈衝,曲線反而幾乎沒有超越量,但實際的驅動器根本送不出這種脈衝。這也是工業 PID 多半讓微分只作用在量測值的原因。下面的模擬可以自己調整三個增益、切換微分的作用對象,並在 1.5 s 加上負載:
加負載
設定 0.6 rad/s、\(t\) = 4 s 加上同樣的負載:PID 迴路只讓轉速短暫下降,積分項很快就把它拉回 0.6 rad/s。原講義附檔:開迴路模型、PID 模型、PID 加負載模型、DCMotorData.m、DCMotorDataPID.m。
P、I、D 各自的影響 Effects of Kp, Ki, Kd
| 增益加大 | 上升時間 | 超越量 | 安定時間 | 穩態誤差 |
|---|---|---|---|---|
| \(K_p\) | 縮短 | 增加 | 小幅變化 | 減小(不會歸零) |
| \(K_i\) | 縮短 | 增加 | 增加 | 消除 |
| \(K_d\) | 小幅變化 | 減少 | 縮短 | 小幅變化 |
這張表只是趨勢:三個增益會互相影響,調了其中一個,另外兩個的效果也跟著變,只能當調整時的參考。設計 PID 的一般步驟:
- 先看開迴路響應,找出要改善什麼。
- 加比例控制縮短上升時間。
- 加微分控制壓低超越量。
- 加積分控制消除穩態誤差。
- 反覆微調 \(K_p\)、\(K_i\)、\(K_d\) 到滿意為止。
三項不一定都要用:PI 夠好就不必加 D,控制器越簡單越好。另見Simulink 示範、用 SISOTool 設計、PID 與根軌跡(舊站)↗。
Ziegler–Nichols 調整法 Ziegler–Nichols Tuning
Ziegler 與 Nichols 在 1942 年提出的經驗法則,至今仍是現場調 PID 的起點。以理想式 \(C(s) = K_p(1 + 1/(T_is) + T_ds)\) 表示,分成兩種方法。為了說明,以下用範例受控體 \(G(s) = 1/(s+1)^3\) 示範(補充)。
反應曲線法(開迴路)
對受控體做步階測試,在響應的反曲點畫切線,量出延遲時間 \(L\) 與時間常數 \(T\),並算出製程增益 \(K = \Delta PV/\Delta OP\),令 \(K_c = T/(K L)\):
| 控制器 | \(K_p\) | \(T_i\) | \(T_d\) |
|---|---|---|---|
| P | \(K_c\) | ∞ | 0 |
| PI | \(0.9\,K_c\) | \(3.3\,L\) | 0 |
| PID | \(1.2\,K_c\) | \(2\,L\) | \(0.5\,L\) |
範例:\(1/(s+1)^3\) 的步階響應反曲點在 \(t\) = 2 s,切線得 \(L\) = 0.805 s、\(T\) = 3.695 s、\(K\) = 1,\(K_c\) = 4.59,所以 PID 取 \(K_p\) = 5.50、\(T_i\) = 1.61 s、\(T_d\) = 0.40 s。
臨界增益法(閉迴路)
- 只用比例控制(關掉積分、微分)。
- 逐步加大比例增益,直到輸出出現持續的等幅振盪,此時的增益稱為臨界增益 \(K_u\)(原講義記為 \(K_c\))。
- 量出振盪週期 \(T_u\)(原講義記為 \(T_c\))。
| 控制器 | \(K_p\) | \(T_i\) | \(T_d\) |
|---|---|---|---|
| P | \(0.5\,K_u\) | ∞ | 0 |
| PI | \(0.45\,K_u\) | \(0.833\,T_u\) | 0 |
| PID | \(0.6\,K_u\) | \(0.5\,T_u\) | \(0.125\,T_u\) |
範例:閉迴路特徵方程式 \(s^3+3s^2+3s+1+K=0\),以羅斯判別法得臨界 \(K_u\) = 8,此時極點在 \(s = \pm j\sqrt3\),週期 \(T_u = 2\pi/\sqrt3\) = 3.63 s;PID 取 \(K_p\) = 4.8、\(T_i\) = 1.81 s、\(T_d\) = 0.45 s。
Ziegler–Nichols 的目標是「每週期衰減到四分之一」,參數偏積極,通常會有不小的超越量,只能當起點,還要再微調。
延伸閱讀(原講義附檔):Iterative Feedback Tuning of PID、PIDTuning、PID Tuning、PID_Tuning1;Automation.com ↗(原講義另列 ExperTune 公司網站,已無法連線)。
















