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()تهيئة مرشح التفاضل.