PID 控制器白話文教學與 MATLAB 實戰

PID 控制器白話文教學與 MATLAB 實戰

PID 控制器的核心目標只有一個:「讓系統的『現在數值』,盡可能完美地追上你設定的『目標數值』」

它計算輸出訊號 $u(t)$ 的數學方程式如下: $$ u(t) = K_p e(t) + K_i \int_{0}^{t} e(\tau) d\tau + K_d \frac{de(t)}{dt} $$

公式裡面的 $e(t)$ 代表誤差 (Error),也就是「目標值 - 現在值」。而 $K_p$、$K_i$、$K_d$ 就是我們要調整的三個魔法參數。

為了秒懂這個公式,我們把 PID 想像成**「開車想要精準停在紅綠燈的停止線上」**:


1. 白話解析 P、I、D 三個兄弟

🟢 P (Proportional,比例) —— 「看現在」

🔵 I (Integral,積分) —— 「看過去」

🔴 D (Derivative,微分) —— 「看未來」


2. 業界標準的 PID 調適步驟 (Tuning Guide)

工程師在現場調 PID 參數時,絕對不是亂猜,通常會遵循這個順序:

  1. 先調 $K_p$ (P 參數): 把 $K_i$ 和 $K_d$ 都設為 0。慢慢把 $K_p$ 調大,直到系統反應夠快,但開始出現一點點震盪為止。
  2. 再加 $K_i$ (I 參數): 把 $K_i$ 慢慢調大,目的是消除最後那一點點停不下來的穩態誤差。這時系統可能會衝過頭 (Overshoot)。
  3. 最後加 $K_d$ (D 參數): 把 $K_d$ 稍微調大,用來壓制剛剛 $K_i$ 造成的衝過頭現象,讓曲線變得平滑完美。

3. MATLAB 中的 PID 實戰語法

在 MATLAB 中,你完全不需要自己刻那個複雜的微積分方程式,官方已經幫你寫好超級方便的 pid 函數了!

% 1. 設定你的 PID 參數
Kp = 1.5;
Ki = 0.5;
Kd = 0.1;

% 2. 建立一個 PID 控制器物件
C = pid(Kp, Ki, Kd);

% 3. 假設你有一個馬達的數學模型 (轉移函數 Transfer Function)
% 這裡假設一個簡單的系統 G(s) = 1 / (s^2 + 2s + 1)
numerator = 1;
denominator = [1, 2, 1];
G = tf(numerator, denominator);

% 4. 將 PID 控制器與馬達系統組合成「閉迴路 (Closed-loop)」
sys_cl = feedback(C * G, 1);

% 5. 畫出系統的「步階響應 (Step Response)」看看控制效果!
figure;
step(sys_cl);
title('PID 控制系統響應');
grid on;

4. 如何看懂 PID 步階響應圖 (Step Response)

在畫出來的曲線上,橫軸是「時間 (秒)」,縱軸是「系統的當前數值」。完美的情況是線條瞬間從 0 垂直升到 1 然後死死貼在 1 上面,但現實世界的物理系統做不到,一定會有一個過渡期。

我們最需要盯著看的,就是以下兩個指標:

🌊 1. 超調量 (Overshoot, %OS) —— 「衝過頭的程度」

⏱️ 2. 穩定時間 (Settling Time, $T_s$) —— 「花多久才冷靜下來」


5. MATLAB 自動計算指標的神兵利器:stepinfo

你完全不需要自己拿尺在螢幕上量最高點或算時間!MATLAB 提供了一個超級強大的函數 stepinfo,只要一行程式碼,它就會直接算出所有的詳細數據。

% 假設你已經建立好了閉迴路系統 sys_cl
% sys_cl = feedback(C * G, 1);

% 1. 使用 stepinfo 自動計算所有特性
info = stepinfo(sys_cl);

% 2. 在指令視窗印出最重要的兩個數據
disp(['超調量 (Overshoot): ', num2str(info.Overshoot), ' %']);
disp(['穩定時間 (Settling Time): ', num2str(info.SettlingTime), ' 秒']);

💡 隱藏版 UI 技巧:在圖片上直接顯示

如果你不想打程式碼,當你用 step(sys_cl) 把圖畫出來之後:

  1. 在圖片的白色背景處按滑鼠右鍵
  2. 選擇 Characteristics (特徵)
  3. 勾選 Peak Response (峰值響應 / 看 Overshoot)Settling Time (穩定時間)
  4. 圖上就會出現兩個小黑點,滑鼠點一下黑點,就會直接浮現精確的數值標籤!

Revision #2
Created 2026-04-01 02:06:37 UTC by TaipeiTechRacing
Updated 2026-04-06 16:39:15 UTC by TaipeiTechRacing