Startseite / Wiki / PWM (Pulsweitenmodulation)
Elektronik

PWM (Pulsweitenmodulation)

PWM simuliert analoge Ausgaben mit digitalen Pins — so dimmst du LEDs, steuerst Servos und regelst Motordrehzahlen mit ESP32 und Arduino.

15. Jänner 2025

Was ist PWM?

PWM steht für Pulsweitenmodulation (englisch: Pulse Width Modulation). Es ist eine Technik, mit der ein digitaler Pin — der nur HIGH (an) oder LOW (aus) kennt — eine analoge Wirkung erzeugt, indem er sehr schnell ein- und ausgeschaltet wird.

Das Verhältnis zwischen Ein- und Auszeit wird als Duty Cycle (Tastverhältnis) bezeichnet und in Prozent angegeben. 50 % Duty Cycle bedeutet: halb an, halb aus — die LED leuchtet auf halber Helligkeit.

Duty Cycle verstehen

Duty CycleWirkung (LED)Wirkung (Servo)
0 %AusGanz links (0°)
25 %25 % Helligkeit45°
50 %50 % Helligkeit90° (Mitte)
75 %75 % Helligkeit135°
100 %Volle HelligkeitGanz rechts (180°)

PWM beim ESP32

Der ESP32 hat einen eingebauten LEDC (LED Control) PWM-Controller mit 16 Kanälen und einstellbarer Frequenz und Auflösung:

pwm-led.ino
const int ledPin = 2;
const int pwmChannel = 0;
const int frequency = 5000; // 5 kHz
const int resolution = 8;   // 8 Bit = Werte 0–255

void setup() {
ledcSetup(pwmChannel, frequency, resolution);
ledcAttachPin(ledPin, pwmChannel);
}

void loop() {
// LED langsam heller
for (int duty = 0; duty <= 255; duty++) {
  ledcWrite(pwmChannel, duty);
  delay(10);
}
// LED langsam dunkler
for (int duty = 255; duty >= 0; duty--) {
  ledcWrite(pwmChannel, duty);
  delay(10);
}
}

Servo mit PWM steuern

Servos erwarten ein PWM-Signal mit 50 Hz und einem Puls zwischen 1 ms (0°) und 2 ms (180°):

pwm-servo.ino
#include <ESP32Servo.h>

Servo myServo;

void setup() {
myServo.attach(13); // Servo an Pin 13
}

void loop() {
myServo.write(0);   // Ganz links
delay(1000);
myServo.write(90);  // Mitte
delay(1000);
myServo.write(180); // Ganz rechts
delay(1000);
}

Tipp

PWM-Frequenz wählen

Die richtige Frequenz hängt vom Anwendungsfall ab:

AnwendungTypische Frequenz
LED dimmen1 kHz – 10 kHz
Servo50 Hz
DC-Motor1 kHz – 20 kHz
Audiosignal44 kHz
#pwm #pulsweitenmodulation #esp32 #arduino #led #servo #motor