본문 바로가기
유도항법제어/고전제어

안티 와인드업 (Anti-Windup)

by 세인트워터멜론 2021. 1. 9.

제어 대상 시스템에 대해서 우리가 바라는 동작이 무엇인지 수치로 정해준 것을 명령(command)이라고 하고, 이 값과 실제 시스템의 출력의 차이를 추종 오차(tracking error)라고 한다. 비례-적분(PI, proportional-integral) 제어기는 출력이 정정상태(steady-state)에 돌입했을 때의 추종 오차를 줄이기 위한 제어 기법이다.

 

 

아래 그림은 일반적인 제어 시스템의 구조를 보여준다. \(r\)을 명령, \(y\)를 출력, \(e=r-y\)를 추종 오차, \(u\)를 제어 신호라고 한다.

 

 

PI 제어기는 추종 오차의 크기에 비례하는 값과 오차의 적분 (또는 오차의 누적)에 비례하는 값을 제어 신호로 내보낸다.

 

\[ u(t)=K_p e(t)+K_I \int_0^t e(t) \ dt \]

 

여기서 \(K_p\)를 비례제어 게인, \(K_I\)를 적분제어 게인이라고 한다. PI 제어기를 설계한다는 것은 곧 이 두 게인값을 정하는 것이다.

다음 그림은 아주 단순한운동 모델에 PI 제어기를 설계한 것이다.

 

 

아래 오른쪽 그림을 보면 스텝 명령에 대해서 출력이 \(1.3\)가량 오버슈트하다가 약 6초후에 1로 수렴한다. 따라서 정정상태 오차는 0이 되는 것을 알 수 있다. 이 때 제어 신호의 반응이 왼쪽 그림에 있다. 크기가 \(2\)까지 치솟다가 점차 작아지는 것을 볼 수 있다.

 

 

PI 제어기를 설계할 때 보통 제어 신호의 크기에 제한이 없다고 가정한다. 하지만 실제로는 액추에이터의 물리적 한계 때문에 작동 범위에 제약이 있다. 예를 들어서 항공기의 제어면(control surface)의 변위가 일정값에 도달하면 그 값 이상으로는 작동하지 않는다. 이와 같은 현상을 일컬어 제어 신호의 포화(saturation) 또는 액추에이터의 포화라고 한다. 제어 신호가 포화되면 제어기의 작동이 실질적으로 멈춘 것과 다름없으므로 큰 오버슈트가 발생하는 등 시스템의 성능이 저하된다.

예를 들어서 위 시스템에서 제어 신호의 범위가 \(-0.5 \le u(t) \le 0.5\) 라고 하자. 다음 그림에서 빨강색 블록은 제어 신호의 범위를 제한하는 saturation을 나타낸 것이다.

 

 

그러면 왼쪽 그림처럼 제어 신호가 \(0.5\)이하로 제한이 가해지므로, 오른쪽 그림과 같이 \(1.7\) 가량 큰 오버슈트가 발생하고 정정상태에 도달하기까지의 시간도 길어진다.

 

 

제어 신호가 포화되면 오차가 계속 커지고 이에 따라 오차의 적분값도 계속 커지게 된다. 그러다가 오차가 일시적으로 감소하여도 비례 제어나 미분 제어와는 달리, 적분 제어기는 이미 누적 오차가 매우 큰 상태이기 때문에 여전히 큰 제어 신호를 산출해서 제어기가 정상적인 작동 범위로 되돌아 가는 것을 방해하게 된다. 이를 적분기 와인드업(windup)이라고 한다.

 

 

windup을 방지하기 위해서는 제어 신호가 포화됐을 때 오차의 적분값을 빨리 감소시켜야 하는데, 이를 위한 로직을 안티 와인드업(anti-windup)이라고 한다.

Anti-windup에는 두 가지 방법이 있다. 첫번째는 제어 신호가 포화됐을 때 적분기의 작동을 중단시키는 것이다. 즉 적분 제어기의 게인값을 0으로 설정하는 것이다. 어차피 포화 상태에서는 적분 제어기가 도움이 안되기 때문에 사용가능한 방법이다.

 

\[ K_I^\prime = \begin{cases} K_I, & \mbox{if not saturate} \\ 0, & \mbox{if saturate} \end{cases} \]

 

또 다른 방법은 제어 신호와 액추에이터의 한계값을 비교하여 그 차이를 적분 제어기에 피드백시켜서 제어 신호와 액추에이터의 한계값의 차이를 줄여주는 것이다.

 

\[ u(t)=K_p e(t)+K_I \int_0^t \left[e(t)-K_{aw} \left (u(t)-\mbox{sat}(u(t)) \right) \right] \ dt \]

 

여기서 \(K_{aw}\)는 anti-windup 게인이며,

 

\[ \mbox{sat} (u(t)) = \begin{cases} u_{max}, & \mbox{if } u(t) \ge u_{max} \\ u(t), & \mbox{if } u_{min} \lt u(t) \lt u_{max}\\ u_{min}, & \mbox{if } u(t) \le u_{min} \end{cases} \]

 

이다.

 

 

제어 신호가 포화됐을 때는 \(e_{aw}=u(t)-\mbox{sat}(u(t))\)가 \(0\)이 되도록 피드백 루프가 작동하며, 포화되지 않았을 때는 \(e_{aw}=0\) 이므로 anti-windup은 아무런 역할도 하지 않는다.

Anti-windup을 사용하면 제어 신호가 포화될 때 오차가 누적되는 것을 막아주므로 오버슈트가 크게 감소하여 과도응답 특성이 개선된다.

 

 

다음 그림은 anti-winup을 사용했을 때와 사용하지 않았을 때의 제어 신호와 시스템의 응답을 비교한 것이다.

 

 

 

 

'유도항법제어 > 고전제어' 카테고리의 다른 글

주파수 응답  (0) 2021.02.05
정정상태 응답과 과도 응답  (0) 2021.02.05
안티 와인드업 (Anti-Windup)  (0) 2021.01.09

댓글0