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.
plà hệ số khuếch đại tỉ lệ (Kp).ilà hệ số khuếch đại tích phân (Ki).dlà hệ số khuếch đại vi phân (Kd).imaxlà 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.errorlà sai số hiện tại (thông thường làtarget - measurement).scalerlà 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 quaPID.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ớiPID.get_pid()khởi tạo lại bộ lọc vi phân.