pid — 비례-적분-미분 제어기¶
pid 모듈은 미분 저역 통과 필터링과 적분기 와인드업 클램핑을 갖춘 간단한 비례-적분-미분(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인 고정된 1차 저역 통과 필터로 필터링됩니다.
- get_pid(error: float, scaler: float) float¶
주어진
error에 대해 PID 제어기 출력을 계산하여 반환합니다.error는 현재 오차(일반적으로target - measurement)입니다.scaler는 비례 + 미분 합과 적분기 증분에 적용되는 곱셈 스케일 계수입니다.
연속된 호출 사이의 시간 차이는 내부적으로
time.ticks_ms()를 사용해 측정됩니다. 호출 사이에 1000 ms를 초과하여 경과하면(또는 첫 호출인 경우) 적분기가PID.reset_I()를 통해 재설정되고 해당 단계의 시간 차이는 0으로 처리됩니다.PID 출력을
float로 반환합니다.
- reset_I() None¶
적분기 상태를 재설정합니다. 누적된 적분 항을 0으로 지우고 캐시된 미분 값을 지워(
NaN으로 설정) 다음PID.get_pid()호출 시 미분 필터가 다시 초기화되도록 합니다.