강의자료 · 제어공학2

Root Locus

실행 준비

Python 경로는 python-control을 사용합니다. 모듈이 없으면 Colab·Jupyter의 코드 셀에서 %pip install control==0.10.2를 실행하세요.

학습 목표

Gain 하나를 고르는 문제가 Pole 위치와 Time Response에 어떻게 이어지는지 확인합니다.

Gain과 Closed-loop Pole

시작 조건

L(s)=s+7s(s+5)(s+15)(s+20)L(s)=\frac{s+7}{s(s+5)(s+15)(s+20)}. K∈{100,500,1000}K\in\{100,500,1000\}을 사용합니다.

진행 방법

  1. Root Locus를 그리고 각 K에서 feedback(K*L,1)의 Pole을 별도 기호로 표시하세요.
  2. 각 Pole의 실수부와 안정 여부를 표에 기록하세요.
  3. 기준 조건 K=500K=500에 비해 Pole 이동과 응답 변화의 예상을 적으세요.

남길 결과

import numpy as np
import matplotlib.pyplot as plt
import control as ctl
s = ctl.tf('s')
L=(s+7)/(s*(s+5)*(s+15)*(s+20))
ctl.root_locus_plot(L)
for k in [100,500,1000]: print(k,ctl.poles(ctl.feedback(k*L,1)))

결과 기록·자가 점검

K:

Closed-loop Pole:

최대 실수부:

안정 여부:

확인할 점

Time Response로 예상 확인

시작 조건

같은 모델·Gain에 0≤t≤80\le t\le 8 s의 Unit Step을 적용합니다.

진행 방법

  1. 안정한 경우에만 Overshoot·Settling Time을 구하세요.
  2. 가장 느린 Pole 쌍과 Time Response의 진동·감쇠를 연결해 설명하세요.
  3. K=500K=500보다 크거나 작은 값 하나를 추가하고 예상을 검증하세요.

남길 결과

import numpy as np
import matplotlib.pyplot as plt
import control as ctl
s = ctl.tf('s')
L=(s+7)/(s*(s+5)*(s+15)*(s+20))
t=np.linspace(0,8,1601)
T=ctl.feedback(500*L,1)
t,y=ctl.step_response(T,t)
plt.plot(t,y);plt.xlabel('Time [s]');plt.grid()
# TODO: 나머지 Gain을 추가하세요.

결과 기록·자가 점검

K:

Overshoot [%]:

Settling Time [s]:

예상과 일치한 점:

확인할 점

다른 모델에 같은 절차 적용

시작 조건

L2(s)=s+2s2+2s+3L_2(s)=\frac{s+2}{s^2+2s+3}, K∈{.5,2,10}K\in\{.5,2,10\}을 사용합니다.

진행 방법

  1. L2의 Root Locus·Pole 표·Step plot을 같은 형식으로 만드세요.
  2. 고차 모델 L과 L2에서 Gain 변화의 양상이 같은지 비교하세요.
  3. 한 모델에서 얻은 결론을 다른 모델에 그대로 적용할 수 있는지 설명하세요.

남길 결과

import numpy as np
import matplotlib.pyplot as plt
import control as ctl
s = ctl.tf('s')
L2=(s+2)/(s*s+2*s+3)
for k in [.5,2,10]:print(k,ctl.poles(ctl.feedback(k*L2,1)))

결과 기록·자가 점검

모델:

K:

Pole:

Overshoot [%]:

Settling Time [s]:

확인할 점