pid --- Bộ điều khiển Tỉ lệ-Tích phân-Vi phân

Mô-đun pid cung cấp một lớp bộ điều khiển Tỉ lệ-Tích phân-Vi phân (PID) đơn giản với bộ lọc thông thấp cho thành phần vi phân và cơ chế kẹp chặn tích lũy tích phân.

Ví dụ:

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)

Khởi tạo một bộ điều khiển PID.

  • p là hệ số khuếch đại tỉ lệ (Kp).

  • i là hệ số khuếch đại tích phân (Ki).

  • d là hệ số khuếch đại vi phân (Kd).

  • imax là giá trị tuyệt đối tối đa mà thành phần tích phân bị kẹp vào (giới hạn chống tích lũy quá mức). Đầu ra của tích phân được giới hạn trong khoảng [-abs(imax), +abs(imax)].

Thành phần vi phân được lọc bằng bộ lọc thông thấp bậc nhất cố định với tần số cắt 20 Hz.

get_pid(error: float, scaler: float) float

Tính toán và trả về đầu ra của bộ điều khiển PID cho error đã cho.

  • error là sai số hiện tại (thông thường là target - measurement).

  • scaler là hệ số tỉ lệ nhân áp dụng cho tổng tỉ lệ + vi phân và cho phần tăng của bộ tích phân.

Khoảng thời gian giữa các lần gọi liên tiếp được đo nội bộ bằng time.ticks_ms(). Nếu hơn 1000 ms trôi qua giữa các lần gọi (hoặc ở lần gọi đầu tiên), bộ tích phân được đặt lại thông qua PID.reset_I() và khoảng thời gian được coi là bằng không cho bước đó.

Trả về đầu ra PID dưới dạng float.

reset_I() None

Đặt lại trạng thái tích phân. Xóa thành phần tích lũy tích phân về không và xóa giá trị vi phân đã lưu trong bộ nhớ đệm (đặt thành NaN) để lần gọi tiếp theo tới PID.get_pid() khởi tạo lại bộ lọc vi phân.