pid --- 比例-積分-微分控制器

pid 模組提供一個簡單的比例-積分-微分(PID)控制器類別,具備微分低通濾波與積分器飽和箝制功能。

範例::

from pid import PID

pid1 = PID(p=0.07, i=0, imax=90)
while True:
    error = 50  # error should be calculated as: target - measure
    output = pid1.get_pid(error, 1)
    # control value with output

class PID

class pid.PID(p: float = 0, i: float = 0, d: float = 0, imax: float = 0)

建構一個 PID 控制器。

  • p 為比例增益(Kp)。

  • i 為積分增益(Ki)。

  • d 為微分增益(Kd)。

  • imax 為積分項被箝制的絕對最大值(抗飽和限制)。積分器輸出被限制在 [-abs(imax), +abs(imax)] 範圍內。

微分項會經過一個固定的一階低通濾波器處理,截止頻率為 20 Hz。

get_pid(error: float, scaler: float) float

針對給定的 error 計算並回傳 PID 控制器的輸出。

  • error 為目前的誤差(通常為 target - measurement)。

  • scaler 為一個乘法縮放因子,套用於比例項與微分項之和,以及積分器增量。

連續呼叫之間的時間差會在內部使用 time.ticks_ms() 測量。若兩次呼叫之間經過超過 1000 ms(或是第一次呼叫),則積分器會透過 PID.reset_I() 重設,且該步的時間差會被視為零。

float 形式回傳 PID 輸出。

reset_I() None

重設積分器狀態。將累積的積分項清為零,並清除快取的微分值(設為 NaN),使得下一次呼叫 PID.get_pid() 時重新初始化微分濾波器。