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() תאתחל מחדש את מסנן הנגזרת.