Pulsweitenmodulation (PWM)

By | 26. August 2017

Bei der Pulsweitenmodulation (engl. Pulse Width Modulation, abgekürzt PWM) wird das Verhältnis zwischen der Einschaltzeit und Periodendauer eines Rechtecksignals bei fester Grundfrequenz variiert. Dazu nimmt man ein Rechtecksignal mit einer festen Frequenz und variiert die Breite der jeweiligen Pulse.

Den Abstand zweier aufeinander folgender Pulse bezeichnet man als Periodendauer, die Breite des aktiven Pulses (T1) als Pulsweite. Die mittlere Spannung, welche an dem PWM-modulierten Pin anliegt, ist also gegeben durch das Verhältnis von T1 zu (T1+T2).

Das Verhältnis von Pulsweite zu Periodendauer bezeichnet man auch als “Duty Cycle” (also die Zeit, in der der Pin “im Dienst” ist). Ist T1 also nur halb so breit wie die Periodendauer T, dann hat man nur 50% der Signalspannung im Mittel zur Verfügung. Damit lassen sich verschiedenste Steuerungsvorgänge realisieren.

Praktische Umsetzung

Sechs der digitalen Kanäle auf dem Arduino-Boards sind nicht nur digital, sondern auch analog ansteuerbar. Sie sind mit dem Aufdruck PWM und einer Tilde gekennzeichnet (Kanal 3, 5, 6, 9, 10, 11).

PWM (Pulse Width Modulation) bedeutet, dass kein konstantes Signal an dem Kanal anliegt, sondern dass dieser Kanal kontinuierlich an- und abgeschalten wird. Im Programm übergibt man einen Wert zwischen 0 und 255 an den Kanal. 0 entspricht dem GND (Minus-Pol), 255 entspricht 5V+.

Damit kann man also an einem Pin Spannungswerte zwischen 5 und 5V ausgeben. Damit lassen sich verschiedenste Steuerungen realisieren. Beispielsweise die Drehzahlen von Motoren steuern oder Helligkeit von LEDs dimmen.

In der Praxis wird eine PWM Steuerung  dadurch realisiert, in dem der jeweilige Pin als OUTPUT Pin definiert wird, und mit dem Befehl analogWrite den Duty Cycle Wert festzulegen. Dieser definiert dann, die Breite des High-Signals. Ein Duty Cycle von  25% entspricht dabei dem Wert von 63, 50%  dem Wert von 127 und  75% dem Wert von 191.

Im nachfolgenden Beispiel ist dieses Verfahren zur Leuchtstärken-Regelung an einer LED eingesetzt und soll die praktische Anwendung erläutern.

  • Im Gegensatz zur digitalen Ausgabe, muss ein analog angesprochener Kanal nicht im Setup deklariert werden.
  • Der Befehl analogWrite erhält als Parameter den Pin, an dem die LED angeschlossen ist und den Wert (0 – 255), wie hell die LED leuchten soll.

Um einen bestimmten Tastgrad (=DutyCycle)zu erhalten, muss der zugehörige PWM-Wert berechnet werden. Dazu ist folgender Zusammenhang zu berücksichtigen:

PWM Signal-Erzeugung mit dem Arduino

Aus den obigen Ausführungen folgt, dass ein PWM-Signal (= Rechtecksignal mit konstanter Frequenz und variabler Pulsdauer) dadurch erzeugt werden kann, in dem ein digitaler Ausgangs-Pin für eine bestimmte Zeit an und ab geschaltet wird.

Entscheidend ist dabei die konstante Frequenz, die für eine obere Zeitgrenze sorgt.

Mit einem Arduino soll ein PWM Signal erzeugt werden und damit die Geschwindigkeit eines Motors kontrolliert werden.

  • Die gesamte Impulsdauer T soll 1000ms betragen
  • Die Pulsbreite T2 wird dabei über ein Potentiometer eingestellt
  • Die Potentiometer Werte zwischen 0-5V werden in Werte zwischen 0 und 1023 übersetzt.
  • Damit lässt sich die DutyCycle Zeit über eine einfache Subtraktion berechnen.

Über das Potentiometer wird eine Spannung zwischen 0 und 5V eingelesen und in ein digitales Signal zwischen 0 und 1023 umgewandelt.

5V  entspricht  1023  =  1000 µs

0V  entspricht 0 = 0 µs

x Volt entsprechen dann

       x * (1023 / 5 ) µs

Werden beispielsweise am Poti 3V eingelesen, dann entspricht das dem Wert 3*(1023/5) = 613,8 µs.

 

Das ergibt folgende Zeit-Werte:
T2 [DelayTime Low]: = 613
T1 [DelayTime High]: = 1000– T2 = 387

Das PWM Signal wird somit erzeugt, in dem der PWM-Pin für T1 µs eingeschaltet und für T2 µs ausgeschaltet wird. Was zu einem Duty Cycle von 38,7% führt.