pid — Oransal-İntegral-Türevsel denetleyici

pid modülü, türevsel alçak geçiren filtreleme ve integratör doyum (windup) sınırlama özelliklerine sahip basit bir Oransal-İntegral-Türevsel (PID) denetleyici sınıfı sağlar.

Örnek:

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)

Bir PID denetleyicisi oluşturur.

  • p, oransal kazançtır (Kp).

  • i, integral kazancıdır (Ki).

  • d, türevsel kazançtır (Kd).

  • imax, integratör teriminin sınırlandığı mutlak maksimum değerdir (anti-windup sınırı). İntegratör çıkışı [-abs(imax), +abs(imax)] aralığıyla sınırlanır.

Türevsel terim, kesim frekansı 20 Hz olan sabit birinci dereceden bir alçak geçiren filtre ile filtrelenir.

get_pid(error: float, scaler: float) float

Verilen error için PID denetleyici çıkışını hesaplar ve döndürür.

  • error, mevcut hatadır (genellikle target - measurement).

  • scaler, oransal + türevsel toplamına ve integratör artışına uygulanan çarpımsal bir ölçek faktörüdür.

Ardışık çağrılar arasındaki zaman farkı dahili olarak time.ticks_ms() kullanılarak ölçülür. Çağrılar arasında 1000 ms’den fazla süre geçerse (veya ilk çağrıda), integratör PID.reset_I() ile sıfırlanır ve o adım için zaman farkı sıfır olarak kabul edilir.

PID çıkışını float olarak döndürür.

reset_I() None

İntegratör durumunu sıfırlar. Biriken integral terimini sıfırlar ve önbelleğe alınmış türev değerini (NaN olarak ayarlanır) temizler, böylece PID.get_pid() çağrısının bir sonraki gerçekleşmesi türev filtresini yeniden başlatır.