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

PID 控制演算法詳解(二):參數整定實戰——手動法與 Ziegler-Nichols 法

     編輯:關於C語言

手動整定步驟(工程常用)

  1. 初始化:Kp=Ki=Kd=1,觀察系統響應是否過快;確定輸出右移位數 BITMOV 使輸出落在合理範圍。
  2. 調 Kp:Ki=Kd=0。從 0 逐漸增大 Kp,直到被控量出現明顯超調並伴隨小幅震盪。此時 Kp 差不多了。
  3. 調 Ki:從小增大 Ki,使穩態值逼近設定值。注意:Ki 增大會增加超調,需同步微調降低 Kp。
  4. 調 Kd:從小增大 Kd,抑制超調與震盪,使曲線平滑收斂。
  5. 微調:三參數相互耦合,反覆微調至滿足:上升時間短、超調小、穩態誤差≈0、調節時間短。

Ziegler-Nichols 經典整定法(閉迴路終極增益法)

適用於可接受持續震盪的系統(如溫控、液位控制)。

步驟

  1. 設 Ki=0, Kd=0。
  2. 從 0 逐漸增大 Kp,直到系統輸出呈現等幅持續震盪(不發散、不衰減)。此時的 Kp 為終極增益 K_u,震盪週期為 T_u。
  3. 根據控制器類型查表設定參數:

Z-N 參數表

控制器類型KpKi (积分时间 Ti)Kd (微分时间 Td)
P0.5 × K_u--
PI0.45 × K_uT_u / 1.2-
PID (經典)0.6 × K_uT_u / 2T_u / 8
PID (Pessen 積分規則)0.7 × K_uT_u / 2.5T_u / 6.25
PID (一些超調)0.6 × K_uT_u / 2T_u / 8

換算:離散實作中 Ki = Kp / Ti × dt、Kd = Kp × Td / dt。

關鍵問題:如何判斷 K_u?

作者理解:在 Ki=Kd=0 時,調整 Kp 使被控量出現等幅震盪,該 Kp 即為 K_u。實務上需觀察數個週期確認幅度穩定。

其他整定方法簡介

  • Cohen-Coon 法:開迴路階躍響應法,適合大遲滯系統。
  • Lambda 整定法:指定閉迴路時間常數,穩健性較好。
  • 模型基礎整定:系統辨識得數學模型 → 極點配置/最優控制設計。
  • 自動整定:現代 PLC/DCS 內建自整定功能(階躍測試 + 模型擬合)。

實務經驗談

  1. 先手動後 Z-N:手動粗調得大致範圍,再用 Z-N 微調,效率最高。
  2. 積分飽和保護:輸出飽和時凍結積分累積(Anti-windup),防止大超調。
  3. 微分濾波:對誤差或 PV(被控變量)加低通濾波再微分,抑制高頻雜訊。
  4. 採樣週期影響:dt 過大導致離散模型失真;建議 dt ≤ T_u / 20。
  5. 記錄每次調整結果:建立參數-響應資料庫,累積經驗。

下一篇預告

最終篇:51 單片機 C 語言完整 PID 實作(增量式 vs 位置式、定點運算、Anti-windup、完整程式碼)。

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