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()時重新初始化微分濾波器。