Skip to content

Technik Blog

Programmieren | Arduino | ESP32 | MicroPython | Python | Raspberry Pi | Raspberry Pi Pico

Menu
  • Smarthome
  • Arduino
  • ESP32 & Co.
  • Raspberry Pi & Pico
  • Solo Mining
  • Über mich
  • Deutsch
  • English
Menu

Raspberry PI Pico #3 – PWM Signale erzeugen

Posted on 12. Februar 202130. April 2023 by Stefan Draeger

In diesem Beitrag möchte ich dir nun gerne zeigen wie du ein PWM Signal am Raspberry PI Pico mit Micropython erzeugst. Mit einem solchen PWM Signal kannst du im einfachsten Fall eine LED zum langsamen auf und ableuchten lassen (auch Fade Effekt genannt) oder auch kleine Servomotoren steuern. Und wie du das machst zeige ich dir im folgenden Text.

Raspberry PI Pico mit Servomotor SG90
Raspberry PI Pico mit Servomotor SG90

  • Was ist ein PWM Signal?
  • erzeugen eines PWM Signals am Pico mit MicroPython
  • steuern eines Servomotors per PWM Signal
    • Video

Was ist ein PWM Signal?

Das Kürzel PWM steht für Pulswellenmodulation und ist ein gesteuertes Rechtecksignal. Dabei wird die Spannung in einem definierbaren Zeitabstand ein und ausgeschaltet. (Dabei entsteht an einer LED ein Fade Effekt da das menschliche Auge sehr träge ist.)

Dieses Signal hat nun eine gewisse Frequenz wo es aktiv und deaktiv ist. Der Strom rechnet sich nun aus der Zeit des aktiven und deaktiven Zustands zusammen.

Raspberry PI Pico & Mini Osziloskop DSO138mini
Raspberry PI Pico & Mini Osziloskop DSO138mini

Mehr über das PWM Signal kannst du im sehr ausführlichen Wikipedia Artikel weiterlesen.

Seite „Pulsdauermodulation“. In: Wikipedia, Die freie Enzyklopädie. Bearbeitungsstand: 27. November 2020, 12:43 UTC. URL: https://de.wikipedia.org/w/index.php?title=Pulsdauermodulation&oldid=205986062 (Abgerufen: 5. Februar 2021, 15:38 UTC)

erzeugen eines PWM Signals am Pico mit MicroPython

Wie du ein PWM Signal mit MicroPython erzeugst habe ich bereits im Beitrag Programmieren mit MicroPython #2: steuern von Leuchtdioden (LED) gezeigt. Dieses funktioniert am Raspberry PI Pico sehr ähnlich.

Es gibt von der Raspberry PI Foundation einen passenden Artikel wo dir auf englisch erläutert wird, wie du eine LED steuern kannst Control LED brightness with PWM.

Für das Erzeugen des PWM Signals benötigen wir einen freien Pin sowie aus dem MicroPython Modul „machine“ die Klasse „PWM“. Und für das Erzeugen einer minimalen Pause die Klasse „sleep“ aus dem Modul „time“.

#Klasse zum ansteuern eines GPIO Pin 
from machine import Pin 

#Klasse zum erzeugen eines PWM Signals 
#an einem GPIO Pin 
from machine import PWM

#aus dem Modul "time" die Klasse sleep laden 
from time import sleep

In meinem Fall ist eine LED am GPIO 15 angeschlossen welche wir zum Faden (langsames auf und ableuchten) bringen möchten.

#GPIO welcher als PWM Pin benutzt werden soll 
pwm = PWM(Pin(15))

Das PWM Signal soll eine Frequenz von 1kHz haben.

#eine Frequenz von 1000hz also 1kHz 
pwm.freq(1000)

Der mögliche Wert für den Tastgrad zwischen zwei PWM Signalen ist 65025. Bei 0 ist die LED aus und bei dem maximalen Wert von 65025 ist diese voll erleuchtet. Also nehmen wir nun eine Schleife von 0 bis 65025 und setzen darin den Tastgrad (duty) des PWM Signals.

