pid --- ตัวควบคุม Proportional-Integral-Derivative

โมดูล pid มีคลาสตัวควบคุม Proportional-Integral-Derivative (PID) อย่างง่ายพร้อมตัวกรองความถี่ต่ำสำหรับอนุพันธ์และการจำกัดการพอกพูนของตัวอินทิเกรเตอร์

ตัวอย่าง:

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() ครั้งต่อไปเริ่มต้นตัวกรองอนุพันธ์ใหม่