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
erroriçin PID denetleyici çıkışını hesaplar ve döndürür.error, mevcut hatadır (genellikletarget - 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örPID.reset_I()ile sıfırlanır ve o adım için zaman farkı sıfır olarak kabul edilir.PID çıkışını
floatolarak 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 (
NaNolarak ayarlanır) temizler, böylecePID.get_pid()çağrısının bir sonraki gerçekleşmesi türev filtresini yeniden başlatır.