for duty in range(65025): 
   #setzen des Tastgrades 
   pwm.duty_u16(duty) 
   #1 Mikrosekunde Pause 
   sleep(0.0001)

Wenn diese Schleife abgearbeitet ist, wird wiederum eine Schleife vom maximalen Wert zu 0 durchlaufen.

#und das ganze Rückwärts 
for duty in range(65025, 0, -1): 
   pwm.duty_u16(duty) 
   sleep(0.0001)

Hier nun der gesamte Code zum Erzeugen eines PWM Signals mit MicroPython.

#Klasse zum ansteuern eines GPIO Pin
from machine import Pin 

#Klasse zum erzeugen eines PWM Signals
#an einem GPIO Pin
from machine import PWM

#die beiden Imports kann man auch verkürzen
#indem diese Kommasepariert aufgeführt werden
# from machine import Pin, PWM

#aus dem Modul "time" die Klasse sleep laden
from time import sleep

#GPIO welcher als PWM Pin benutzt werden soll
pwm = PWM(Pin(15))

#eine Frequenz von 1000hz also 1kHz
pwm.freq(1000)

#Endlosschleife...
while True:
    #duty == Tastgrad, definiert die Zeit zwischen jeweils
    #zwei eingeschalteten Signalen, je kleiner dieser Wert
    #umso Heller ist zbsp. eine LED
    for duty in range(65025):
        #setzen des Tastgrades
        pwm.duty_u16(duty)
        #1microsekunde Pause
        sleep(0.0001)
        
    #und das ganze Rückwärts
    for duty in range(65025, 0, -1):
        pwm.duty_u16(duty)
        sleep(0.0001)

steuern eines Servomotors per PWM Signal

Wie du einen Servomotor per  Python am Raspberry PI steuern kannst habe ich im gleichnamigen Beitrag Raspberry PI Tutorial #7: Servomotor steuern erläutert. Nachfolgend möchte ich dir nun zeigen wie das mit Micropython am Raspberry PI Pico mit dem fast gleichen Code funktioniert.

Zunächst müssen wir die korrekte Frequenz für den Servomotor setzen. Diesen Wert kannst du aus dem Datenblatt zum Servomotor ablesen. In meinem Fall verwende ich einen Servo vom Typ SG90 welcher eine Frequenz von 50Hz benötigt.

from time import sleep
from machine import Pin 
from machine import PWM

pwm = PWM(Pin(15))
pwm.freq(50)

# Funktion zum setzen eines Winkels
# als Parameter wird die Position erwartet
def setServoCycle(position):
  pwm.duty_u16(position)
  sleep(0.01)


while True:
    for pos in range(100, 8000,50):
      setServoCycle(pos)
    for pos in range(8000, 100,-50):
      setServoCycle(pos)

Der Servo SG90 kann sich um 180° bewegen. In meinem Fall bewege ich das Ruderhorn von dem Winkel 0° zum maximum 180° in Schritten von jeweils 50 und eine kleine Pause von 10 Millisekunden.

Video

3 thoughts on “Raspberry PI Pico #3 – PWM Signale erzeugen”

  1. Pascal Heuberger sagt:
    10. April 2021 um 19:10 Uhr

    Sehr Interessant

    Zum Thema PWM Erzeugen mit PI PICO und MicroPython habe ich im Netz sicher 20 Beispiele gefunden.
    Jedoch: Ein PWM Signal (500us – 2500us 200Hz, zum Beispiel von einem RC Gyro) mit dem PI PICO und MicroPython Präzise und Jitterfrei zu lesen, da habe ich noch kein einziges gut Funktionierendes Beispiel gefunden.
    Könnt Ihr da nachlegen?

    Antworten
    1. Stefan Draeger sagt:
      10. April 2021 um 20:03 Uhr

      Hallo Pascal,
      ich denke mal 200Hz Abtastrate am Raspberry PI Pico ist schon recht sportlich. Denke mal das wird schwierig.

      Gruß,
      Stefan Draeger

      Antworten
  2. Bo sagt:
    4. Juni 2021 um 09:00 Uhr

    Hallo
    sehr interessanter Beitrag:) mich würde allerdings auch interessieren, wie man ein pwm Signal als Sollwert mit z.B. einem Xbox One Controller vorgibt. Dann wäre der Pico der erste „PWM Empfänger“, der das könnte und gleichzeitig bauformtechnisch einem RC Empfänger nahe kommt.

    Antworten

