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() 호출 시 미분 필터가 다시 초기화되도록 합니다.