ADC: 단일, 연속, 타이머 동기 샘플링
STM32 ADC의 변환 모드, 샘플링 시간, 여러 채널 스캔, 타이머 트리거로 정확한 주기 샘플링을 하는 방법.
변환 모드
| 모드 | 동작 | 용도 |
|---|---|---|
| 단일 변환 | 명령할 때 한 번 | 가끔 읽는 배터리 전압 |
| 연속 변환 | 끝나면 바로 다시 | 빠르게 계속 감시 |
| 스캔 | 여러 채널을 차례로 | 센서 여러 개 |
| 외부 트리거 | 타이머 이벤트마다 | 제어용 정주기 샘플링 |
| 인젝티드 채널 | 정규 변환 중에 끼어들어 우선 변환 | 모터 상전류 |
샘플링 시간
채널마다 샘플링 사이클 수(3, 15, 28, 56 … 480)를 정합니다. 소스 임피던스가 크면 길게 잡습니다. 변환 시간 = 샘플링 사이클 + 12사이클(12비트).
타이머 트리거
TIM1 PWM 중앙 → TRGO → ADC 인젝티드 변환 → 완료 인터럽트에서 FOC 계산
모터 제어에서는 스위칭 노이즈를 피해 PWM 주기의 정해진 순간(로우사이드가 켜져 있는 중앙)에 상전류를 샘플링해야 합니다. 이 동기화를 하드웨어로 하는 것이 핵심입니다.
정확도 높이기
- 내부 기준 전압 채널(VREFINT)을 읽어 실제 VDDA를 계산하고 보정
- 칩별 보정값(캘리브레이션)을 시작 시 실행
- 여러 번 읽어 평균, 또는 하드웨어 오버샘플링