PID Control · 학습
실행 준비
Python 경로는 python-control을 사용합니다. 모듈이 없으면 Colab·Jupyter의 코드 셀에서 %pip install control==0.10.2를 실행하세요.
이번에 배울 내용
빠른 응답만 보고 Gain을 고르면 Overshoot나 모델 변화에 취약할 수 있습니다. 서로 다른 성능 지표를 비교합니다.
전체 흐름
목표와 오차 → P·I·D 명령 → 입력 한계 → 응답·적분 상태
현재·누적·변화하는 오차
PID는 로 표현합니다. P는 현재 오차, I는 남아 있는 오차의 누적, D는 빠른 변화에 반응합니다. Gain의 효과는 Plant와 관측 시간에 따라 달라지므로 같은 입력·시간축에서 비교합니다.
입력 제한이 있는 실제 제어
출력 전압이나 토크에는 한계가 있습니다. u가 이미 최대인데 적분값이 계속 쌓이면, 목표를 낮춘 뒤에도 큰 명령이 남을 수 있습니다.
Conditional integration은 입력이 포화된 동안 오차를 더 키우는 적분 누적을 멈추는 한 방법입니다.
오차를 누적하는 이유
에서 와 를 비교합니다. 간단한 Plant로 Steady-State Error를 먼저 확인하고 실습에서 Motor로 옮깁니다.
import numpy as np
import matplotlib.pyplot as plt
import control as ctl
s=ctl.tf('s')
G=1/(s+1);t=np.linspace(0,12,601)
for name,C in [('P',2),('PI',2+1/s)]:
closed=ctl.feedback(C*G,1);tm,y=ctl.step_response(closed,t)
plt.plot(tm,y,label=name);print(name,'DC gain',ctl.dcgain(closed))
plt.axhline(1,color='gray',linestyle='--');plt.xlabel('Time [s]');plt.ylabel('Output');plt.grid();plt.legend()
P DC gain 0.6666666666666666 PI DC gain 1.0