pid --- متحكم تناسبي-تكاملي-تفاضلي

توفر الوحدة pid صنف متحكم تناسبي-تكاملي-تفاضلي (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 هو الكسب التناسبي (Kp).

  • i هو الكسب التكاملي (Ki).

  • d هو الكسب التفاضلي (Kd).

  • imax هو القيمة القصوى المطلقة التي يُقيَّد إليها حد التكامل (حد منع التراكم). يُحصر خرج التكامل ضمن المجال [-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() تهيئة مرشح التفاضل.