디지털 제어: 샘플링, 이산화, 안티 와인드업
MCU에서 돌아가는 제어기는 연속 시간이 아니라 정해진 주기의 계산입니다. 샘플링 주기 정하기와 구현의 함정.
샘플링 주기
제어 대역폭의 10~20배로 샘플링하는 것이 경험칙입니다.
| 루프 | 대역폭 | 주기 예 |
|---|---|---|
| 모터 전류 | ~1kHz | 10~20kHz (PWM과 동기) |
| 모터 속도 | ~100Hz | 1~2kHz |
| 위치 / 자세 | ~10Hz | 100Hz~1kHz |
| 온도 | ~0.1Hz | 1~10Hz |
이산화
연속 제어기를 차분식으로 바꿉니다.
- 적분:
integ += e * Ts(오일러) 또는 사다리꼴 - 미분:
(e - e_prev) / Ts
Ts는 실제 주기를 써야 합니다. 주기가 흔들리면 타이머로 정확히 맞춥니다.
안티 와인드업
출력이 포화(PWM 100%)된 상태에서도 적분기가 계속 쌓이면, 오차가 줄어든 뒤에도 쌓인 적분값 때문에 한참 동안 목표를 넘어 달립니다.
- 클램핑: 출력이 포화된 방향으로는 적분을 멈춤
- 백 계산: 포화로 잘린 만큼 적분기를 되돌림
그 밖의 함정
- 계산 시간만큼 지연이 생깁니다. 측정 → 계산 → 출력 순서를 매 주기 같은 타이밍에
- 부동소수점이 없는 MCU에서는 고정소수점 스케일과 포화 처리
- 게인을 실행 중에 바꿀 때 출력이 튀지 않게(적분기 보정)