© prettyboy80/Shutterstock.com
Teil 4: PWM-Signale - scheinbar analoge Signale erzeugen

Die Welt regeln und steuern


Die Helligkeit einer LED oder die Geschwindigkeit eines Motors wird über die angelegte Spannung gesteuert – ein analoges Konzept. Zum Glück können Mikrocontroller pseudo-analoge Spannungen erzeugen: PWM-Signale!

Bereits im letzten Teil dieser Artikelserie haben wir eine analoge Spannung gemessen und zur Steuerung einer Schleife verwendet, mit der wir eine LED blinken ließen. Über ein angeschlossenes Potenziometer konnten wir also steuern, wie schnell die angeschlossene LED blinken sollte. Dabei haben wir aktiv immer wieder die LED ein- und ausgeschaltet und ebenfalls aktiv gewartet, bis die durch das Potenziometer vorgegebene Zeit verstrichen war. Das Ergebnis ist ein Rechtecksignal, wie in Abbildung 1 dargestellt.

image

Abb. 1: Ein Rechtecksignal mit ca. 50 Prozent Duty Cycle

In der Abbildung ist ein Rechtecksignal dargestellt, bei dem für ca. 50 Prozent einer Schwingungsperiode 0 Volt anliegen und ca. 50 Prozent der Zeit 5 Volt. Da der Wechsel zwischen Ein- und Ausschalten der LED bedingt durch die Warteschleife relativ lange dauerte, konnten wir das Blinken der LED gut sehen. Was aber passiert, wenn die Schwingungsperiode sehr viel kürzer wird, wenn also im Bruchteil einer Sekunde die LED immer wieder ein- und ausgeschaltet wird? Dann können wir das Ergebnis nicht mehr als Blinken wahrnehmen. Allerdings sehen wir dennoch einen Effekt: Die LED wird heller oder dunkler.

Moderne Mikrocontroller unterstützen uns natürlich bei der Erzeugung solcher Rechtecksignale. Der Code muss also nicht aktiv warten und den Ausgangspin toggeln. Stattdessen können wir einfach das PWM-Modul des Mikrocontrollers entsprechend konfigurieren und erhalten unser PWM-Signal ganz automatisch. Ein PWM-Signal ist eine besondere Art von Rechtecksignal. Die Periodendauer wird durch eines der Timermodule, nämlich Timer2, des Mikrocontrollers gesteuert. Das schauen wir uns jetzt nur sehr oberflächlich an. Wichtig ist momentan lediglich, dass die Periode sehr kurz ist und wir viele, viele Schwingungen pro Sekunde erhalten. Die Periode beschreibt dabei keineswegs die Frequenz unseres Rechtecksignals, sondern die Dauer, die wir für einen kompletten Schwingungsdurchlauf benötigen.

Zusätzlich stellen wir noch den so genannten Duty Cycle ein. Dieser Wert beschreibt, wie viel Prozent einer kompletten Rechteckschwingung das Signal auf High (= + 5 Volt) stehen soll. Den Rest der Zeit steht es dann entsprechend auf Low (= 0 V). Das Signal in Abbildung 1 hat einen Duty Cycle von ca. 50 Prozent, das Signal in Abbildung 2 von 0 Prozent und das Signal in Abbildung 3 hat einen Duty Cycle von 100 Prozent.

image

Abb. 2: Ein Rechtecksignal mit 0 Prozent Duty Cycle

image

Abb. 3: Ein Rechtecksignal mit 100 Prozent Duty Cycle

Wir können uns das Ganze also wie folgt vorstellen: Zu Beginn einer Schwingung wird das Signal so lange auf + 5 V gesetzt, bis der Duty-Cycle-Anteil der Periodendauer abgelaufen ist. Dann wird das Signal auf 0 V gesetzt, bis die Periodendauer komplett abgelaufen ist. Danach beginnt es wieder von vorne. Im ersten Extremfall – Duty Cycle 0 Prozent – steht das Signal auf 0 V und bleibt auch bei diesem Wert. Im anderen Extremfall (Duty Cycle 100 Prozent) steht das Signal auf 5 V und bleibt bei diesem Wert. Bei jedem anderen Duty-Cycle-Wert liegen 5 V eben für den durch den Duty Cycle beschriebenen Anteil der Periodendauer an.

Im Ergebnis liegt damit am Verbraucher, in unserem Fall der LED und dem Vorwiderstand, eine effektive Spannung zwischen 0 V und 5 V an. Bei einem Duty Cycle von 50 Prozent entspricht diese effektive Spannung 2,5 V. Abbildung 4 zeigt PWM-Signale mit gleicher Periodendauer und verschiedenen Duty Cycles.

image

Abb. 4: PWM-Signale mit gleicher Periodendauer und verschiedenen Duty Cycles

Die Schaltung

Wir verwenden dieselbe Schaltung wie im letzten Artikel (Abb. 5 und 6). Es wird wieder ein 470-Ohm-Potenziometer an RA0 angeschlossen. An RC2 betreiben wir eine LED mit einem Vorwiderstand.

image

Abb. 5: Die Schaltung

image

Abb. 6: Aufbauvorschlag

Das Listing in Assembler und C

Listing 1 zeigt, wie man ein PWM-Signal am Pin RC2 in Assembler konfiguriert. Das Programm liest zunächst den Wert des Potenziometers, wie im vorherigen Teil dieser Artikelserie beschrieben, und verwendet diesen gelesenen 10-Bit-Wert dann direkt als Duty Cycle für das PWM-Signal. Praktischerweise ist der Duty Cycle ebenfalls genau 10 Bit breit.

image

Kleiner Hinweis: Anders als im C-Programm wird hier das Ergebnis des A/D-Wandlers linksbündig gelesen. Das wird über Bit 7 des Registers ADCON2 gesteuert. Im Assembler ist es auf diese Weise einfacher, den Wert danach zu bearbeiten, da die höherwertigen Bits des Duty Cycles in einem zusammenhängenden Byte definiert werden. Wir können nun also einfach den Wert von ADRESH als höherwertiges Byte des Duty Cycles verwenden und müssen lediglich die beiden niederwertigen Bits (Bits 6 und 7) aus ADRESL speziell behandeln.

Im C-Code ist dies...

Neugierig geworden? Wir haben diese Angebote für dich:

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang