PI 이산화 계산기 (Tustin, 오일러, ZOH)

연속시간 PI 제어기 Kp + Ki/s를 차분방정식 계수 두 개로 바꾸고, 방법별로 그리고 샘플링 지연 때문에 크로스오버에서 이득과 위상이 얼마나 달라지는지 보여 줍니다.

PI 제어기

샘플링과 평가 주파수

비워 두거나 0~fs/2 범위를 벗어나면 PI 영점을 씁니다. Ki = Kp/Ti.

PI 영점

636.6 Hz

Ki = 2000 s⁻¹

연속 이득

-4.54 dB

1 kHz 기준

연속 위상

-32.482°

1 kHz 기준

1 kHz에서 지연에 의한 위상 지연

ZOH (0.5T)

9.00°

ZOH + 한 샘플 지연 (1.5T)

27.00°

1.5T는 계산 결과가 PWM 한 주기 뒤에 적용된다고 가정한 값입니다. 이 지연은 아래 오차에 더해지며, 이산화 방법을 바꿔도 없어지지 않습니다.

1 kHz에서 계수와 오차

방법b0b1이득 오차 (dB)위상 오차
Tustin0.55-0.45-0.021+0.214°
프리워핑 Tustin0.550167-0.449833-0.012+0.128°
후진 오일러이 사이트의 PID 코드 생성기가 쓰는 방법0.6-0.5+0.587+2.627°
전진 오일러 = ZOH0.5-0.4-0.655-2.569°

차분방정식

Tustin
u[k] = u[k-1] + 0.55*e[k] - 0.45*e[k-1]
프리워핑 Tustin
u[k] = u[k-1] + 0.550167*e[k] - 0.449833*e[k-1]
후진 오일러
u[k] = u[k-1] + 0.6*e[k] - 0.5*e[k-1]
전진 오일러 = ZOH
u[k] = u[k-1] + 0.5*e[k] - 0.4*e[k-1]

제어기 보드 선도

동작 원리

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. 1플랜트 모델로 연속시간에서 Kp, Ki를 정하고 크로스오버 주파수를 적어 둡니다.
  2. 2제어 루프가 실제로 도는 샘플링 주파수를 넣습니다. 인터럽트가 PWM 주기를 건너뛰며 돈다면 PWM 주파수보다 낮습니다.
  3. 3특별한 이유가 없으면 Tustin을 고르고 b0, b1을 옮겨 적습니다. 프리워핑 주파수는 PI 영점에 두거나, 크로스오버에서 정확히 맞추고 싶으면 크로스오버로 둡니다.
  4. 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° 앞섭니다. 지연에 비하면 작지만 알아 둘 만합니다.

참고 문헌

  1. G. F. Franklin, J. D. Powell, M. L. Workman, "Digital Control of Dynamic Systems," 3rd ed., Addison-Wesley, 1998.

계산 결과는 공학적 추정치입니다. 데이터시트, 시뮬레이션, 측정으로 설계를 확인하세요.

관련 가이드

관련 계산기