임베디드 통신

PWM과 듀티비

마이크로컨트롤러의 디지털 핀은 0 V와 3.3 V 두 값만 낼 수 있습니다. 그런데 핀을 아주 빠르게 켰다 껐다 하면, LED나 모터는 그 평균값에 반응합니다. 한 주기에서 켜져 있는 시간의 비율을 듀티비라고 합니다.

듀티비에 따라 PWM 파형과 평균 전압, LED 밝기가 바뀌는 시뮬레이터

1. 듀티비와 주파수를 정하세요

30%
PWM 주파수

2. 보는 방식을 고르세요

슬라이더를 움직이면 high 구간의 폭과 평균 전압 점선이 함께 바뀝니다. [아주 느리게]를 누르면 LED가 실제로는 켜졌다 꺼졌다 한다는 것을 볼 수 있습니다.

평균 전압 = 듀티비 × 전원 전압

3.3 V 핀을 30% 동안만 켜 두면 평균 전압은 0.3 × 3.3 V = 0.99 V입니다. LED는 1초에 수백 번 이상 깜빡이면 사람 눈이 깜빡임을 따라가지 못해 평균 밝기로 보이고, 모터는 회전자의 관성 때문에 평균 전압에 맞는 속도로 돕니다. 모터 구동에 20 kHz 이상을 쓰는 이유는 사람 귀에 들리는 소음을 피하기 위해서입니다.

STM32 타이머로 만드는 법

타이머는 0부터 ARR까지 세기를 반복하고, 카운터가 CCR보다 작은 동안 핀을 high로 둡니다. 그래서 주기는 ARR로, 듀티비는 CCR로 정해집니다. PSC는 타이머 클럭을 먼저 나눠서 ARR이 16비트 범위(최대 65535)를 넘지 않게 합니다.

PWM 주파수 = 타이머 클럭 / ((PSC + 1) × (ARR + 1))
듀티비     = CCR / (ARR + 1)