제어공학 수업에서 PID 를 배울 때 대부분은 전달함수와 근궤적을 먼저 만난다. 그러나 현장에서 PID 를 쓰는 방식은 그것과 거리가 멀다. 실제로는 이득 세 개를 만지면서 응답이 어떻게 변하는지 눈으로 보고 결정한다. 이 글은 그 감각을 먼저 얻게 하려는 목적으로 쓴다. 본문 중간에 직접 만질 수 있는 시뮬레이터를 두었으니, 읽으면서 계속 슬라이더를 움직여 보기를 권한다.
1. 제어 문제의 형태
제어란 원하는 값과 실제 값의 차이를 줄이는 일이다. 용어부터 정리한다.
- 설정값 (SP, set point)
r— 우리가 원하는 값. 목표 속도, 목표 위치, 목표 온도. - 측정값 (PV, process variable)
y— 센서가 읽은 실제 값. - 오차 (error)
e = r − y - 조작량 (MV, manipulated variable)
u— 제어기가 내보내는 출력. 모터 전압, 히터 전력. - 제어 대상 (plant) — 조작량을 받아 측정값을 만들어 내는 물리계.
r ──→(+)──→ e ──→ ┌─────────┐ ──→ u ──→ ┌─────────┐ ──→ y ──┬──→
↑ │ 제어기 │ │ 제어 대상 │ │
│ │ PID │ │ plant │ │
│ └─────────┘ └─────────┘ │
└──────────────────── 센서 ────────────────────────────┘
(−)
<그림 1> 되먹임 제어 루프 (feedback control loop)
PID 제어기는 오차 e 를 세 가지 방식으로 보고, 그 합을 조작량으로 내보낸다.
비례(P) 적분(I) 미분(D)
말로 바꾸면 이렇다. 비례항은 지금의 오차를 본다. 적분항은 그동안 쌓인 오차를 본다. 미분항은 오차가 변하는 기세를 본다. 세 항이 각각 현재·과거·미래를 담당한다고 설명하는 교재가 많은데, 그 비유는 외우기에는 좋으나 실제 튜닝에는 별 도움이 되지 않는다. 각 항이 응답의 어느 부분을 어떻게 바꾸는지를 몸으로 아는 편이 낫다.
2. 직접 만져 보기
아래가 그 시뮬레이터다. 슬라이더를 움직이면 계단 응답(step response)이 즉시 다시 그려진다. 파란 선이 측정값, 주황 선이 조작량이며, 회색 점선이 설정값이다. 흐린 선은 직전에 그려졌던 곡선이라 변화 방향을 확인할 수 있다.
<그림 2> PID 놀이터. 화면이 좁으면 가로가 넉넉한 기기에서 여는 편이 낫다.
먼저 해 볼 것은 「P 만」 버튼을 누르고 Kp 만 키워 보는 일이다. 응답이 빨라지는 대신 설정값에 닿지 못하고 멈추는 현상이 보일 것이다. 그것이 다음 절의 주제다.
3. 비례 제어 — 지금의 오차
가장 단순한 제어기는 오차에 상수를 곱해 내보내는 것이다.
제어 대상이 1차 지연계(first-order lag)라고 하자. 모터에 전압을 걸었을 때의 속도 응답이 이 형태다.
정상상태(steady state)에서는 dy/dt = 0 이므로 y = K·u 이다. 여기에 u = Kp(r − y) 를 대입하면
y·(1 + K·Kp) = K·Kp·r
∴ ess = r − y = r / (1 + K·Kp)
즉 비례 제어만으로는 오차가 절대 0 이 되지 않는다. 오차가 0 이 되면 조작량도 0 이 되어 버리기 때문이다. 모터를 목표 속도로 돌리려면 전압이 계속 걸려 있어야 하는데, 그 전압을 만들어 낼 오차가 필요한 것이다. 이 값을 정상상태 오차(steady-state error) 또는 오프셋(offset)이라 한다.
시뮬레이터의 「모터 속도」 대상은 K = 1 이므로 ess = r/(1+Kp) 이다. Ki 와 Kd 를 0 으로 두고 Kp 만 바꾸어 실제로 확인해 보면 다음과 같다.
| Kp | 이론값 r/(1+Kp) | 시뮬레이션 결과 |
|---|---|---|
| 1 | 0.500 | 0.5000 |
| 3 | 0.250 | 0.2500 |
| 9 | 0.100 | 0.1000 |
<표 1> 비례 제어의 정상상태 오차 (설정값 r = 1)
표에서 보듯 Kp 를 키우면 오차는 줄어든다. 그렇다면 Kp 를 아주 크게 잡으면 될 것 같지만 그렇지 않다. Kp 를 키울수록 응답이 점점 크게 출렁이기 때문이다. 시뮬레이터에서 「모터 위치」 대상을 고르고 Ki 와 Kd 를 0 으로 둔 채 Kp 만 바꾸어 보면 다음과 같다.
| Kp | 1 | 2 | 3 | 5 | 7 | 9 |
|---|---|---|---|---|---|---|
| 오버슈트 | 0.1 % | 7.0 % | 14.2 % | 24.5 % | 31.4 % | 36.6 % |
<표 2> 비례 이득을 키울수록 오버슈트가 커진다 (모터 위치, Ki=Kd=0)
덧붙여, 이 대상은 2 차계이므로 이득을 아무리 키워도 수학적으로는 발산하지 않고 출렁임만 심해진다. 진짜 발산은 지연시간이 끼어들 때 일어난다 — 6-(2) 절에서 확인할 수 있다.
4. 적분 제어 — 쌓인 오차
정상상태 오차를 없애려면, 오차가 작더라도 그것이 오래 지속되면 조작량을 계속 키워 주는 장치가 필요하다. 오차를 시간에 대해 누적하면 된다.
오차가 남아 있는 한 적분값은 계속 커지므로, 조작량도 계속 커진다. 이 과정은 오차가 정확히 0 이 될 때까지 멈추지 않는다. 그래서 적분항을 넣으면 정상상태 오차가 사라진다.
대가는 있다. 적분은 과거를 보는 항이므로 본질적으로 느리고, 위상 지연(phase lag)을 만들어 안정도를 떨어뜨린다. Ki 를 과하게 넣으면 설정값을 넘어갔다가 되돌아오기를 반복하는 출렁임이 생긴다. 시뮬레이터에서 Ki 만 계속 키워 보면 응답이 점점 요동치는 것을 볼 수 있다.
5. 미분 제어 — 변화의 기세
미분항은 오차의 변화율을 본다. 측정값이 설정값을 향해 빠르게 접근하고 있으면 미리 제동을 건다.
여기서 흔한 오해를 하나 짚는다. 미분항의 값어치는 「오버슈트를 줄이는 것」이 아니다. 오버슈트만 줄이려면 Kp 를 낮추면 된다. 미분항의 진짜 값어치는 오버슈트를 키우지 않으면서 Kp 를 더 올릴 수 있게 해 주는 것, 즉 같은 안정도에서 더 빠른 응답을 얻게 해 주는 데 있다.
시뮬레이터에서 확인할 수 있는 수치로 보면 분명하다. 「모터 속도」 대상에서 「PI」 프리셋과 「PID」 프리셋을 번갈아 눌러 보라.
| 프리셋 | Kp | Ki | Kd | 오버슈트 | 정정시간 |
|---|---|---|---|---|---|
| PI | 3 | 6 | 0 | 0.0 % | 0.65 s |
| PID | 5 | 8 | 0.25 | 1.4 % | 0.47 s |
<표 3> 미분항을 넣으면 이득을 더 높이고도 안정하다
미분항 덕분에 Kp 를 3 에서 5 로, Ki 를 6 에서 8 로 올리고도 오버슈트가 1.4 % 에 그쳤고, 정정시간은 0.65 초에서 0.47 초로 27 % 빨라졌다. 이것이 D 를 쓰는 이유다.
e 가 아니라 측정값 y 에 걸고 부호를 뒤집는다(derivative on measurement). 설정값이 계단으로 변할 때 de/dt 가 순간적으로 무한대가 되어 조작량에 충격이 실리는 현상(derivative kick)을 막기 위해서다. 이 시뮬레이터도 그렇게 구현되어 있다.
6. 현장에서 반드시 걸리는 세 가지
교과서의 PID 와 현장의 PID 를 가르는 것은 대부분 아래 세 가지다. 시뮬레이터 하단의 옵션으로 각각을 켜고 끄며 확인할 수 있다.
(1) 출력 포화와 적분 와인드업
실제 액추에이터의 출력에는 한계가 있다. 모터 드라이버의 최대 전류, 히터의 최대 전력 같은 것이다. 제어기가 계산한 조작량이 이 한계를 넘으면 잘려 나간다. 이것을 포화(saturation)라 한다.
문제는 이때 적분항이다. 출력은 이미 한계에 걸려 더 낼 것이 없는데도 오차는 여전히 남아 있으므로 적분값은 계속 쌓인다. 나중에 측정값이 설정값에 도달해도, 부풀어 오른 적분값을 도로 깎아 내리는 데 시간이 걸려 크게 넘어갔다 돌아온다. 이 현상이 적분 와인드업(integral windup)이다.
대책은 포화 중에 적분을 멈추는 것이다(안티 와인드업, anti-windup). 시뮬레이터에서 「출력 제한」을 ±1.2 정도로 낮추고 Ki 를 크게 올린 뒤 「안티 와인드업」 체크를 껐다 켜 보라. 같은 이득에서 오버슈트가 19.3 % 에서 0.8 % 로 떨어진다.
(2) 지연시간
조작량을 바꿔도 측정값이 즉시 반응하지 않고 일정 시간 뒤에야 움직이기 시작하는 경우가 있다. 이를 지연시간(dead time, 낭비시간)이라 한다. 컨베어로 재료가 이송되는 시간, 배관 내 유체의 이동 시간, 통신 주기, 센서의 처리 시간이 모두 여기 해당한다.
지연시간은 PID 가 가장 다루기 어려워하는 상대다. 제어기는 이미 지나간 정보를 보고 판단하게 되므로, 이득을 조금만 올려도 쉽게 발진한다. 시뮬레이터에서 「지연시간」 슬라이더를 0.3 초로 올려 보면 멀쩡하던 응답이 무너지는 것을 볼 수 있다. 지연시간이 시정수에 비해 크면 PID 로는 한계가 있고, 스미스 예측기(Smith predictor) 같은 별도 구조가 필요해진다.
(3) 측정 잡음과 미분
미분은 잡음을 증폭한다. 센서 신호에 섞인 작은 떨림도 미분하면 큰 값이 되어 조작량을 요동치게 만든다. 이 요동은 액추에이터의 수명을 깎고 소음과 발열을 만든다.
시뮬레이터에서 「측정 잡음」을 2 % 로 올린 뒤 Kd 를 넣었다 뺐다 해 보라. Kd 가 있을 때 조작량 그래프가 눈에 띄게 거칠어진다. 실제로 측정해 보면 조작량의 총 변동량이 10 배 이상 차이 난다.
그래서 실무의 미분항에는 반드시 저역통과 필터(low-pass filter)가 함께 붙는다. 상용 제어기에서 「미분 필터 계수」나 N 값으로 노출되는 항목이 그것이다. 잡음이 심한 공정에서는 아예 Kd 를 0 으로 두고 PI 로만 운전하는 경우도 흔하다.
7. 플랜트가 이미 적분기를 가진 경우
이 절은 학부 수업에서 잘 다루지 않지만 현장에서는 자주 만나는 상황이다.
모터의 위치를 제어한다고 하자. 속도를 적분하면 위치이므로, 제어 대상 안에 이미 적분기가 하나 들어 있다. 이런 계를 1형 계통(type 1 system)이라 한다.
이 경우 비례 제어만으로도 정상상태 오차가 0 이 된다. 오차가 0 이 되어 조작량이 0 이 되더라도, 적분기가 그때까지의 값을 그대로 붙들고 있기 때문이다. 앞 절에서 본 「오차가 있어야 조작량이 나온다」는 논리가 여기서는 성립하지 않는다.
따라서 이 경우 Ki 는 필요 없을 뿐 아니라 해롭다. 적분기를 하나 더 얹는 셈이라 위상 지연이 겹치면서 출렁임만 커진다. 시뮬레이터의 「모터 위치」 대상에서 Kp 를 12, Kd 를 2.0 으로 고정하고 Ki 만 바꾸어 보면 다음과 같다.
| Ki | 오버슈트 | 정정시간 | 정상상태 오차 |
|---|---|---|---|
| 0 | 0.7 % | 0.61 s | 0.0000 |
| 0.5 | 1.5 % | 0.59 s | −0.0071 |
| 1.5 | 3.2 % | 2.90 s | −0.0137 |
| 3 | 5.6 % | 4.36 s | −0.0134 |
| 6 | 10.1 % | 3.61 s | −0.0055 |
<표 4> 적분형 플랜트에서 Ki 를 키울수록 나빠진다 (Kp=12, Kd=2.0)
Ki 를 0 에서 6 으로 올리는 동안 정상상태 오차는 전혀 개선되지 않았고(원래 0 이었으므로), 오버슈트는 0.7 % 에서 10.1 % 로, 정정시간은 0.61 초에서 3.61 초로 나빠지기만 했다. 위치 제어 루프를 PD 로 짜는 관행에는 이런 근거가 있다.
8. 튜닝 순서
정해진 정답은 없으나, 아래 순서로 하면 대체로 실패하지 않는다.
- Ki = 0, Kd = 0 으로 두고 Kp 만 올린다. 응답이 출렁이기 시작하는 지점을 찾고, 그 값의 절반 정도로 되돌린다.
- Kd 를 넣어 출렁임을 잡는다. 잡음이 심한 계에서는 이 단계를 건너뛴다.
- Kd 덕분에 여유가 생겼으면 Kp 를 다시 올린다. 2~3 단계를 몇 번 오간다.
- 마지막으로 Ki 를 조금씩 넣어 정상상태 오차를 없앤다. 필요한 최소량만 쓴다. 플랜트가 적분형이면 이 단계는 생략한다.
- 포화·지연·잡음을 실제 조건으로 놓고 재확인한다. 이상적인 조건에서 맞춘 이득은 현장에서 대개 그대로 쓰이지 않는다.
지글러-니콜스(Ziegler–Nichols) 같은 고전적 정식화 방법도 있다. 시뮬레이터에 해당 프리셋을 넣어 두었는데, 눌러 보면 알겠지만 응답이 빠른 대신 오버슈트가 상당히 크다. 이 방법은 1942 년에 공정 제어를 대상으로 제안된 것으로, 출발점을 잡는 용도로는 쓸 만하나 최종값으로 쓰기에는 공격적이다.
맺으며
PID 는 이론이 어려워서가 아니라 세 이득이 서로 얽혀 있어서 어렵게 느껴진다. 하나를 바꾸면 나머지 둘의 적정값도 함께 움직이기 때문이다. 이런 종류의 감각은 수식을 들여다봐서는 좀처럼 생기지 않고, 손으로 돌려 보아야 붙는다.
시뮬레이터는 계속 열어 둘 것이니 필요할 때 다시 와서 만져 보아도 된다. 다뤄 주었으면 하는 주제나 이상한 점이 있으면 댓글로 남겨 주기 바란다.

답글 남기기