PWM mit Arduino meistern: Umfassender Leitfaden & wichtige Funktionen
Arduino PWM-Programmierung & Funktionen
Was ist PWM?
PWM = Pulsweitenmodulation. Eine Gleichspannung wird in ein Rechtecksignal mit variabler Pulsbreite umgewandelt. Das Verhältnis von Einschaltdauer (Ton) zur Periodendauer (T) heißt Tastverhältnis (Duty Cycle). Auch als Pulsdauermodulation (PDM) bekannt. Moderne Leistungsschalter (MOSFETs, Transistoren) setzen PWM um; bei hohen Lasten sind oft aufwendige Treiberstufen nötig.
Warum PWM?
Hauptanwendung: Leistungssteuerung durch Variation des Tastverhältnisses. Warum nicht einfach Vorwiderstand? Widerstand wandelt überschüssige Energie in Wärme → sehr ineffizient, bei hoher Leistung teuer & groß. PWM schaltet den Verbraucher verlustarm (idealer Schalter) ein/aus – hoher Wirkungsgrad. Zweite Anwendung: Informationsübertragung im Tastverhältnis (z. B. Servosteuerung, Farbmischung).
Typische PWM-Anwendungen
- Servomotoren: Winkel proportional zum Tastverhältnis
- RGB-LEDs: Farbmischung aus Rot, Grün, Blau per PWM
- DC-DC-Wandler: Effiziente Spannungswandlung
- Motordrehzahlregelung: Gleichstrommotoren, Lüfter
- Sinussignale/Leistungselektronik: Spannungspegelsteuerung (z. B. Inverters)
PWM-Frequenz – Worauf achten?
PWM ist ein pulsierendes Signal. Zu niedrige Frequenz → Motor ruckelt (zwischen Pulsen bremst er ab). Frequenz muss zur mechanischen Zeitkonstante des geregelten Systems passen (Motorenträgheit, Filterzeitkonstante). Faustregel: Mind. 10×–100× schneller als Systemzeitkonstante.
PWM bei Arduino – Hardware & Funktion
Arduino UNO: 6 PWM-Pins (3, 5, 6, 9, 10, 11), markiert mit ~. Standardfrequenz: 490 Hz (Pins 9,10,11) bzw. 980 Hz (Pins 3,5,6). Keine komplexe Programmierung nötig – nur analogWrite(pin, wert) mit Wert 0–255 (8 Bit Auflösung).
Unterschied: digitalWrite → nur HIGH/LOW. analogWrite → PWM (emuliert analoges Signal).
Arduino PWM-Programmierbeispiel: LED-Helligkeit stufenlos dimmen
int ledPin = 9; // PWM-Pin
int brightness = 0; // Start-Helligkeit
int fadeAmount = 5; // Schrittweite
void setup() {
pinMode(ledPin, OUTPUT);
}
void loop() {
analogWrite(ledPin, brightness); // PWM setzen
brightness += fadeAmount; // Helligkeit ändern
// Richtung umkehren an Grenzen
if (brightness <= 0 || brightness >= 255) {
fadeAmount = -fadeAmount;
}
delay(30); // Geschwindigkeit des Fadens
}
Die Variable brightness läuft 0→255→0… Die LED fadet sanft ein & aus. Wichtig: Richtigen PWM-Pin (~) nutzen & analogWrite() verwenden.
Weiterführende Themen
- PIC18 Mikrocontroller in C programmieren
- MAX232: Aufbau, Betrieb, Typen, Anwendung
- 10+ Online Design- & Simulationstools für EE
- 15 unverzichtbare Android-Apps für Elektro/ Elektronik
- Clap-Switch mit 555-Timer
- Angebrannten Widerstandswert bestimmen (3 Methoden)
Industrietechnik
- Arduino-Sensoren: Typen, Anwendungen und reale Projekte
- Vier bewährte Muster für benutzerdefinierte Funktionen in C
- Manufacturing Day: Entwicklung, Wirkung und Branchen-Showcase
- LCD-Animationen & Spiele mit Arduino UNO erstellen
- Python 3 zu Arduino UNO: Einfache Steuerung & LED-Demo
- Kompaktes FM-Radio mit Arduino Nano und RDA5807M selbst bauen
- Raspberry Pi 3 & Arduino Laptop selbst bauen: Schritt-für-Schritt-Anleitung
- EAM vs. CMMS: Wesentliche Unterschiede & Kernfunktionen verstehen
- Smart Manufacturing: Definition, Vorteile und Implementierung
- IoT in der Fertigung: Schlüsselkonzepte, Anwendungen und Praxisbeispiele