首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

PID 控制演算法詳解(一):三大參數 Kp、Ki、Kd 物理意義與作用

     編輯:關於C語言

前言

PID(Proportional-Integral-Derivative)是工業控制最經典的回授控制演算法。本系列三文將從原理、整定、程式碼實作三方面完整解析。首篇聚焦三參數物理意義。

系統模型:恆溫水壺

  • 目標溫度 U_set = 60°C
  • 當前溫度 U_now
  • 控制輸出 U_k(PWM 佔空比 0~255,對應加熱功率)
  • 誤差 E = U_set - U_now

1. 比例項 - Kp:當下誤差的放大器

公式:U_Kp = Kp * E

  • 誤差越大 → 輸出越大(加熱更強)。
  • 誤差為 0 → 輸出 0(不加熱)。
  • 缺陷:純 P 控制存在靜態誤差。例如環境散熱大,需持續功率維持溫度,但 E=0 時輸出為 0,溫度會穩定在目標以下。
// 範例:Kp=10
E = 60 - 49 = 11  → U_Kp = 110
E = 60 - 20 = 40  → U_Kp = 400 → 飽和限制 255
E = 60 - 61 = -1  → U_Kp = -10 → 限制 0 (不加熱)

2. 積分項 - Ki:歷史誤差的累積器

公式:U_Ki = U_Ki_prev + Ki * E * dt(離散化:U_Ki += Ki * E / F,F=1/dt 為採樣頻率)

  • 隨時間累積誤差,即使 E 很小,只要持續存在,積分項會持續增長。
  • 消除靜態誤差:上例中溫度卡在 59°C,E=1 持續積分,最終輸出增大推高溫度至 60°C。
  • 副作用:超調。接近目標前累積的積分量會推著系統「衝過頭」,需配合 Kd 抑制。

3. 微分項 - Kd:未來趨勢的預測器

公式:U_Kd = Kd * (E_now - E_prev) / dt(離散化:U_Kd += Kd * (E_now - E_prev) * F)

  • 反映誤差變化率(速度)。
  • 溫度上升快 → E 變化負值大 → 微分項輸出負值 → 減弱加熱,預防超調。
  • 停止加熱後餘溫導致溫度繼續上升,微分項可提前感知並減輕輸出。

4. 完整 PID 輸出

U_k = U_Kp + U_Ki + U_Kd

單片機無 FPU 時,常用定點數:參數放大 2^n,最終輸出右移 n 位(等同除以 2^n)。

5. 參數效應總結表

參數作用調大效果副作用
Kp即時反應誤差大小上升快、靜態誤差小震盪、超調、不穩定
Ki消除靜態誤差靜態誤差→0超調大、響應慢、積分飽和
Kd預測趨勢、阻尼減少超調、抑制震盪放大雜訊、高頻震盪

6. 維基百科動畫直觀理解

強烈建議觀看 英文維基 PID 頁面 的三張動圖:

  • P:彈簧拉力,誤差即位移。
  • I:水桶漏水,積分是水位。
  • D:阻尼器,阻礙快速變化。

下一篇將介紹實務整定方法:手動試誤法與 Ziegler-Nichols 經典整定法。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved