이득 여유 및 위상 여유 평가하기
이 예제에서는 안정성 여유가 제어 시스템의 폐루프 응답 특성에 미치는 영향을 검토하는 방법을 보여줍니다.
피드백 루프의 안정성
안정성은 일반적으로 모든 내부 신호가 유계 상태를 유지한다는 의미입니다. 이는 제어 손실 및 장비 손상을 방지하기 위한 제어 시스템의 표준 요구 사항입니다. 선형 피드백 시스템의 경우 안정성은 폐루프 전달 함수의 극점을 검토하여 평가할 수 있습니다. 예를 들어 다음과 같은 SISO 피드백 루프가 있다고 가정하겠습니다.
그림 1: SISO 피드백 루프
단위 루프 이득 k
의 경우 다음을 사용하여 폐루프 전달 함수 T
를 계산할 수 있습니다.
G = tf([.5 1.3],[1 1.2 1.6 0]); T = feedback(G,1);
T
의 극점을 구하기 위해 다음을 입력합니다.
pole(T)
ans = -0.2305 + 1.3062i -0.2305 - 1.3062i -0.7389 + 0.0000i
모든 극점에 음수 실수부가 있으므로 k=1
에 대한 피드백 루프는 안정적입니다.
안정적이라면 얼마나 안정적일까요?
폐루프 극점을 확인하여 안정성 여부를 평가할 수 있습니다. 사실 안정성이 얼마나 강인한지 또는 취약한지를 알면 더 유용합니다. 안정성을 잃기 전까지 루프 이득을 얼마나 변경할 수 있는지가 이러한 강인성에 대한 하나의 지표입니다. 다음과 같이 근궤적 플롯을 사용하여 안정적인 루프의 k
값 범위를 추정할 수 있습니다.
rlocus(G)
궤적이 y축과 교차하는 지점을 클릭하면 이 피드백 루프가 다음 범위에서 안정적이라는 사실이 드러납니다.
이 범위는 k=1
일 때 안정성을 잃기 전까지 루프 이득이 270% 증가할 수 있음을 보여줍니다.
이득 여유와 위상 여유
루프 이득의 변경은 강인한 안정성의 한 가지 특성에 불과합니다. 일반적으로 플랜트 모델링이 불완전하다는 것은 이득과 위상이 둘다 정확히 알려지지 않았음을 의미합니다. 모델링 오류가 있으면 이득 교차 주파수(개루프 이득이 0dB인 주파수) 부근에서 가장 손상이 크므로 이 주파수에서 위상 변동이 얼마나 용인될 수 있는지도 중요합니다.
위상 여유는 이득 교차 주파수에서 안정성이 손실되려면 얼마만큼의 위상 변동이 필요한지 측정합니다. 이와 유사하게 이득 여유는 위상 교차 주파수에서 안정성이 손실되려면 어떤 상대적 이득 변동이 필요한지 측정합니다. 이들 두 개의 수치를 함께 사용하여 폐루프 안정성에 대한 "안전 여유"를 추정할 수 있습니다. 안정성 여유가 작을수록 안정성이 취약합니다.
다음과 같이 보드 플롯에 이득 여유와 위상 여유를 표시할 수 있습니다. 먼저 플롯을 만듭니다.
bode(G), grid
그런 다음, 플롯을 마우스 오른쪽 버튼으로 클릭하고 특성 -> 최소 안정성 여유 하위 메뉴를 선택합니다. 마지막으로, 파란색 점 마커를 클릭합니다. 결과로 생성되는 플롯은 아래와 같습니다.
이 플롯은 약 9dB의 이득 여유와 약 45도의 위상 여유를 나타냅니다. 대응되는 폐루프 계단 응답은 약 20% 오버슈트와 약간의 진동을 보입니다.
step(T), title('Closed-loop response for k=1')
이득을 k=2
로 증가시키면 안정성 여유가 다음과 같이 감소하고
[Gm,Pm] = margin(2*G); GmdB = 20*log10(Gm) % gain margin in dB Pm % phase margin in degrees
GmdB = 2.7435 Pm = 8.6328
폐루프 응답에는 불량 감쇠된 진동이 포함되어 거의 불안정함을 나타냅니다.
step(feedback(2*G,1)), title('Closed-loop response for k=2')
여러 개의 이득 또는 위상 교차가 있는 시스템
일부 시스템에는 여러 개의 이득 교차 주파수 또는 위상 교차 주파수가 있으며, 이 경우 이득 또는 위상 여유 값이 여러 개가 됩니다. 예를 들어 다음과 같은 피드백 루프가 있다고 가정하겠습니다.
그림 2: 여러 개의 위상 교차가 있는 피드백 루프
k=1
에 대한 폐루프 응답은 안정적입니다.
G = tf(20,[1 7]) * tf([1 3.2 7.2],[1 -1.2 0.8]) * tf([1 -8 400],[1 33 700]);
T = feedback(G,1);
step(T), title('Closed-loop response for k=1')
이 루프의 안정성이 얼마나 강인한지 평가하기 위해 보드 응답을 플로팅합니다.
bode(G), grid
그런 다음, 플롯을 마우스 오른쪽 버튼으로 클릭하고 특성 -> 모든 안정성 여유 하위 메뉴를 선택하여 모든 교차 주파수 및 연관된 안정성 여유를 표시합니다. 결과로 생성되는 플롯은 아래와 같습니다.
두 개의 180도 위상 교차 및 대응되는 -9.35dB와 +10.6dB의 이득 여유가 있습니다. 음의 이득 여유는 이득을 낮춤으로써 안정성이 손실됨을 나타내는 반면, 양의 이득 여유는 이득을 높임으로써 안정성이 손실됨을 나타냅니다. k=1
에 대한 플러스/마이너스 6dB 이득 변동에 대해 폐루프 계단 응답을 플로팅하여 이를 확인합니다.
k1 = 2; T1 = feedback(G*k1,1); k2 = 1/2; T2 = feedback(G*k2,1); step(T,'b',T1,'r',T2,'g',12), legend('k = 1','k = 2','k = 0.5')
ans = Legend (k = 1, k = 2, k = 0.5) with properties: String: {'k = 1' 'k = 2' 'k = 0.5'} Location: 'northeast' Orientation: 'vertical' FontSize: 9 Position: [0.7167 0.7614 0.1692 0.1144] Units: 'normalized' Use GET to show all properties
플롯을 보면 작은 이득 값과 큰 이득 값 모두에 대해 진동이 증가했음을 알 수 있습니다.
allmargin
명령을 사용하여 모든 안정성 여유를 계산할 수 있습니다. 참고로, 이득 여유는 dB가 아닌 이득비로 표현됩니다. mag2db
를 사용해 값을 dB로 변환합니다.
m = allmargin(G) GainMargins_dB = mag2db(m.GainMargin)
m = struct with fields: GainMargin: [0.3408 3.3920] GMFrequency: [1.9421 16.4807] PhaseMargin: 68.1140 PMFrequency: 7.0776 DelayMargin: 0.1680 DMFrequency: 7.0776 Stable: 1 GainMargins_dB = -9.3510 10.6091
참고 항목
margin
| pole
| diskmargin
(Robust Control Toolbox)