pid — בקר Proportional-Integral-Derivative¶
המודול pid מספק מחלקה פשוטה של בקר Proportional-Integral-Derivative (PID) עם סינון נמוך-מעבר של האיבר הנגזרתי והגבלת windup של האינטגרטור.
דוגמה:
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הוא ההגבר (gain) הפרופורציונלי (Kp).iהוא ההגבר (gain) האינטגרלי (Ki).dהוא ההגבר (gain) הנגזרתי (Kd).imaxהוא הערך המוחלט המרבי שאליו מוגבל איבר האינטגרטור (גבול anti-windup). פלט האינטגרטור חסום לטווח[-abs(imax), +abs(imax)].
האיבר הנגזרתי מסונן באמצעות מסנן נמוך-מעבר קבוע מסדר ראשון עם תדר חיתוך של 20 Hz.
- get_pid(error: float, scaler: float) float¶
חישוב והחזרה של פלט בקר ה-PID עבור ה-
errorהנתון.errorהוא השגיאה הנוכחית (בדרך כללtarget - measurement).scalerהוא גורם קנה מידה מכפלי המוחל על סכום הפרופורציונלי + הנגזרתי ועל תוספת האינטגרטור.
הפרש הזמן בין קריאות עוקבות נמדד באופן פנימי באמצעות
time.ticks_ms(). אם חולפות יותר מ-1000 ms בין קריאות (או בקריאה הראשונה), האינטגרטור מאופס באמצעותPID.reset_I()והפרש הזמן מטופל כאפס עבור אותו צעד.מחזיר את פלט ה-PID כ-
float.
- reset_I() None¶
איפוס מצב האינטגרטור. מנקה את איבר האינטגרל המצטבר לאפס ומנקה את ערך הנגזרת השמור (מוגדר ל-
NaN) כך שהקריאה הבאה ל-PID.get_pid()תאתחל מחדש את מסנן הנגזרת.