Raspberry Pi Pico: GPIO-Ausgang mit PWM-Signal
PWM steht für Pulsweitenmodulation bzw. Pulse Width Modulation. Ein PWM-Signal kann zur Steuerung oder als Taktsignal verwendet werden. Im einfachsten Fall lässt man damit eine LED blinken.
Das PWM-Signal besteht aus zwei Teilen. Einem High-Pegel und einem Low-Pegel, zwischen denen hin- und hergewechselt wird. Die Zeit, die High-Pegel und Low-Pegel zusammen brauchen, wird als Periodendauer (Kehrwert der Frequenz) bezeichnet. Die Länge, Dauer oder Breite des High-Pegels im Verhältnis zur Periodendauer wird als Tastgrad oder Duty Cycle bezeichnet. In diesem Tastgrad kann man ein Informationssignal moduliert sein, mit dem ein anderes Gerät gesteuert wird.
Das Erzeugen eines PWM-Signals unterliegt beim Mikrocontroller RP2040 auf dem Raspberry Pi Pico ein paar Einschränkungen. Es gibt nur 8 unabhängige PWM-Kanäle, deren Frequenz sich auch nur zwischen 7 Hz bis 125 MHz einstellen lässt (laut Datenblatt).
Wenn man in MicroPython programmiert muss man sich darum nicht kümmern. Die Einschränkungen und die dahinterliegende Komplexität der PWM-Erzeugung wird von MicroPython verborgen.
Das Erzeugen eines PWM-Signals wird von MicroPython für jeden GPIO-Pin unterstützt. Ein PWM-Signal ist mit wenigen Zeilen Programmcode programmiert.
Aufbau und Bauteile

Dieser Aufbau sieht die Ansteuerung einer externen LED einer LED-Leiste vor. Man kann alternativ auch den GPIO 25 der Onboard-LED verwenden. Bei einem Raspberry Pi Pico W (mit WLAN-Chip) kann die Onboard-LED nicht mit einem PWM-Signal initialisiert werden.
Programmcode
Der Programmcode erzeugt ein PWM-Signal an einem GPIO des Raspberry Pi Pico. Dafür braucht der PWM-Generator bzw. die PWM-Funktion zwei Parameter, um das PWM-Signal zu generieren:
1. Die Frequenz, mit der das Signal wiederholt werden soll.
2. Den Tastgrad (Duty Cycle), der in Prozent angibt, wie lange der High-Pegel innerhalb einer Periode des PWM-Signals dauern soll.
Im Programmcode wird die Frequenz des PWM-Signals auf 10 Hz eingestellt und in der folgenden Schleife nacheinander verschiedene Duty Cycles (10 %, 25 %, 50 %, 75 %, 90 %) eingestellt. Die angesteuerte LED verlängert dabei ihre Leuchtdauer in Abhängigkeit zum Duty Cycle.
Am Ende des Programmcodes wird das PWM-Signal deaktiviert.
# Bibliotheken laden
import machine
import time
# GPIO-Nummer
GPIO_PIN = 15
# PWM initialisieren
pwm = machine.PWM(machine.Pin(GPIO_PIN))
# PWM-Einstellung: Frequenz in Hertz (Hz)
pwm.freq(10)
# Duty Cycle in Prozent einstellen
DUTY_CYCLE_LIST = [10, 25, 50, 75, 90]
# Duty Cycle einstellen
for duty_cycle in DUTY_CYCLE_LIST:
print('Duty Cycle:', duty_cycle, '% von der Periodendauer')
pwm.duty_u16(int(65536 * duty_cycle / 100))
time.sleep(5)
# PWM-Signal abschalten
pwm.deinit()
Hinweis: Der Versuch, den Tastgrad (Duty Cycle) auf diese Weise darzustellen, ist grenzwertig. Das Problem ist, dass eine Leuchtdiode prinzipbedingt träge ist und noch etwas nachleuchtet, auch wenn kein Signal mehr anliegt. Das heißt, man kann den Einfluss des Tastgrads auf die Leuchtdauer der Leuchtdiode nur erahnen, als wirklich erkennen.
PWM-Signal abschalten
Grundsätzlich ist es so, dass wenn ein PWM-Signal erst einmal initialisiert ist, dann läuft es, bis es abgeschaltet wird. Die Abschaltung erfolgt allerdings nicht über das Programmcode-Ende, sondern über eine definiert Deinitialisierung. Deshalb enthält der Programmcode eine Fehlerbehandlung mit „try/except“, die das PWM-Signal abschaltet, sobald der Programmcode auf irgendeine Weise (manuell oder Fehler) beendet wird.
Weitere verwandte Themen:
- Raspberry Pi Pico: Grundlagen zur PWM
- Raspberry Pi Pico: Experimente mit PWM
- Raspberry Pi Pico: LED-Helligkeit mit PWM einstellen
- Raspberry Pi Pico: GPIO als digitaler Ausgang
- Raspberry Pi Pico: GPIO-Grundlagen
Frag Elektronik-Kompendium.de
Hardware-nahes Programmieren mit dem Raspberry Pi Pico und MicroPython
Das Elektronik-Set Pico Edition ist ein Bauteile-Sortiment mit Anleitung zum Experimentieren und Programmieren mit MicroPython.
- LED: Einschalten, ausschalten, blinken und Helligkeit steuern
- Taster: Entprellen und Zustände anzeigen
- LED mit Taster einschalten und ausschalten
- Ampel- und Lauflicht-Steuerung
- Elektronischer Würfel
- Eigene Steuerungen programmieren
Online-Workshop: Programmieren mit dem Raspberry Pi Pico
Gemeinsam mit anderen und unter Anleitung experimentieren? Wir bieten unterschiedliche Online-Workshops zum Raspberry Pi Pico und MicroPython an. Einführung in die Programmierung, Sensoren programmieren und kalibrieren, sowie Internet of Things und Smart Home über WLAN und MQTT.
Besuchen Sie unser fast monatlich stattfindendes Online-Meeting PicoTalk und lernen Sie uns kennen. Die Teilnahme ist kostenfrei.






