동작 원리
s영역에서 튜닝한 PI 제어기를 MCU나 DSP에서 돌리려면 차분방정식으로 바꿔야 합니다. 흔히 쓰는 방법은 모두 u[k] = u[k-1] + b0·e[k] + b1·e[k-1] 꼴이 되고, 달라지는 건 b0와 b1뿐입니다. 이 계산기는 Tustin(쌍선형), 주파수 프리워핑을 넣은 Tustin, 후진 오일러, 전진 오일러 계수를 구합니다. PI에서는 전진 오일러가 영차 홀드(ZOH) 등가와 똑같습니다.
구한 이산 제어기를 단위원 z = e^(jωT) 위에서 계산해, 입력한 주파수(보통 루프 크로스오버)에서 연속시간 Kp + Ki/(jω)와 비교합니다. 보드 선도는 나이퀴스트 주파수 fs/2까지 그리며, 그 근처에서 이산 응답이 연속 응답과 벌어지는 모습이 보입니다.
실제로 더 중요한 건 마지막 결과입니다. 샘플앤홀드가 깎아 먹는 위상(ωT/2)과 한 샘플 연산 지연이 깎아 먹는 위상(ωT 추가)입니다. 이 둘은 제어기가 아니라 루프에 붙은 것이라 이산화 방법을 바꿔도 없어지지 않습니다.
설계 절차
- 1플랜트 모델로 연속시간에서 Kp, Ki를 정하고 크로스오버 주파수를 적어 둡니다.
- 2제어 루프가 실제로 도는 샘플링 주파수를 넣습니다. 인터럽트가 PWM 주기를 건너뛰며 돈다면 PWM 주파수보다 낮습니다.
- 3특별한 이유가 없으면 Tustin을 고르고 b0, b1을 옮겨 적습니다. 프리워핑 주파수는 PI 영점에 두거나, 크로스오버에서 정확히 맞추고 싶으면 크로스오버로 둡니다.
- 4설계한 위상 여유에서 여기 나온 지연 위상을 빼 봅니다. 결과가 너무 작으면 크로스오버를 낮추거나 지연을 줄여야 합니다. 이산화 방법을 바꿔서는 되찾을 수 없습니다.
공식
- 차분방정식
- u[k] = u[k−1] + b0·e[k] + b1·e[k−1]
- Tustin
- b0 = Kp + Ki·T/2, b1 = −Kp + Ki·T/2
- ωp에서 프리워핑한 Tustin
- K = ωp / tan(ωp·T/2); b0 = Kp + Ki/K, b1 = −Kp + Ki/K
- 후진 오일러
- b0 = Kp + Ki·T, b1 = −Kp
- 전진 오일러 = ZOH
- b0 = Kp, b1 = −Kp + Ki·T
- 지연에 의한 위상
- φ_ZOH = ω·T/2, φ_ZOH+1샘플 = 1.5·ω·T (도 단위는 ×180/π)
계산 예시
Kp = 0.5, Ki = 2000 s⁻¹(PI 영점 637 Hz), fs = 20 kHz, 크로스오버 1 kHz로 잡아 봅니다. Tustin은 b0 = 0.55, b1 = −0.45입니다. 후진 오일러는 0.60 / −0.50, 전진 오일러(ZOH)는 0.50 / −0.40이 나옵니다. 1 kHz에서 연속 PI의 위상은 −32.48°인데, Tustin은 0.21°, 0.02 dB 차이로 거의 같습니다. 두 오일러 방식은 서로 반대 방향으로 약 2.6°, 0.6 dB씩 벗어납니다. 이걸 지연과 비교해 보면, 1 kHz에서 홀드만으로 9.0°, 홀드에 한 샘플 연산 지연까지 더하면 27.0°가 빠집니다. fs를 10 kHz로 반으로 줄이면 54°가 됩니다. 위상 여유가 모자라면 Tustin이냐 오일러냐보다 샘플링과 갱신 타이밍을 먼저 봐야 합니다.
흔한 실수
- 단위 혼동: 여기서 Ki는 1/s 단위로, ∫e dt에 곱하는 적분 이득입니다. 튜닝을 Ti로 했다면 Ki = Kp/Ti입니다.
- 제어기가 PWM 두 주기나 네 주기마다 한 번 도는데 fs에 PWM 주파수를 넣는 경우. T는 제어기 자신의 갱신 주기입니다.
- 안티와인드업 누락. 위 차분방정식에는 출력 제한이 없습니다. u가 포화되면 출력을 제한하고 적분을 멈추지 않으면 큰 스텝 뒤에 오버슈트가 크게 납니다.
자주 묻는 질문
어떤 방법을 써야 하나요?
크로스오버가 fs/10보다 충분히 낮은 PI라면 Tustin입니다. 연속 설계와 이득·위상이 가장 가깝고, 안정한 연속 극점을 모두 단위원 안으로 옮겨 줍니다. 크로스오버가 fs보다 훨씬 낮으면 오일러 방식도 괜찮고, 코드 리뷰에서 설명하기는 더 쉽습니다.
PI에서 프리워핑을 하면 뭐가 달라지나요?
거의 없습니다. 프리워핑은 한 주파수에서 이산 응답을 정확히 맞추는 것인데, fs/20에 있는 PI라면 계수가 소수점 넷째 자리에서 바뀌는 정도입니다. 주파수 자체가 중요한 노치 필터나 공진 제어기에서 의미가 큽니다.
여기서는 왜 전진 오일러와 ZOH가 같나요?
적분기 Ki/s의 ZOH 등가는 Ki·T/(z−1)로, 전진 오일러 적분기와 똑같습니다. 비례항은 그대로 통과하므로 PI에서는 두 방법의 b0, b1이 같습니다. 다른 전달함수에서는 다릅니다.
이 사이트의 PID 코드 생성기는 어떤 방법인가요?
생성된 코드는 적분값을 쓰기 전에 e[k]·dt를 먼저 더하므로 후진 오일러입니다(b0 = Kp + Ki·T, b1 = −Kp). 위 예제 조건에서는 연속 PI보다 위상이 약 2.6° 앞섭니다. 지연에 비하면 작지만 알아 둘 만합니다.
참고 문헌
- G. F. Franklin, J. D. Powell, M. L. Workman, "Digital Control of Dynamic Systems," 3rd ed., Addison-Wesley, 1998.
계산 결과는 공학적 추정치입니다. 데이터시트, 시뮬레이션, 측정으로 설계를 확인하세요.