Pulsweitenmodulation

zu Weihnachten habe ich mal ein technisches Thema zum Basteln und Ausprobieren rausgesucht, dass ich schon länger im Backlog habe. Die Pulsweitenmodulation (PWM) engl. Pulse width modulation, erlaubt es dir eine Leuchtdiode nicht nur ein- und auszuschalten, sondern auch zu dimmen.

Der Grundaufbau der Schaltung mit LED entspricht der aus diesem Post. Die hatte ich noch montiert in der Aufbewahrungsbox liegen.

Pulsweitenmodulation

Die Pulsweitenmodulation eignet sich,um elektrische Signale zu steuern, ohne dabei kontinuierlich Strom zu liefern. Stattdessen schaltet PWM das Signal sehr schnell ein und aus. Durch die Steuerung, wie lange das Signal \“ein\“ im Vergleich zu „aus“ ist, lässt sich die Leistung oder Intensität eines Geräts regeln.

Die Geschwindigkeit des schnellen Ein- und Ausschaltens wird durch die Frequenz festgelegt. Das Verhältnis zwischen „ein“ und „aus“ ist der Tastgrad D (engl.: Duty Cycle).

Das PWM Signal ist ein rechteckiges Signal, das zwischen High und Low wechselt. Es hat eine Periodendauer T und eine Frequenz f, wie oft das Signal in einer Sekunde wiederholt wird. Die Zeit, in der das Signal von Low auf High und wieder zurück auf Low wechselt nennt man Impulsdauer t1

PWM Signal mit der Impulsdauer t1 und der Periodendauer T
MatthiasDD /Wikipedia
Pulse_wide_waveCreative Commons Attribution-ShareAlike 4.0 International License . loading=
PWM Signal mit der Impulsdauer t1 und der Periodendauer T

Die Frequenz ist umgekehrt proportional zur Periodendauer [math] f = \frac{1}{T} [/math]

Der Tastgrad berechnet sich mit [math] D= \frac{t_{high}}{T} [/math]

Materialliste

Diese Bauteile kommen im Laufe des Posts zum Einsatz

  • Breadboard fullsize
  • Raspberry Pi Pico W
  • Leuchtdiode rot
  • Vorwiderstand 330Ω
  • Piezo Speaker
  • Servo Motor 9G
  • einige Jumper Kabel

Raspberry Pi Pico W

Beim Raspberry Pi Pico können alle GPIO Pins von 0-29 mit PWM geschaltet werden.

Programmcode

Ich steuere alle Komponenten mit dem gleichen Programm an.

#encoding: utf-8
import machine
import network
import socket
import rp2
from time import sleep
from machine import Pin,PWM

led = Pin(15, Pin.OUT)
pwm = PWM(Pin(15))
duty_step = 129  # Schrittweite für den Tastgrad



# Frequenz in Hertz (Hz) einstellen
# Bei höhren Werten als 100 wird der Piezo Speaker "basslastiger" und die LED
# erreicht nicht ihre max. Helligkeit.
# Bei niedrigeren flackert die LED
pwm.freq(100)

# Tastgrad (Duty Cycle) einstellen 1kHz
pwm.duty_u16(1000)

try:
  while True:
    # linear ansteigender Tastgrad
    for duty_cycle in range(0, 65536, duty_step):
      pwm.duty_u16(duty_cycle)
      sleep(0.010)

    sleep(2)

    # Linear absteigender Tastgrad
    for duty_cycle in range(65536, 0, -duty_step):
      pwm.duty_u16(duty_cycle)
      sleep(0.0010)
    sleep(2)
finally:
    print('finally')
    pwm.duty_u16(0)
    pwm.deinit()
    led.off()

Die LED ist über den Vorwiderstand an Pin 15 des Pico angeschlossen. Das ist nichts Neues.

Dann wird zur Nutzung der Pulsweitenmodulation ein PWM Objekt für den Pin erzeugt. Das Programm findest du auch im GIT Repository

pwm = PWM(Pin(15))

Die Frequenz setze ich auf f=100

pwm.freq(100)

Für einen sauberen Ausgangszustand setze ich den Duty Cycle dann zunächst auf 0.

pwm.duty_u16(0)

Der Duty Cycle kann beim Raspberry Pi Pico W Werte zwischen 0 und 65536 annehmen.

Die Endlosschleife enthält zwei Schleifen, in der ersten wird der Tastgrad D über alle möglichen Werte in 10 Millisekunden Schritten hochgezählt. Nach zwei Sekunden Wartezeit, zählt die zweite Schleife wieder herunter.

Die Spannung die der Pin 15 liefert lässt sich über den Duty Cycle berechnen [math]V_{out} = \frac{D}{V_{max}}[/math]

Vmax liegt bei 3,3V, die nur bei einem maximalen Duty Cycle von [math]D=65536[/math] also 100% anliegen. Bei [math]D=32168[/math] liegen nur 50% der maximalen Spannung an und die LED leuchtet nur mit halber Stärke.

Schaltungsaufbau

