pid --- Kontroler Proporsional-Integral-Derivatif

Modul pid menyediakan kelas kontroler Proporsional-Integral-Derivatif (PID) sederhana dengan pemfilteran low-pass derivatif dan pembatasan windup integrator.

Contoh:

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)

Membuat sebuah kontroler PID.

  • p adalah gain proporsional (Kp).

  • i adalah gain integral (Ki).

  • d adalah gain derivatif (Kd).

  • imax adalah nilai maksimum absolut tempat term integrator dibatasi (batas anti-windup). Output integrator dibatasi pada rentang [-abs(imax), +abs(imax)].

Term derivatif difilter oleh filter low-pass orde pertama tetap dengan frekuensi cutoff 20 Hz.

get_pid(error: float, scaler: float) float

Menghitung dan mengembalikan output kontroler PID untuk error yang diberikan.

  • error adalah error saat ini (biasanya target - measurement).

  • scaler adalah faktor skala perkalian yang diterapkan pada jumlah proporsional + derivatif dan pada kenaikan integrator.

Delta waktu antara pemanggilan berturut-turut diukur secara internal menggunakan time.ticks_ms(). Jika lebih dari 1000 ms berlalu antara pemanggilan (atau pada pemanggilan pertama), integrator direset melalui PID.reset_I() dan delta waktu diperlakukan sebagai nol untuk langkah tersebut.

Mengembalikan output PID sebagai float.

reset_I() None

Mereset status integrator. Menghapus term integral yang terakumulasi menjadi nol dan menghapus nilai derivatif yang di-cache (diatur ke NaN) sehingga pemanggilan berikutnya ke PID.get_pid() menginisialisasi ulang filter derivatif.