PWM - Pulsweitenmodulation
|
Funktionsschema PWM:
Bisher haben wir die Ausgänge des Atmega als Schalter benutzt um z.B. eine LED an- oder auszuschalten. Um aber jetzt zum Beispiel eine LED anzusteuern, die unterschiedl. Farben abstrahlen kann (RGB-LED's), benötigen wir unterschiedl. Ausgangsspannungen am jeweiligen PIN. Die bisher verwendeten Programmstrukturen sind für diesen Anwendungsfall denkbar ungeeignet, weil wir wie gesagt einen Ausgang nur an- oder ausschalten können. Wie kann man jetzt trotzdem eine andere Spannung als 5 oder 0 Volt am Ausgang erreichen ? Die Antwort darauf ist die Pulsweitenmodulation.
Wenn wir einen Ausgang des Mikrocontrollers in schnellen Abständen ein- und ausschalten, erhalten wir eine Rechteckspannung.
Diese Rechteckspannung hat einen geometrischen Mittelwert. Durch eine Veränderung der Pulsbreite, können wir diesen geometrischen Mittelwert verändern. Dieser Wert ist zwar keine Gleichspannung, trotzdem würde sich die Helligkeit einer LED bei versch. Pulsbreiten ändern. Die LED leuchtet zwar für einen Bruchteil von einer Sekunde mit der vollen Helligkeit, aber dieses Flackern wird von unserem Auge als heller oder dunkler interpretiert, je nach Größe der Pulsbreite.
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Programmierung der PWM :
Die einfachste Methode zur Programmierung der PWM ist die Verwendung des 16-bit Timers. Dieser muss im PWM-Modus betrieben werden, wofür einige spezielle Bits in den Registern des Timers gesetzt werden müssen.
In dem Register TCCR1A haben wir verschiedene Einstellmöglichkeiten, welche in nachfolgenden Tabellen dargestellt sind.
Im später folgendem Beispielprogramm habe ich mich für die 8-Bit und invertierende PWM entschieden. Der entsprechende Befehl im AVR-Studio würde demnach wie folgt aussehen:
TCCR1A
= 0b11000001 Es folgen noch Einstellungen in einem zweiten Register, dem TCCR1B.
Hier werden, wie wir es schon vom 8-bit Timer kennen nur Vorteiler gesetzt, um eine bestimmte Frequenz einzustellen. Die Werte für den Vorteiler können aus folgender Tabelle entnommen werden:
Wenn wir den Timer nun mit dem Vorteiler 1024 laufen lassen wollen, lautet der Befehl im AVR-Studio so:
TCCR1B = 0b00000101;
Der 16-bit Timer beginnt nun zu zählen bis zur Obergrenze und wieder zurück.
Der 16-bit Timer im PWM-Modus zählt nun von 0 bis zur Obergrenze und wieder zurück. Die Obergrenze hängt davon ab, in welchem Modus der Timer betrieben wird ( 8,9 oder 10 Bit ). Die Einstellung der Auflösung erfolgte ja schon im ersten Schritt ( TCCR1A = 0b11000001; ) Dieser Zusammenhang wird in folgender Tabelle noch einmal verdeutlicht:
Als letzten Schritt müssen wir noch den Vergleichswert für den Timer setzen. Dies geschieht auch hier ähnlich wie beim 8-bit Timer:
OCR1A = 200; // 200 hier nur als Beispiel
Die Pulsbreite hängt nun von dem Vergleichswert ab. Wann der Puls ausgelöst wird und wie das mit dem Vergleichswert zusammenhängt, wird aus den folgenden Grafiken deutlich:
Man kann erkennen, dass der Puls ausgelöst wird, wenn der Zähler den Vergleichswert übersteigt. Genauso wird der Puls wieder abgeschaltet, wenn der Zähler den Vergleichswert unterschreitet. Je größer der Vergleichswert, desto kleiner der Puls.
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Schematische Darstellung der Pulsweitenmodulation :
Die PWM als PAP: hier klicken
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Quelltext:
Einfache Umsetzung in den Quelltext wie oben beschrieben. hier klicken
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Erstes Projekt mit PWM:
Es soll eine der auf dem myAVR-Board befindlichen LED's gedimmt werden. Das Dimmen soll mit Hilfe eines Potentiometers geschehen. Die Boardspannung von 5 V, soll mit Hilfe des AD-Wandlers in Zahlenwerte umgewandelt werden. Diese Zahlenwerte stellen nun den Vergleichswert für das Register OCR1 dar. Somit wird die LED dem entsprechendem Zahlenwert in ihrer Helligkeit beeinflusst. Das Pulsieren der LED wird durch die Trägheit des menschlichen Auges als heller oder dunkler interpretiert.
Programmablaufplan (PAP): hier klicken
Quelltext: hier klicken
komplettes AVR-Studio Projekt hier klicken
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
(Autor: Christian Scholzen) |