ADC: 단일, 연속, 타이머 동기 샘플링
STM32 ADC의 변환 모드, 샘플링 시간, 여러 채널 스캔, 타이머 트리거로 정확한 주기 샘플링을 하는 방법.
변환 모드
| 모드 | 동작 | 용도 |
|---|---|---|
| 단일 변환 | 명령할 때 한 번 | 가끔 읽는 배터리 전압 |
| 연속 변환 | 끝나면 바로 다시 | 빠르게 계속 감시 |
| 스캔 | 여러 채널을 차례로 | 센서 여러 개 |
| 외부 트리거 | 타이머 이벤트마다 | 제어용 정주기 샘플링 |
| 인젝티드 채널 | 정규 변환 중에 끼어들어 우선 변환 | 모터 상전류 |
샘플링 시간
채널마다 샘플링 사이클 수(3, 15, 28, 56 … 480)를 정합니다. 소스 임피던스가 크면 길게 잡습니다. 변환 시간 = 샘플링 사이클 + 12사이클(12비트).
타이머 트리거
TIM1 PWM 중앙 → TRGO → ADC 인젝티드 변환 → 완료 인터럽트에서 FOC 계산
모터 제어에서는 스위칭 노이즈를 피해 PWM 주기의 정해진 순간(로우사이드가 켜져 있는 중앙)에 상전류를 샘플링해야 합니다. 이 동기화를 하드웨어로 하는 것이 핵심입니다.
정확도 높이기
- 내부 기준 전압 채널(VREFINT)을 읽어 실제 VDDA를 계산하고 보정
- 칩별 보정값(캘리브레이션)을 시작 시 실행
- 여러 번 읽어 평균, 또는 하드웨어 오버샘플링
숫자를 전압으로 바꾸기
12비트 ADC는 0부터 4095까지의 숫자를 냅니다.
전압 = ADC 값 × Vref / 4095
1 LSB = 3.3 V / 4096 ≈ 0.8 mV
uint32_t mv = (uint32_t)adc * 3300u / 4095u; // 정수로 mV 계산
adc / 4095 * 3300처럼 나눗셈을 먼저 쓰면 정수 나눗셈 때문에 거의 항상 0이 됩니다. 곱셈을 먼저 합니다.
샘플링 시간이 짧으면 값이 틀린다
ADC 안에는 작은 커패시터가 있고, 샘플링 시간 동안 입력 전압으로 충전됩니다. 신호원의 저항이 크면 충전이 덜 된 채로 변환이 시작되어 값이 낮게 나옵니다.
| 신호원 | 대처 |
|---|---|
| OP 앰프 출력, 낮은 저항 | 짧은 샘플링 시간으로 충분 |
| 수십 kΩ 분배 저항 | 샘플링 시간을 길게, 입력에 100 nF 추가 |
| 여러 채널을 번갈아 읽기 | 채널을 바꾼 직후 값이 이전 채널에 끌려감. 샘플링 시간을 늘림 |
세 가지 읽는 방법
- 폴링: 변환을 시작하고 끝날 때까지 기다립니다. 가끔 읽는 온도, 배터리 전압.
- 인터럽트: 변환이 끝나면 핸들러에서 값을 가져옵니다.
- 타이머 트리거 + DMA: 타이머가 정확한 주기로 변환을 시작하고 결과를 DMA가 버퍼에 쌓습니다. 주기가 일정해야 하는 신호 처리와 모터 제어.
모터 전류는 PWM 주기의 가운데에서 재야 스위칭 노이즈를 피할 수 있어서, PWM 타이머가 ADC를 직접 트리거하도록 설정합니다.
그림으로 보기: PWM 가운데에서 샘플링
노이즈 줄이기
- 평균: 16번 더해 4비트 밀면 간단한 평균이 됩니다. 반응은 느려집니다.
- 입력 필터: 신호 대역보다 조금 높은 차단 주파수의 RC 필터.
- 기준 전압: 전원 3.3 V를 그대로 기준으로 쓰면 전원 흔들림이 그대로 오차가 됩니다. 정밀 측정에는 별도 기준 전압을 씁니다.
- 아날로그 그라운드: 큰 전류가 흐르는 길과 ADC 신호의 길을 분리합니다.
현업에서 자주 터지는 문제
- 전원 켠 뒤 보정(캘리브레이션)을 하지 않아 오프셋이 남음
- 입력이 Vref를 넘어 값이 4095에 붙어 있음(분배비 확인)
- 내부 온도 센서나 기준 전압 채널은 긴 샘플링 시간이 필요한데 기본값으로 읽음
영상으로 이어 보기회로와 하드웨어 시리즈 8편전자제품 속 회로 소자는 어떻게 동작할까? · 저항 · 커패시터 · 인덕터 완벽 정리PROJECT COURSE레지스터 설정을 실제 보드에서 해 보고 싶다면밸런싱 로봇 하나를 요구사항, 회로와 PCB, 펌웨어, 앱까지 실무 순서대로 만드는 강의입니다. 10파트 165강.강의 살펴보기 →FREE PDF무료 전자책 3권 받기이 주제를 한 권으로 이어서 읽고 싶다면. BLDC 모터 제어, 직렬통신, 센서를 책 분량으로 묶었습니다. 이메일만 남기면 바로 받습니다.무료로 받기 →