aus RN-Wissen, der freien Wissensdatenbank
(Weitergeleitet von Pwm)
Wechseln zu: Navigation, Suche



Die Pulsweitenmodulation (oft mit PWM abgekürzt) wird vornehmlich zum Ansteuern größerer Lasten wie z.B. Motoren verwendet. Microcontroller haben daher oft bereits spezielle PWM-Ausgänge integriert. Bei der Pulsweitenmodulation werden Impulse mit voller Spannung aber variabler Breite an die Last gesendet. Ein Rechtecksignal mit konstanter Frequenz wird also mit einem bestimmten Tastverhältnis moduliert. Eine PWM ist also charakterisiert durch ihre Frequenz und ihr Tastverhältnis (duty cycle).

Vorteil dieser Ansteuerung ist, dass weniger Leistung verbraucht wird, da nicht permanent eine Eingangsspannung anliegt, die von einer Elektronik auf die gewünschte Motorspannung heruntergeregelt wird, sondern der Motor durch die Breite der Schaltimpulse gesteuert wird.

http://www.roboternetz.de/wiki/uploads/Main/pwm.gif

Diese drei Skizzen demonstrieren, wie ein Motor mit unterschiedlicher Pulsweite in drei verschiedenen Geschwindigkeit geregelt wird. In der Praxis ist die Pulsweite oft in 255 Schritten (8 Bit) und mehr regelbar. Gut zu erkennen ist in der Skizze, dass die eigentliche Grundfrequenz bei der Pulsweitenmodulation nicht verändert wird, sondern lediglich das Verhältnis der Ein- und Ausschaltzeit pro Welle (Parser-Fehler (Unbekannter Fehler): T_\mathrm{on} und Parser-Fehler (Unbekannter Fehler): T_\mathrm{off} ). Die Modulationsfrequenz kann dabei variieren. Oft findet man Anwendungen im Frequenzbereich zwischen mehreren hundert Hertz (z.B. Bremslichter bei Autos) bis in den Bereich von 100 kHz (Schaltregler).

Durch die Pulsweitenmodulation ist es möglich, dass auch Verbraucher mit niedrigeren Nennspannungen an weit höheren Spannungen betrieben werden können. Dadurch, dass man die Pulsweite reduziert, reduziert man die im Mittel am Verbraucher anliegende Spannung bzw. den durch den Verbraucher fliessenden Strom bzw. die vom Verbraucher aufgenommene Leistung. Jedoch kann nicht bei allen Verbrauchern PWM angewandt werden. Dazu muss der Verbraucher eine gewisse Trägheit besitzen und die PWM eine hinreichend hohe Frequenz haben. Eine Leuchtdiode kann durchaus durch Spannungsspitzen oberhalb ihrer Nennspannung zerstört werden.

Für die Durchschnittsspannung gilt

Parser-Fehler (Unbekannter Fehler): \overline{U_\mathrm{pwm}} = U_\mathrm{in} \cdot \frac{t_\mathrm{on}}{t_\mathrm{on}+t_\mathrm{off}} = U_\mathrm{in}\cdot t_\mathrm{on} \cdot f_\mathrm{pwm}

Zu beachten ist, dass es sich hierbei um die mittlere Spannung am Verbraucher handelt. Diese ist nicht unbedingt ausschlaggebend für dessen Leistungsaufnahmen!

Der große Vorteil einer PWM ist, dass die "herabgesetzte" Spannung nicht wie bei herkömmlichen Regelungen am Transistor oder einem Widerstand in Wärme umgesetzt wird. Aber auch in einer PWM-geregelten Schaltung entstehen Verlustleistungen durch die endlichen Widerstände der Schaltelemente wie (Feldeffekt-)Transistoren. Diese Verlustleistung setzt sich aus den Verlusten am on-Widerstand des Schalters und den Umschaltverlusten zusammen. Die Umschaltverluste sind in erster Näherung proportional zur Schaltfrequenz und der Zeit Parser-Fehler (Unbekannter Fehler): t_\mathrm{switch} , die benötigt wird, um zwischen An- und Auszustand umzuschalten. Als Näherung:

Parser-Fehler (Unbekannter Fehler): P_\mathrm{Verl} \approx t_\mathrm{switch} \cdot f_\mathrm{pwm} \cdot U \cdot I + \overline{I^2} \cdot R_\mathrm{on}

