
PWM이란 신호를 매우 빠르게 켜고 끄는 방식으로 장치가 받는 전력을 제어하는 방법이다. 이러한 방식 덕분에, 디지털 방식으로 아날로그 신호와 비슷한 효과를 낼 수 있다. 또한, 효율적으로 전력을 조절할 수 있다. 단순히 열로 에너지를 소모하는 대신, 신호가 켜져있는 시간을 조절하여 전력을 제어한다. 이는 LED 밝기 조절이나 서보 모터 제어와 같은 곳에서 사용된다.
PWM은 다음과 같이 두 가지 방식으로 생성할 수 있다.
① 소프트웨어 PWM
② 하드웨어 PWM
임베디드 시스템에서는 일반적으로 하드웨어 PWM을 선호한다. 왜냐하면 신뢰성이 더 높고, 프로세서를 느리게 하지 않기 때문이다.
PWM의 핵심 개념은 Duty Cycle이다. Duty Cycle이란 한 주기에서 신호가 켜져 있는 시간의 비율(%)을 의미한다. Duty Cycle이 높을수록 더 많은 전력이 전달된다.
예를 들어, 1 kHz PWM 신호에서 한 주기는 1 ms이다. Duty Cycle이 75 %라면 신호는 0.75 ms 동안 켜지고 0.25 ms 동안 꺼진다.
즉, PWM은 주파수를 일정하게 유지한 상태에서 Duty Cycle을 조절하여 전력을 제어하는 방식이다.
#include "mbed.h"
UnbufferedSerial pc(USBTX, USBRX, 112500);
PwmOut led(PB_13);
int main() {
led.period_ms(1); // 1 kHz frequency
while (true) {
printf("LED is off\n");
led.write(0.0f);
ThisThread::sleep_for(2s);
printf("LED is at 25%%\n");
led.write(0.25f);
ThisThread::sleep_for(2s);
printf("LED is at 75%%\n");
led.write(0.75f);
ThisThread::sleep_for(2s);
printf("LED is at 100%%\n");
led.write(1);
ThisThread::sleep_for(2s);
}
}