Schreibe einen Kommentar Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Fragen oder Feedback?

Du hast eine Idee, brauchst Hilfe oder möchtest Feedback loswerden?
Support-Ticket erstellen

Newsletter abonnieren

Bleib auf dem Laufenden: Erhalte regelmäßig Updates zu neuen Projekten, Tutorials und Tipps rund um Arduino, ESP32 und mehr – direkt in dein Postfach.

Jetzt Newsletter abonnieren

Unterstütze meinen Blog

Wenn dir meine Inhalte gefallen, freue ich mich über deine Unterstützung auf Tipeee.
So hilfst du mit, den Blog am Leben zu halten und neue Beiträge zu ermöglichen.

draeger-it.blog auf Tipeee unterstützen

Vielen Dank für deinen Support!
– Stefan Draeger

Kategorien

Tools

  • Unix-Zeitstempel-Rechner
  • ASCII Tabelle
  • Spannung, Strom, Widerstand und Leistung berechnen
  • Widerstandsrechner
  • 8×8 LED Matrix Tool
  • 8×16 LED Matrix Modul von Keyestudio
  • 16×16 LED Matrix – Generator

Links

Blogverzeichnis Bloggerei.de TopBlogs.de das Original - Blogverzeichnis | Blog Top Liste Blogverzeichnis trusted-blogs.com

Stefan Draeger
Königsberger Str. 13
38364 Schöningen

Tel.: 01778501273
E-Mail: info@draeger-it.blog

Folge mir auf

  • Impressum
  • Datenschutzerklärung
  • Disclaimer
  • Cookie-Richtlinie (EU)
©2025 Technik Blog | Built using WordPress and Responsive Blogily theme by Superb
Cookie-Zustimmung verwalten
Wir verwenden Technologien wie Cookies, um Geräteinformationen zu speichern und/oder darauf zuzugreifen. Wir tun dies, um das Surferlebnis zu verbessern und um personalisierte Werbung anzuzeigen. Wenn Sie diesen Technologien zustimmen, können wir Daten wie das Surfverhalten oder eindeutige IDs auf dieser Website verarbeiten. Wenn Sie Ihre Zustimmung nicht erteilen oder zurückziehen, können bestimmte Funktionen beeinträchtigt werden.
Funktional Immer aktiv
Die technische Speicherung oder der Zugang ist unbedingt erforderlich für den rechtmäßigen Zweck, die Nutzung eines bestimmten Dienstes zu ermöglichen, der vom Teilnehmer oder Nutzer ausdrücklich gewünscht wird, oder für den alleinigen Zweck, die Übertragung einer Nachricht über ein elektronisches Kommunikationsnetz durchzuführen.
Vorlieben
Die technische Speicherung oder der Zugriff ist für den rechtmäßigen Zweck der Speicherung von Präferenzen erforderlich, die nicht vom Abonnenten oder Benutzer angefordert wurden.
Statistiken
Die technische Speicherung oder der Zugriff, der ausschließlich zu statistischen Zwecken erfolgt. Die technische Speicherung oder der Zugriff, der ausschließlich zu anonymen statistischen Zwecken verwendet wird. Ohne eine Vorladung, die freiwillige Zustimmung deines Internetdienstanbieters oder zusätzliche Aufzeichnungen von Dritten können die zu diesem Zweck gespeicherten oder abgerufenen Informationen allein in der Regel nicht dazu verwendet werden, dich zu identifizieren.
Marketing
Die technische Speicherung oder der Zugriff ist erforderlich, um Nutzerprofile zu erstellen, um Werbung zu versenden oder um den Nutzer auf einer Website oder über mehrere Websites hinweg zu ähnlichen Marketingzwecken zu verfolgen.
Optionen verwalten Dienste verwalten Verwalten von {vendor_count}-Lieferanten Lese mehr über diese Zwecke
Einstellungen anzeigen
{title} {title} {title}