PWM 기초: 듀티비로 평균 전압 만들기
MCU의 디지털 핀은 HIGH와 LOW, 두 가지 값만 낼 수 있습니다. 그런데도 LED 밝기나 모터 속도를 부드럽게 조절할 수 있는 이유는 PWM 덕분입니다. PWM은 핀을 아주 빠르게 켜고 끄면서 켜져 있는 시간의 비율을 바꾸는 방법입니다.
듀티비
한 주기 중 HIGH인 시간의 비율을 듀티비라고 합니다.
- 평균 전압 = 듀티비 × 전원 전압
- 3.3 V에서 듀티비 25%면 평균 0.825 V
- 3.3 V에서 듀티비 50%면 평균 1.65 V
LED나 모터는 빠른 깜빡임을 따라가지 못하고 평균값에 반응하기 때문에, 듀티비만 바꿔도 밝기와 속도가 바뀝니다.
주파수는 얼마로 할까
| 대상 | 흔히 쓰는 주파수 | 이유 |
|---|---|---|
| LED | 수백 Hz 이상 | 깜빡임이 눈에 보이지 않도록 |
| DC 모터, BLDC 인버터 | 약 20 kHz | 사람 귀에 들리는 소음 대역을 피하려고 |
| 서보 모터 | 50 Hz | 서보 규격이 20 ms 주기 |
주파수를 높이면 소음과 전류 리플이 줄지만, 스위칭 손실이 늘어납니다.
타이머로 계산하기
PWM은 타이머로 만듭니다. STM32 기준으로 세 값이 주기와 듀티비를 정합니다.
- PSC: 타이머 클럭을 나누는 값
- ARR: 카운터가 어디까지 세는지. 주기를 정합니다
- CCR: 어디까지 HIGH를 유지할지. 듀티비를 정합니다
타이머 클럭이 72 MHz일 때의 예시입니다.
PSC = 71 -> 72 MHz / (71 + 1) = 1 MHz (카운터 1틱 = 1 µs)
ARR = 999 -> 1 MHz / (999 + 1) = 1 kHz (주기 1 ms)
CCR = 250 -> 250 / (999 + 1) = 25% (듀티비)
ARR을 크게 잡을수록 듀티비를 더 잘게 나눌 수 있습니다. ARR이 999면 0.1% 단위로 조절할 수 있습니다.