control tutorials/introduction

Root Locus(근궤적)

fbc0314 2025. 1. 14. 16:23

1. Root Locus

근궤적(root locus)는 gain k값이 0부터 무한대까지 변화할 때 closed-loop pole의 위치를 open-loop pole과 zero를 이용해서 나타낸 그래프이다.

pole의 위치를 통해 시스템의 특성을 알 수 있기 때문에 근궤적을 통해서 k 값을 조절해 시스템을 설계할 수 있다.

 

closed loop 전달함수는 아래와 같이 표현된다.

$$ \frac{Y(s)}{R(s)} = \frac{KH(s)}{1+KH(s)}$$ $$1+KH(s)=0$$

 

1+KH(s)=0을 만족하는 s가 closed loop 전달함수의 pole이된다.

여기서 H(s) = N(s)/D(s)라고 하면 아래처럼 정리된다.

$$1+K\frac{N(s)}{D(s)}=0$$ $$D(s) + KN(s)=0$$ $$\frac{D(s)}{K} + N(s)=0$$

k=0이면 D(s)=0이 되어야한다. 따라서 k=0일 때의 closed loop pole은 open loop 전달함수의 pole이다.

k가 무한대이면 N(s)=0이 되어야 한다. 따라서 k가 무한대일 때의 closed loop pole은 open loop 전달함수의 zero이다.

즉 근궤적은 open loop 전달함수의 pole에서 시작해서 zero에서 끝난다.

 

그렇다면 pole과 zero의 개수는 항상 같아야 하는데 그렇지 않은 경우도 있다.

이러한 경우는 zero가 무한대에 존재하고 근궤적은 무한대를 향해서 이거진다.

무한대까지 포함하면 pole의 개수와 zero의 개수는 항상 같다.

 

근궤적을 통해서 많을 것을 알 수 있는데 대표적으로는 pole이 RHP에 존재하면 시스템은 unstable하다. 허수축에 가장 가까운 pole이 시스템에 가장 큰 영향을 주고 이를 dominant pole이라고 한다. 고차의 시스템도 이러한 방법으로 2차로 생각해서 분석할 수 있다.

 

간단한 예시를 통해서 근궤적을 그려보자.

ex)아래는 시스템의 open-loop 전달함수이다. 근궤적을 이용해서 시스템이 5%의 overshoot과 1초의 rise time을 같도록 k값을 설정해라. (pure proportional controller)

$$H(s) = \frac{Y(s)}{U(s)} = \frac{s+7}{s(s+5)(s+15)(s+20)}$$

 

먼저 rlocus()함수를 이용해서 근궤적을 그린다. 아래는 코드와 그 결과이다.

clc;close all;clear all;

sys=zpk([-7],[0,-5,-15,-20],1);
rlocus(sys);
axis([-22 3 -15 15]);

 

근궤적

open loop transfer function의 zero는 -7, pole은 0, -5, -15,-20이고 근궈적은 각각 pole에서 시작해서 zero에서 끝나는 것을 확인할 수 있다. 무한대의 zero는 3개 존재하고 근궤적 중 3개는 무한을 향해서 나아간다.

 

damping ratio와 natural frequency를 알면 sgrid를 이용해서 해당 범위를 그려볼 수 있다.

그러면 먼저 overshoot < 5%의 조건을 이용해서 damping ratio의 범위를 구하고 rise time<1.8s를 이용해서 natural frequency의 범위를 구한다.

$$overshoot : e^{-\zeta \frac{\pi }{\sqrt{1-\zeta ^{2}}}} < 0.05$$ $$\zeta >0.69$$ $$rise time : \frac{1.8}{w_{n}} < 1$$ $$w_{n} > 1.8$$

damping ratio는 0.7보다 커야 하고 natural frequency는 1.8보다 커야 한다.

 

아래 코드를 실행하면 다음과 같이 근궤적과 조건을 만족하는 범위를 보여준다.

sys=zpk([-7],[0,-5,-15,-20],1);

rlocus(sys);
axis([-22 3 -15 15]);

zeta=0.7;
wn=1.8;
sgrid(zeta,wn);

근궤적과 damping ratio은 0.7, natural frequency는 1.8인 범위 표기

결국 damping ratio를 나타내는 0.7보다는 각도가 커야 하고 natural frequency를 나타내는 1.8보다는 밖에 pole이 존재야 한다.

 

우리가 원하는 값을 갖는 closed loop pole이 존재한다. 그렇다면 이때의 k값은 얼마인가?

아래의 코드를 통해 그래프에서 원하는 점을 고르면 근처에 있는 pole의 위치와 그때의 k값을 알려준다.

하나의 k값에 4개의 pole이 존재하는데 이들 모두의 값을 알려준다.

sys=zpk([-7],[0,-5,-15,-20],1);

rlocus(sys);
axis([-22 3 -15 15]);

zeta=0.7;
wn=1.8;
sgrid(zeta,wn);

[k, poles] =  rlocfind(sys);

조건을 만족하는 pole의 위치 선택 화면

우리가 원하는 점만이 아닌 4개의 pole이 존재하지만 실제로 dominant pole은 허수축에 가장 가까운 두 pole이므로 우리가 원하는 방식으로 동작할 것이다.

 

이때 matlab에서는 k의 값이 348.2984라고 한다. 결과를 실행해서 확인해보자.

sys=zpk([-7],[0,-5,-15,-20],1);
k=348.2984;
sys_cl=feedback(k*sys,1);
step(sys_cl);
axis([0 3 0 1.2])

 

step input 결과

overshoot은 5%미만, rise time은 1초 이하인것으로 보인다.

 

이거를 gui로 하는 방법은 아래의 코드를 이용한다. 다음과 같은 화면이 나오고 이것을 잘 이용하면 원하는 조건을 만족하는 k 값을 구할 수 있다. 여기서 1초 이내의 rise time을 가지고 5%이내의 overshoot을 가지는 경우 k의 값은 354이다.

sys=zpk([-7],[0,-5,-15,-20],1);
controlSystemDesigner(sys);

 

controlSystemDesigner(sys) 실행결과

이거는 좀더 공부하면 매우 유용하게 사용할 수 있는 도구인거 같다!!

'control tutorials > introduction' 카테고리의 다른 글

Simscape  (0) 2025.01.19
Simulink Control  (0) 2025.01.15
Frequency Domain  (0) 2025.01.14
PID Controller Design  (0) 2025.01.13
Simulink Modeling  (0) 2024.11.28