In diesem Projekt werden wir eine der Funktionen von ATmega32A verwenden, um die Helligkeit von 1-Watt-LED anzupassen. Die Methode zum Einstellen der LED-Geschwindigkeit ist PWM (Pulse Width Modulation). In diesem AVM Microcontroller PWM-Tutorial werden das PWM-Konzept und die Erzeugung von PWM ausführlich erläutert (Sie können auch diese einfache PWM-Generatorschaltung überprüfen). Betrachten Sie eine einfache Schaltung wie in der Abbildung gezeigt.
Wenn nun der Schalter in der obigen Abbildung über einen bestimmten Zeitraum kontinuierlich geschlossen ist, leuchtet die Glühlampe während dieser Zeit kontinuierlich auf. Wenn der Schalter 8 ms lang geschlossen und über einen Zyklus von 10 ms 2 ms lang geöffnet ist, leuchtet die Lampe nur in der Zeit von 8 ms. Jetzt ist das durchschnittliche Terminal über einen Zeitraum von 10 ms = Einschaltzeit / (Einschaltzeit + Ausschaltzeit), dies wird als Arbeitszyklus bezeichnet und beträgt 80% (8 / (8 + 2)), also der Durchschnitt Die Ausgangsspannung beträgt 80% der Batteriespannung.
Im zweiten Fall wird der Schalter für 5 ms geschlossen und über einen Zeitraum von 10 ms für 5 ms geöffnet, sodass die durchschnittliche Klemmenspannung am Ausgang 50% der Batteriespannung beträgt. Angenommen, die Batteriespannung beträgt 5 V und das Tastverhältnis beträgt 50%, sodass die durchschnittliche Klemmenspannung 2,5 V beträgt.
Im dritten Fall beträgt das Tastverhältnis 20% und die durchschnittliche Klemmenspannung 20% der Batteriespannung.
In ATMEGA32A haben wir vier PWM-Kanäle, nämlich OC0, OC1A, OC1B und OC2. Hier verwenden wir den OC0-PWM-Kanal, um die Helligkeit der LED zu variieren.
Erforderliche Komponenten
Hardware:
ATmega32 Mikrocontroller
Stromversorgung (5V)
AVR-ISP-Programmierer
100 uF Kondensator, 1 Watt LED
TIP127 Transistor
Knöpfe (2 Stück)
100nF (104) Kondensator (2 Stück), 100Ω- und 1kΩ-Widerstände (2 Stück).
Software:
Atmel Studio 6.1
Progisp oder Flash Magic
Schaltplan und Arbeitserklärung
Die obige Abbildung zeigt den Schaltplan des LED-Dimmers mit AVR-Mikrocontroller (Sie können auch diese einfache LED-Dimmerschaltung überprüfen).
In ATmega haben wir für vier PWM-Kanäle vier Pins festgelegt. Wir können die PWM-Ausgabe nur an diesen Pins vornehmen. Da wir PWM0 verwenden sollten wir PWM - Signal an OC0 Stift (PORTB 3 nehmen rd PIN). Wie in der Abbildung gezeigt, verbinden wir die Basis des Transistors mit dem OC0-Pin, um die Power-LED anzusteuern. Hier ist eine andere Sache über vier PWM-Kanäle, zwei sind 8-Bit-PWM-Kanäle. Wir werden hier einen 8-Bit-PWM-Kanal verwenden.
An jede der Tasten ist ein Kondensator angeschlossen, um ein Aufprallen zu vermeiden. Immer wenn eine Taste gedrückt wird, gibt es ein Geräusch am Pin. Obwohl sich dieses Rauschen in Millisekunden stabilisiert. Für einen Regler wirken die scharfen Spitzen vor der Stabilisierung als Auslöser. Dieser Effekt kann entweder durch Software oder Hardware beseitigt werden, damit das Programm einfach ist. Wir verwenden die Hardwaremethode durch Hinzufügen eines Entprellkondensators.
Die Kondensatoren heben den Effekt des Aufpralls von Tasten auf.
In ATMEGA gibt es verschiedene Möglichkeiten, PWM zu generieren:
1. Phasenkorrekte PWM
2. Schnelle PWM
Hier werden wir alles einfach halten, also werden wir die FAST PWM-Methode verwenden, um das PWM-Signal zu erzeugen.
Um zuerst die Frequenz der PWM zu wählen, hängt dies normalerweise von der Anwendung ab. Für eine LED würde jede Frequenz größer als 50 Hz ausreichen. Aus diesem Grund wählen wir die Zähleruhr 1MHZ. Wir wählen also kein Prescalar. Ein Prescalar ist eine Zahl, die so ausgewählt wird, dass eine geringere Zähleruhr erhalten wird. Wenn der Oszillatortakt beispielsweise 8 MHz beträgt, können wir einen Prescalar von '8' wählen, um einen 1-MHz-Takt für den Zähler zu erhalten. Der Prescalar wird basierend auf der Frequenz ausgewählt. Wenn wir mehr Zeitperiodenimpulse wollen, müssen wir einen höheren Prescalar wählen.
Um nun die SCHNELLE PWM des 50-Hz-Takts aus dem ATMEGA herauszuholen, müssen die entsprechenden Bits im Register „ TCCR0 “ aktiviert werden. Dies ist das einzige Register, das wir brauchen, um 8-Bit-FAST-PWM zu erhalten.
Hier, 1. CS00, CS01, CS02 (GELB) - Wählen Sie den Prescalar für die Auswahl der Zähleruhr. Die Tabelle für das entsprechende Prescalar ist in der folgenden Tabelle aufgeführt. Also zur Vorskalierung eins (Oszillatortakt = Zählertakt).
also CS00 = 1, andere zwei Bits sind Null.
2. WGM01 und WGM00 werden geändert, um Wellenformgenerierungsmodi basierend auf der folgenden Tabelle für schnelles PWM auszuwählen. Wir haben WGM00 = 1 und WGM01 = 1;
3. Jetzt wissen wir, dass PWM ein Signal mit unterschiedlichem Tastverhältnis oder unterschiedlichen Ein- und Ausschaltzeiten ist. Bisher haben wir Frequenz und Art der PWM gewählt. Das Hauptthema dieses Projekts liegt in diesem Abschnitt. Um ein anderes Tastverhältnis zu erhalten, wählen wir einen Wert zwischen 0 und 255 (2 ^ 8 wegen 8 Bit). Angenommen, wir wählen einen Wert 180, da der Zähler von 0 an zählt und den Wert 180 erreicht, kann die Ausgangsantwort ausgelöst werden. Dieser Trigger kann invertierend oder nicht invertierend sein. Das heißt, die Ausgabe kann angewiesen werden, beim Erreichen der Zählung nach oben gezogen zu werden, oder sie kann angewiesen werden, bei Erreichen der Zählung nach unten gezogen zu werden.
Diese Auswahl des Hoch- oder Herunterziehens wird durch die Bits CM00 und CM01 gewählt.
Wie in der Tabelle gezeigt, bleibt die Ausgabe beim Vergleich hoch und die Ausgabe bleibt bis zum Maximalwert hoch (wie in der Abbildung unten gezeigt). Dazu müssen wir den invertierenden Modus wählen, also COM00 = 1; COM01 = 1.
Wie in der folgenden Abbildung gezeigt, ist OCR0 (Output Compare Register 0) das Byte, in dem der vom Benutzer gewählte Wert gespeichert wird. Wenn wir also OCR0 = 180 ändern, löst der Controller die Änderung (hoch) aus, wenn der Zähler 180 von 0 erreicht.
Um nun die Helligkeit der LED zu variieren, müssen wir das DUTY RATIO des PWM-Signals ändern. Um das Tastverhältnis zu ändern, müssen wir den OCR0-Wert ändern. Wenn wir diesen Wert von OCR0 ändern, benötigt der Zähler eine andere Zeit, um OCR0 zu erreichen. Der Controller zieht den Ausgang also zu unterschiedlichen Zeiten hoch.
Für PWM mit unterschiedlichen Arbeitszyklen müssen wir also den OCR0-Wert ändern.
In der Schaltung haben wir zwei Tasten. Eine Taste dient zum Erhöhen des OCR0-Werts und damit des DUTY RATIO des PWM-Signals, die andere zum Verringern des OCR0-Werts und damit des DUTY RATIO des PWM-Signals.