모터제어
12. FOC 펌웨어 구현 – MCU에서 실제로 돌릴 때 챙겨야 할 것들
motorcontrol
2026. 10. 3. 22:32
반응형
시뮬레이션에서 잘 돌던 FOC, 보드에 올리면 왜 안 돌까?
🧠 시뮬레이션과 실제의 차이
시뮬레이션은 연속 시간, 무한 정밀도, 이상적인 센서를 가정합니다.
실제 MCU에서는 샘플링 지연, 연산 시간, 양자화, 노이즈, 데드타임이 모두 끼어듭니다.
| 항목 | 시뮬레이션 | 실제 MCU |
| 시간 | 연속 / 10µs 고정 스텝 | PWM 주기 단위 이산 제어 |
| 연산 | double 부동소수점 | FPU 유무에 따라 float / Q-format |
| 전류 측정 | 이상적인 값 | ADC 오프셋, 게인 오차, 노이즈 |
| 인버터 | 이상 스위치 | 데드타임, 전압 강하 |
⏱️ 제어 루프 타이밍 설계
PWM 캐리어(센터 정렬) 골짜기
└─ ADC 트리거 (Low-side ON 구간 중앙)
└─ ADC 완료 인터럽트
├─ 전류 변환 (Clarke/Park)
├─ 각도 추정 / 센서 읽기
├─ 전류 PI
└─ SVPWM 듀티 계산 → 다음 주기 반영
- PWM-ADC 동기화 : 스위칭 노이즈를 피해 샘플링 위치 고정
- 1 주기 지연 보상 : 듀티가 다음 주기에 반영되므로 θ를 ω·Ts·1.5만큼 앞당겨 사용
- ISR 실행 시간 : PWM 주기의 50~70% 이내로 관리 (GPIO 토글로 측정)
🔢 고정소수점 vs 부동소수점
| 구분 | 장점 | 주의점 |
| Q15 / Q31 | FPU 없는 MCU에서도 빠름 | 오버플로우·스케일링 관리 필수 |
| float (FPU) | 코드 가독성, 튜닝 편리 | FPU 미지원 시 연산 시간 급증 |
📌 Q-format을 쓸 때는 전류·전압·속도를 정격값 기준 per-unit으로 정규화해 두면 스케일링 실수가 크게 줄어듭니다.
🛠️ 보드 위에서 자주 만나는 문제
| 증상 | 원인 후보 | 대응 |
| 정지 상태에서 전류가 흐름 | ADC 오프셋 | 기동 전 오프셋 캘리브레이션 |
| 저속 토크 리플 | 데드타임 전압 오차 | 전류 극성 기반 데드타임 보상 |
| 특정 속도에서 진동 | PI 대역폭 과다 / 지연 | 전류 루프 대역폭 재설정 |
| 가속 중 탈조 | 추정기 수렴 부족 | 전환 속도·PLL 게인 조정 |
✅ 마무리 요약
| 항목 | 요약 |
| ⏱️ 타이밍 | PWM-ADC 동기 + 1주기 지연 보상 |
| 🔢 연산 | MCU 사양에 맞춰 Q-format / float 선택 |
| 🧪 보정 | ADC 오프셋, 데드타임 보상 필수 |
| 📈 디버깅 | DAC·CAN·디버거로 내부 변수 실시간 관찰 |
다음 챕터에서는 전류·속도 제어기 PI 게인 튜닝을 실제 파라미터 기반으로 계산하는 방법을 정리해볼게요.
반응형