Darüber hinaus trägt eine evtl. benötigte Freilaufdiode ebenfalls zu den Verlusten bei.

PWM und induktive Last

Beispielschaltungen, die PWM nutzen, findet man unter Getriebemotoren Ansteuerung. Auch bei Schrittmotoren macht man sich diese Technik bei modernen Schaltkreisen und Steuerungen zunutze. Hier bezeichnet man sie oft auch als Chopper-Regelung, was letztlich aber sehr ähnlich ist. Induktive Lasten sind vor allem Motoren und Elektromagneten. Teilweise werden auch zusätzliche Induktivitäten vor eine Last (z.B. LED, Lüfter) geschaltet. Die Schaltung ist dann ähnlich einem vereinfachten Schaltnetzteil.

Bei induktiven Lasten wie einem Motor ist zusätzlich darauf zu achten, dass während der off-Zeit der Strom durch die Last weiterfließen kann. Dazu wird der Last eine so genannte Freilaufdiode parallel geschaltet. Ohne eine Freilaufdiode würden beim Abschalten Spannungsspitzen durch die Induktionsspannung entstehen, die zusätzlich Probleme bereiten und die Schaltung sogar schädigen können.

Durch die Induktivität kann sich der Strom nicht sofort ändern, sondern steigt in der Anphase an und fällt in der Ausphase wieder ab. Der Strom in der Ausphase fließt über die Freilaufdiode. Dadurch wird der mittlere Strom durch die Last größer als der mittlere Strom der aus der Spannungsquelle entnommen wird. Wenn die PWM-Frequenz genügend hoch ist, fällt der Strom dabei nicht wieder auf Null. In diesem Fall muß man auf die Geschwindigkeit der Freilaufdiode achten. Oft benutzt man daher Schottkydioden, die auch eine niedrige Flussspannung haben.

Wenn die Frequenz hinreichend hoch ist, schwankt der Strom nur gering um den mittleren Strom. Der mittlere Strom wird dabei näherungsweise von der mittleren Spannung bestimmt.

Beispiel
Wenn die Spannung Parser-Fehler (Unbekannter Fehler): U_\mathrm{in} = 12V und die Pulsweite genau 50% beträgt, so bedeutet das, dass der Motor nur für die halbe Zeit mit der Spannung versorgt wird. Dies wäre vergleichbar mit dem Fall, dass der Motor für die volle Zeit mit einer kontinuierlichen Gleichspannung von 6V betrieben würde.

PWM und ohmsche Last

Möchte man einen ohmschen Verbraucher an einer höheren Spannung als seiner Nennspannung betreiben, dann ist das über eine PWM möglich, wenn der Verbraucher hinreichend träge ist im Vergleich zur PWM-Periode. Die ist etwa für Glüh- oder Heizfäden der Fall.

Bei ohmscher Last wird man also wie bei induktiver Last (Motor) die Leistung so einstellen wollen, wie sie bei Nennspannung auftritt. Für die PWM-Spannung bedeutet dies, dass ihr Effektivwert gerade der Nennspannung des Verbrauchers entsprechen soll. Daher muss gelten:

Parser-Fehler (Unbekannter Fehler): t_\mathrm{on} \cdot (U_\mathrm{in}-U_\mathrm{Tr})^2 \,=\, (t_\mathrm{on}+t_\mathrm{off}) \cdot U_\mathrm{eff}^2

Dabei bezeichnet UTr die Spannung, die am Transistor abfällt. Damit gilt für das Tastverhältnis (duty cycle) der PWM:

Parser-Fehler (Unbekannter Fehler): \mathrm{duty} \,=\, \frac{t_\mathrm{on}}{t_\mathrm{on}+t_\mathrm{off}} \,=\, \left(\frac{U_\mathrm{eff}}{U_\mathrm{in}-U_\mathrm{Tr}}\right)^2

Die mittlere Spannung an der Last, wie man sie zum Beispiel mit einem Voltmeter angezeigt bekommt, ist

Parser-Fehler (Unbekannter Fehler): \overline{U} = \frac{U_\mathrm{eff}^2}{U_\mathrm{in}-U_\mathrm{Tr}}

Je höher die Eingangsspannung, desto kleiner ist also die Spannung, die das Voltmeter (auf "Gleichspannung "bzw. "DC" eingestellt) anzeigt!