Die Schaltung im Endausbau
Olli Graf - raspithek.de
board_SteckplatineCreative Commons Attribution-NonCommercial-ShareAlike 4.0 International License . loading=
Die Schaltung im Endausbau

Ich benutze hier beide Spannungsschienen des Breadboards. Die untere führt +5V für den Servomotor, auf der oberen liegt das modulierte Signal von Pin 15 an.

Von letzterem würde ich normalerweise abraten, so lang nicht jedem klar ist, dass dort keine dauerhafte Spannung anliegt, aber für diesen experimentellen Aufbau macht es das Leben etwas einfacher.

LED

Was passiert jetzt beim Ablauf des Programms? Die Leuchtdiode wird zunächst immer heller und nach 2 Sekunden wieder dunkler. Das wiederholt sich so lang, bis das Programm von dir gestoppt wird.

Da mir das zu schnell zu langweilig wurde, erweitere ich die Schaltung um den Piezo Speaker, den ich noch in einer Kiste rumliegen hatte.

Piezo Speaker

Ein Piezo Lautsprecher wird nicht von einem Elektromagneten in Schwingung versetzt. In ihm sitzt ein Piezokristall, der schwingt, wenn eine Spannung anliegt.

Er schwingt unabhängig vom anliegenden PWM-Signal immer mit der eingestellten Frequenz. Wenn du die Frequenz veränderst, erzeugst ein Basssignal, mit höherer Frequenz wird auch der Ton immer höher.

Die letzte Erweiterung der Schaltung ist der Servomotor.

Servomotor

Ein Servomotor ist ein Elektromotor, der präzise Bewegungen oder Positionen steuern kann. Mit ihm kannst du die Arme oder Greifer von Robotern steuern oder bei Flugzeugen die Flügelklappen.

Olli Graf - raspithek.de
servoCreative Commons Attribution-NonCommercial-ShareAlike 4.0 International License . loading=
Servomotor

Im Gehäuse des Servo-Motors befinden sich neben des Motors die Steuerungselektronik und das Getriebe (hier aus Plastik, kann aber auch aus Metall sein). Ein Servo hat üblicherweise drei Anschlüsse: Betriebsspannung (rot) für den Motor, Masse (braun oder schwarz) und das PWM Signal (orange). Mitgeliefert werden üblicherweise Montageschrauben und auf steckbare Verbindungsblätter, mit denen der Motor die Nutzlast bewegen kann.

Die Stellung des Motors wird vom Duty Cycle beeinflusst. Dieser spezielle Motor kann etwa 90° in jede Richtung drehen. Wie ein spezieller Motor angesteuert werden muss, entnimmst du dem Datenblatt, das ist nicht einheitlich geregelt.

Beim Programmstart fährt der Motor zunächst in seine Ausgangsstellung, danach langsam in die maximale Endposition und dann wieder zurück.

Die Schaltung im Endausbau mit LED, Piezo-Speaker und Servomotor
Olli Graf - raspithek.de
schaltung2Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License . loading=
Die Schaltung im Endausbau mit LED, Piezo-Speaker und Servomotor

Test der Schaltung

Jetzt ist es Zeit, die fertige Schaltung mit Strom zu versorgen.

Raspberry Pi 4B

Der Raspberry Pi 4B besitzt zwei PWM Kanäle, die jeweils eine eigene Frequenz haben können. Kanal 0 ist über die Pins 12 und 32 angebunden, Kanal 1 sind die Pins 33 und 35 zugeordnet.

Arduino

Selbstverständlich besitzt auch der Arduino Pins, die ein PWM Signal führen. Sie sind auf dem Board entweder mit „PWM“ oder mit einem Wellensymbol „~“ beschriftet.

Platinenaufdruck auf einem Arduino Uno von AZ-Delivery mit den markierten PWM Pins
Olli Graf - raspithek.de
az-arduino-pwmCreative Commons Attribution-NonCommercial-ShareAlike 4.0 International License . loading=
Platinenaufdruck auf einem Arduino Uno von AZ-Delivery mit den markierten PWM Pins
Platinenaufdruck beim Arduino Uno mit den markierten PWM Pins
Olli Graf - raspithek.de
uno-pwmCreative Commons Attribution-NonCommercial-ShareAlike 4.0 International License . loading=
Platinenaufdruck beim Arduino Uno mit den markierten PWM Pins

Fazit

Es gibt vermutlich noch mehr Aktoren, die ich beispielhaft hätte erwähnen können, aber ich möchte die Stromversorgung des Pico nicht überlasten.

Die Beispiele oben zeigen aber, dass du mit Pulsweitenmodulation eine sehr präzise Steuerung erreichen kannst.

Dies ist der letzte Post des Jahres 2024. Ich wünsche dir und all deinen Lieben einen guten und erfolgreichen Start im nächsten Jahr.

Schreibe einen Kommentar

Creative Commons License
Except where otherwise noted, the content on this site is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
Olli Graf - raspithek.de
WordPress Cookie Hinweis von Real Cookie Banner