Zum Hauptinhalt springen

PWM Signale mit analogWrite()

Mit dem Arduino UNO (oder Leonard) ist es nur möglich, eine Spannung von 0 V oder 5 V zu erzeugen. Ein analoges Signal mit beliebigen Spannungswerten (z.B. 4,3 V) kann nicht direkt ausgegeben werden. Es können jedoch Signale mit einer Pulsweitenmodulation (PWM) erzeugt werden, welche sich in gewisser Weise wie analoge Signale verhalten.

Häufige Anwendungen für PWM Signale sind:

  • Dimmen einer LED.
  • Mit Hilfe eines Kondensators einen analogen Spannungswert erzeugen.
  • Generieren eines Audiosignals.
  • Steuern der Geschwindigkeit eines Gleichstrommotors.
  • Erzeugen modulierter Signale, zum Beispiel für Infrarot-LEDs bei einer Fernbedienung.

PWM-Signal

Bei der Pulsweitenmodulation wird die Spannung abwechselnd an- und ausgeschaltet. Das Verhältnis zwischen der Anzeit tant_\text{an} und der Periodendauer des Signals (also tan+taust_\text{an} + t_\text{aus} ) wird Tastverhältnis nn oder auch duty cycle genannt:

n=tantan+tausn=\frac{t_\text{an}}{t_\text{an} + t_\text{aus}}

Das Tastverhältnis kann nur Werte zwischen 0% und 100% annehmen (siehe folgende Abbildung).

drawing

Zeitlicher Mittelwert

Wird das Tastverhältnis mit dem Maximalwert der Spannung multipliziert, ergibt sich der zeitliche Mittelmittelwert des PWM-Signals. In der obigen Abbildung sind drei Beispiele für ein Tastverhältnis von 20%, 50% und 80% angegeben.

analogWrite()

Arduino stellt die Funktion analogWrite(pinPwm,dutyCycle) zur einfachen Erzeugung von PWM-Signalen bereit. dutyCycle kann in der Funktion Werte zwischen 0 und 255 annehmen, was ein abgestuftes Tastverhältnis zwischen 0% und 100% erzeugt. pinPWM gibt den verwendeten PWM-Pin an.

analogWrite(pinPwm, 150); //  Tastverhältnis  150/255 = 58,8%

Es ist jedoch zu beachten, dass nicht alle Arduino-Pins PWM-Signale erzeugen können. Nur Pins, die mit einer Tilde (~) markierte sind, können PWM-Signale ausgeben.

Dimmen einer LED

Ein schönes Beispiel für die Verwendung von PWM-Signal ist das Dimmen einer LED (Änderung der Helligkeit).

Die Helligkeit einer LED wird nicht, wie man eventuell vermuten könnte, über die angelegte Spannung gesteuert, sondern durch schnelles An- und Ausschalten. Wird eine LED schnell genug an- und ausgeschaltet, so wird dies nicht mehr als Flackern wargenommen, sondern als eine Veränderung in der Lichtintensität also der Helligkeit der LED.

Dieser Effekt wird beim Dimmen einer LED ausgenutzt. Eine LED wird an einen PWM-Pin angeschlossen (Vorwiderstand nicht vergessen) und mit dem Befehl analogWrite() wird ein PWM Signal erzeugt, welches die Helligkeit der LED steuert.

//   Dimmen einer LED mit einem PWM-Signal 
int ledRed = 9; // LED am PWM Pin (~9) (VORWIDERSTAND nicht vergessen)

void setup()
{
pinMode(ledRed, OUTPUT);
}
void loop()
{
// Zum Ändern der LED Helligkeit wird ein PWM-Signal verwendet. Das
// Tastverhältnis des PWM-Signals wird in einer for-Schleife langsam
// von 0 (0%) auf 255 (100%) erhöht und anschließend wieder reduziert.
int helligkeit = 0;
for (helligkeit; helligkeit <= 255; helligkeit++)
{
analogWrite(ledRed, helligkeit); // PWM Signal am LED Pin
delay(4);
}

for (helligkeit; helligkeit > 0; helligkeit--)
{
analogWrite(ledRed, helligkeit); // PWM Signal am LED Pin
delay(4);
}
}
Aufgaben
  1. Mit dem folgenden Befehl wird ein PWM-Signal erzeugt analogWrite(9, 201). Bestimmen Sie das Tastverhältnis des PWM-Signals in Prozent.
  2. Welchen Wert muss der Parameter für das Tastverhältnis in der Funktion analogWrite() annehmen, damit sich ein Tastverhältnis von 80% ergibt.
  3. Schreiben Sie ein Programm, welches per Tastendruck in 6 Stufen die Helligkeit einer LED ändert.
  4. Ergänzen Sie Ihr Programm so, dass die LED beim Erreichen der maximalen Helligkeit zweimal kurz blinkt. Wenn der Taster ein weiteres Mal betätigt wird, geht die LED aus und kann wieder schrittweise in der Helligkeit geändert werden.
  5. Die Helligkeit einer LED soll sich wiederkehrend von Aus auf maximale Helligkeit und anschließende wieder auf Aus ändern (Fading).
  6. Schreiben Sie ein Programm für ein futuristisches Lauflicht mit 6 LEDs (ähnlich dem aus der 80er Jahre Fernsehserie Night Rider). Dabei sollen zu jedem Zeitpunkt immer zwei bis drei LEDs mit verschiedenen Helligkeitswerten leuchten. Die erste LED soll möglichst hell und die nachfolgenden LEDs etwas dunkler leuchten. Hierdurch soll der Effekt entstehen, dass der ersten LED eine Art Leuchtspur folgt. Das Lauflicht soll kontinuierlich hin- und herwandern.