Beispiel
Ein Glühbirnchen mit einer Nennspannung von 6.3V soll an einer Spannung von 10V betrieben werden. Als Schalter dient ein npn-Transistor wie BC517. Es ergibt sich duty = 0.46 = 46% und ein DC-Voltmeter zeigt eine Spannung von ca. 4.25 Volt an. Bei der Rechnung wurde ein Spannungsabfall von 0.7 Volt über der Collector-Emitter-Strecke des Transistors angenommen.

PWM bei LEDs

LEDs haben eine stark nichtlineare Kennline. Sie vertragen zwar kurzzeitig Ströme bis zum etwa 10 fachen des Nennstromes, aber dennoch darf die Spannung auch kurzzeitig nicht wesentlich höher sein als im Normalbetrieb. Man darf daher auch bei der PWM Steuerung nicht auf einen Vorwiderstand (oder Ersatzweise eine Induktivität und Freilaufdiode) verzichten. Die Helligkeit der LEDs hängt im wesenlichen vom mittleren Strom ab. Man hat also nur dann weniger Verlustleistung als bei einer linearen Ansteuerung, wenn man eine Induktivität und Freilaufdiode nutzt. Wegen des einfachen Aufbaus ist die PWM Regelung von LEDs mit Vorwiderstand dennoch sinnvoll.

PWM als D/A Wandler

Mit einem Tiefpassfilter (z.B. RC Glied) kann ein PWM-Ausgang auch als einfacher, langsamer Digital-Analog-Wandler benutzt werden. Meistens sollte die PWM-Frequenz hier möglichst hoch sein. Die Auslegung des Tiefpaßfilters ist meistens so, dass die restliche Wechselspannung kleiner ist als ein LSB-Schritt wird. Für die Anwendung als 8 Bit D/A sollte also die Amplitude weniger als 1/256 sein. Für ein einfaches RC Glied muss die Grenzfrequenz dazu unter 1/128 der PWM Frequenz liegen. Besonders für höhere Auflösung werden oft Filter höherer Ordnung gebraucht, z.B. als aktiven Tiefpass 2.Ordnung mit einem Operationsverstärker. Damit hat man auch gleich einen belastbaren Ausgang. Die Genauigkeit als D/A Wandler ist begrenzt durch die Stabilität der Spannung mit der das PWM Signal erzeugt wird und Nichtlinearitäten der Ausgänge. Vom Prinzip her ist die Wandlung monoton - d.h. ein höherer PWM Wert erzeugt auch immer ein höhere Spannung am Ausgang.

Dieser Artikel ist noch lange nicht vollständig. Der Auto/Initiator hofft das sich weitere User am Ausbau des Artikels beteiligen.

Das Ergänzen ist also ausdrücklich gewünscht! Besonders folgende Dinge würden noch fehlen:

{{{1}}}


PWM per Software

Um eine PWM in Software nachzubilden, braucht man ein paar ganzzahlige Variablen sowie eine Zeitbasis, die es erlaubt, die PWM-Routine in regelmäßigen Zeitabständen (Ticks) aufzurufen:

max
Gibt die Auflösung der PWM an. Für max=100 hat die PWM eine Auflösung von 1% und es können 101 verschiedene duty cycle eingestellt werden (von 0 bis 100)
duty
Codiert den duty cycle; kann Werte von 0..max annehmen. Ein Wert von 0 entspricht 0%, ein Wert von max entspricht 100%.
tick
Eine Variable, die zu jedem Tick enhöht wird. Sie entspricht dem Timer-Wert bei einer Hardware-PWM.
pwm
Der Ausgabewert. Ist entweder 0 oder 1.

Der Code ist als Pseudocode angegeben und sollte problemlos zu verstehen sein

# tick um 1 erhöhen und Überlauf beim Erreichen von max (modulo max)

tick := tick + 1

IF tick >= max
THEN
   tick := 0
END IF

# tick gegen duty vergleichen und pwm entsprechend setzen

IF tick < duty
THEN
   pwm := 1
ELSE
   pwm := 0
END IF

und als C-Code

unsigned int tick,duty=0;
tick++;
if (tick > max)
{
tick=0;
}
//PWM mit duty vergleichen und ggf. PWM an/aus schalten
if(tick < duty)
{
PORTB |= _BV(PB1); 
}
else
{
PORTB &= ~ _BV(PB1); 
}

Siehe auch