PWM steht für (engl.) Pulse Width Modulation und heißt eigentlich übersetzt Pulsbreitenmodulation, wird aber auch oft als Pulsweitenmodulation genannt.
In der Robotik stößt man schnell auf diesen Begriff. Spätestens wenn man die Drehgeschwindigkeit eines Motors regeln will oder einen Servo ansteuern möchte.
Nehmen wir mal als Beispiel einen Motor, den wir mit unterschiedlichen Geschwindigkeiten drehen lassen wollen.
Wenn wir das an eine 9 Volt Batterie für zwei Sekunden anschließen (Puls), dreht es mit seiner vollen Geschwindigkeit, die dieser Motor bei bei 9 Volt erreichen kann. Wenn wir das wieder abklemmen (Pause), bleibt der Motor stehen. Wenn wir genauer hinschauen, fällt uns auf, dass der Motor beim Anklemmen nicht sofort die höchste Geschwindigkeit erreicht, sondern fängt an, langsam zu drehen, dann wird er immer schneller und schneller und irgendwann erreicht er seine höchste Geschwindigkeit. Wenn wir den Motor wieder abklemmen, bleibt dieser nicht sofort stehen, sondern dreht immer langsamer und langsamer und irgendwann bleibt er stehen. Das An- und Abklemmen machen wir aber ziemlich langsam und können deswegen diesen Effekt sehen. Wenn wir das z.B. 500 Mal pro Sekunde machen könnten (1ms AN und 1ms AUS), fällt uns dieses Verhalten, mit schneller und langsamer werden, gar nicht auf. Der Motor würde dann permanent mit halber Geschwindigkeit drehen. Würde man den Motor für 1,5ms einschalten und für 0,5ms ausschalten, würde der Motor mit 3/4 seiner maximalen Geschwindigkeit drehen.
Die Dauer, wie lange so ein Ein-Aus-Durchlauf dauert, bezeichnet man als Periode. Die Anzahl der Perioden in einer Sekunde, ist dann die Frequenz. D.h. bei 500 Perioden in der Sekunde, beträgt die Frequenz 500Hz (Hertz).
Die Periodendauer errechnet man so: 1 Sekunde / Frequenz = Periodendauer also 1/500=0,002
D.h. bei einer Frequenz von 500Hz hätten wir eine Periodendauer von 0,002 Sekunden bzw. 2 Millisekunden.
Die Periodendauer ist jetzt bei uns konstant und beträgt 2ms. Mal angenommen, die Pulsdauer ist 1ms lang und dementsprechend würde Pausenzeit auch 1ms dauern. Damit kann man jetzt den Tastgrad ausrechnen. Tastgrad ist ein weiterer wichtiger Wert bei PWM und wird in Prozent angegeben. Dieser wird aus Periodendauer und der Pulsdauer errechnet.
Pulsdauer / Periodendauer = Tastgrad D.h. bei einer Periodendauer von 2ms und Pulsdauer von 1ms, hätten wir einen Tastgrad von 0,5 bzw. 50%
Wenn wir die Pulsdauer auf 1,5ms verlängern, beträgt die Dauer der Pause, nur noch 0,5ms. Also ist es 75% der Periode AN und 25% der Periode AUS. Also Tastgrad = 75%
Wie sieht es jetzt in der Praxis aus? Mit dem Tastgrad können wir jetzt ganz einfach den Mittelwert der Spannung ausrechnen.
Mal angenommen, die Versorgungsspannung beträgt 9V und wir pulsieren damit unseren Motor mit PWM bei einer Frequenz von 500Hz und einem Tastgrad von 75%.
75% von 9Volt = 6,75V (Siehe Grafik oben)
Bei 50% Tastgrad wäre die Spannung dann 4,5 Volt hoch.
Bei 25% dann nur noch 2,25 Volt.
Und was ist mit 100%? 😀 Dann hätten wir einfach eine Gleichspannung von 9V. Wie mein Ausbilder einst sagte (ungefähr): “Die Gleichspannung ist eine pulsierende Spannung, mit einem Tastgrad von 100%!” 😀
Um auch mal ein kleines Beispiel, für Arduino zu machen, kann man das Blink Programm nehmen und eine LED an Pin 11 (PWM Pin) anschließen.
Dann nimmt man das Beispielprogramm “Blink” aus den Beispielen der Arduino IDE. Statt Pin 13, tippt man Pin 11 ein. Die zwei interessanten Stellen, befinden sich im Hauptprogramm void loop(). Nach LED AUS und EIN, sind zwei delays mit je 1000ms angegeben. Dabei ist die LED für eine Sekunde AN und für eine Sekunde AUS. Jetzt löschen wir bei beiden delays die Nullen, sodass die delays nur noch 1ms betragen. Nach der Übertragung des Programmcodes zum Arduino, Blinkt die LED nicht mehr, sondern leuchtet nur noch halb so hell. Naja, eigentlich blinkt die LED schon, nur das passiert 500 mal in der Sekunde und das können wir mit unserem menschlichen Auge nicht sehen.
1 2 3 4 5 6 |
void loop() { digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level) delay(1); // wait for a second digitalWrite(led, LOW); // turn the LED off by making the voltage LOW delay(1); // wait for a second } |
Es gibt aber einen anderen Befehl, damit man ein PWM Signal mit nur einer Zeile erzeugen kann.
1 |
analogWrite(led, 127); |
Der Wert 127 (ca. Hälfte von 255) stellt ein Tastgrad von ca. 50% ein und mit dem Wert 255 haben wir einen Tastgrad von 100% (also Gleichspannung).
Mit dem Wert 191 würde man knapp 75% Tastgrad einstellen.
Bei 5 Volt Versorgungsspannung, sieht der Mittelwert der PWM Spannung an der LED, wie folgt aus
75% = 3,75 Volt
50% = 2,5 Volt
25% = 1,25 Volt
Bei dem Beispielprogramm “Fade”, macht das Programm nichts anderes, als von 0 bis 255 hoch und wieder bis 0 runter zu zählen. Das bewirkt, dass die LED langsam hell wird und dann langsam wieder dunkler 😉
Ich hoffe, ich konnte das mehr oder weniger verständlich beschreiben. Falls es Korrekturen gibt, immer her damit.
Für noch tiefere Einblicke in das Thema, siehe:
Sehr gut erklärt, danke! 🙂
Gerne 🙂
Hallo
Gute Erklärung, Danke.
Mich würde es nur noch interessieren wie sich das ganze verhält wenn mittels eines PWM-Signals eine grössere Last gesteuert wird, wie z.B. ein 230V Motor. Werden da auch die 230V ein und aus geschaltet oder wird da mittels des PWM-Signals ein Phasenanschnitt oder ein FU angesteuert?
Besten Dank.
Hat mir weitergeholfen, vielen Dank!
Danke! Du hast mir in der Physik-Arbeit 10 Punkte gerettet 🙂
Gut gemacht!
Auch für Leute ohne elektrotechnischen Background
gut zu verstehen.
…….und so funktioniert die gesamte Signalsteuerung auf den can Bussen der Steuergeräte hin zum Kombi-Gerät?
Sehr gut erklärt. Danke!
Kleines Fehlerteufelchen am Ende des Artikels:
Müsste der Mittelwert der Spannung bei 50% nicht 2,5V sein?
Etwas verspätet, aber Ja, du hast absolut Recht. Hab’s nachgebessert. Danke 🙂
Danke für die Infos!
Man hätte vielleicht noch hinzufügen können, wie man über PWM Signale übertragen kann:)
Genau eine solche Erklärung habe ich für mein nächstes Projekt gesucht. Danke!
Nach solch einer Erläuterung habe ich im Netz schon lange gesucht.
Nun komme ich mit meinem Projekt endlicch weiter.
Tolle Seite ! 5 Sterne
Ralph