Welt der Fertigung
Sie sind hier: Startseite » Suchen » Lernen » Arduino

Arduino: Arbeiten mit der Pulsweitenmodulation

Eine interessante Technik im Blick

Die Pulsweitenmodulation – kurz PWM – ist eine interessante Technik, um Servos zu positionieren, LEDs in unterschiedlicher Helligkeit erstrahlen zu lassen oder die Drehzahl von Motoren zu beeinflussen. Mit dem Arduino ist die Umsetzung kein Hexenwerk.

In der Welt der Digitaltechnik gibt es nur die Zustände 0 und 1. Ein Signal ist demnach gesetzt oder eben nicht. Entsprechend ist ein Aktor aktiv oder nicht und eine LED hell oder dunkel. Der Wechsel von 0 auf 1 bedeutet eine sofortige Verfügbarkeit der vollen Leistung, weshalb der Aktor mit voller Kraft ausfährt und die LED mit maximaler Helligkeit leuchtet.

Nicht immer ist dies gewünscht. Soll beispielsweise eine LED mit geringerer Leuchtkraft einen Status anzeigen, so kann dies automatisiert nur mithilfe eines Kleincomputers erfolgen, der in der Lage ist, ein sogenanntes PWM-Signal (Pulsweitenmodulation) zu erzeugen. Dazu zählt der Arduino, der mehrere Pins besitzt, die in der Lage sind, PWM-Signale auszugeben. Dazu zählen die Pins 3, 5, 6, 9, 10 und 11.

Es ist unbedingt darauf zu achten, dass via PWM-Signal anzusteuernde Geräte, LEDs und Aktoren unbedingt an einen dieser Pins angeschlossen werden, da die anderen Pins kein PWM-Signal ausgeben können. Dies bedeutet, dass an den falschen Pins sofort die volle Leistung zur Verfügung steht und somit etwa eine LED mit maximaler Leuchtkraft arbeitet beziehungsweise unverzüglich verlischt.

Die Digitaltechnik ist demnach eine radikal geradlinige Technik. Ein Pegel ist entweder Low oder High. Genauso wenig, wie ein wenig Schwanger möglich ist, gibt es ein „wenig-Signal“. Entweder ganz oder gar nicht lautet die Devise in der digitalen Welt.

Findige Köpfe haben jedoch eine Lösung entdeckt, wie es möglich wird, eine LED zu dimmen oder einen Motor regelbar laufen zu lassen: Sie variieren die Dauer des High-Signals und legen zudem fest, nach welcher Zeit dieses High-Signal wieder verlöschen muss, respektive, wie lange das Low-Signal dauern darf, bis die Zeit der festgelegten Periodendauer abgelaufen ist und eine neue Periode mit dem Erscheinen des High-Signals zu beginnen hat.

Dieser geniale Kniff erlaubt es nicht nur, LEDs zu dimmen und Motoren regelbar laufen zu lassen, sondern auch Servos derart anzusteuern, dass diese einen bestimmten Winkel einnehmen.

In diesem Zusammenhang ist es wichtig, den Tastgrad korrekt zu bestimmen. Dieser berechnet sich aus folgender Formel:

Dadurch, dass das High-Signal nur eine bestimmte Zeit wirksam ist, hat man ein Werkzeug in der Hand, welches eine Manipulation der Aktoren beziehungsweise LEDs erlaubt. Um sich vorzustellen, wie dies vonstattengeht, genügt es, sich beispielsweise bildlich ein schaukelndes Kind vorzustellen, das von einem Elternteil einen Impuls zur Erhöhung der Schaukelgeschwindigkeit bekommt. Ist der Impuls kurz, so wird die Schaukel nur eine moderate Schaukelgeschwindigkeit erreichen. Je länger der Impuls anhält, desto mehr Energie geht auf die Schaukel über und desto höher wird deren Geschwindigkeit beziehungsweise die dadurch erreichte Höhe sein.

Sinnvollerweise wird das Elternteil zunächst mit einem kurzen Impuls starten und diesen anschließend immer mehr steigern, sodass aus einem anfänglichen kurzen Pendeln ein schwungvolles Schaukeln wird.

In ähnlicher Weise kann man sich das Dimmen einer LED vorstellen. Ein nur kurz aktiver High-Impuls wird zu einer nur schwach leuchtenden LED führen. Je länger die Pulsdauer, desto heller leuchtet die LED. Dieser Effekt ist der Trägheit der LED geschuldet, die eine gewisse Zeit benötigt, um ihre volle Leuchtkraft zu erreichen. Ist die Pulsdauer kurz, so hat die LED ihr Leucht-Maximum noch nicht erreicht, was der Grund für den Dimm-Effekt ist.

Eine passende Programmierung vorausgesetzt, kann ein Arduino mühelos LEDs dimmen. Dazu werden vom Arduino in rascher Folge High-Impulse mit ansteigender beziehungsweise absteigender Pulsdauer erzeugt, was dank der Trägheit des menschlichen Auges den Eindruck einer gedimmten LED hervorruft.

Ein diesbezügliches Programm könnte beispielsweise wie folgt aussehen:

Hinweise zum Programm:

1. Globale Variablen stehen stets am Programmanfang!

2. Beachten, dass am Arduino nur die Pins 3, 5, 6, 9, 10 und 11 PWM-Signale ausgeben können.

3. Abfragen von Variablen erfolgt über ein doppeltes Ist-gleich-Zeichen (==), die Zuweisung eines Werts zu einer Variablen hingegen durch ein einfaches Ist-gleich-Zeichen (=).

4. Die geschweiften Klammern ›{‹ und ›}‹ bündeln zusammengehörenden Programmcode.

5. Der Befehl ›analogWrite‹ ist zwingend nötig, um ein PWM-Signal auszugeben, was beim Befehl ›digitalWrite‹ nicht der Fall ist.

6. Der Pausenbefehl ›delay(5)‹ am Ende der Endlosschleife ist zwingend nötig, da sonst der Dimmeffekt nicht erkennbar ist. Grund: Der Arduino arbeitet die Schleife zu schnell für das menschliche Auge ab.

Wichtig: Befehle müssen stets mit einem Semikolon (;) abgeschlossen werden!

Sketch-Variante:

Das obige Programm kann noch weiter verkürzt werden.

// Variablendeklaration
int i=0; // Zähler
int H_Wert=1;//Rechenvariable

void setup() {
pinMode(9, OUTPUT); // PWM-Ausgabe-Pin
}

void loop() {
// Helligkeitsaenderung
if (i==255){
H_Wert=-1;
} // auf Abdunkeln schalten
else {
if (i==0)
{
H_Wert=1;
}
} // auf Aufhellen schalten
i=i+H_Wert;
analogWrite(9,i);
delay(5); // Pause nötig, um Helligkeitsänderung zu erkennen!
}

Diese Variante verändert lediglich die Rechenvariable, wodurch das Programm weniger umfangreich ausfällt.

Schaltungsaufbau:

Die Schaltung stellt sich wie folgt dar:

Der Aufbau der Schaltung ist recht einfach:

In der Realität sieht der Aufbau wie folgt aus:

Wichtig ist, dass darauf geachtet wird, die Kabel in die richtigen Pins des Arduino zu stecken. PWM-Signale können nur diejenigen Pins ausgeben, die das Tilde-Zeichen (~) besitzen.

War dieser Artikel für Sie hilfreich?

Bitte bewerten Sie diese Seite durch Klick auf die Symbole.

Zugriffe heute: 2 - gesamt: 6731.