Arduino PWM-Ausgang verbessern


von Prof. Jürgen Plate

Arduino-Analogausgang verbessern

Die Pulsweiten-Modulation (PWM) wird häufig zur Erzeugung analoger Spannungen aus einem digitalen Baustein verwendet. So sind auch die Analogausgänge des Arduino nicht wirklich analog, sondern sie liefern digitale PWM-Signale. Dieses Vorgehen ist einfach und praktisch, solange es keine zu hohe Anforderungen an die Qualität des analogen Signals gibt. Für manche Anwendungen, wie die Helligkeitssteuerung von LEDs oder die Motorsteuerung, ist ein PWM-Signal sogar besser geeignet als ein analoges Signal.

Leider hat PWM auch seine Schwächen. Das Analogsignal eines Digital-Analog-Wandlers sollte im Idealfall eine Welligkeit von weniger als ein LSB aufweisen. Beim PWM-Signal kann das nur über ein nachgeschaltetes Tiefpass-Filter erreicht werden, das, wie im Bild oben gezeigt, aus einem einfachen RC-Glied bestehen kann.

Im Fall eines PWM-Signals von beispielsweise fünf kHz wäre ein Tiefpassfilter mit einer Grenzfrequenz von ca. 1,2 Hz erforderlich. Die Impedanz des Spannungsausgangs wird durch den Widerstand des Filters bestimmt. Diesen würde mal relativ groß wählen, damit der Kondensator einen vernünftigen Wert hat. Der Ausgang darf daher nur hochohmig belastet werden. Abhilfe kann hier ein nachgeschalteten Operationsverstärker bringen, der als Impedanzwandler geschaltet ist (im Bild unten).

Beim PWM-Signal können aber noch andere Einflüsse eine Rolle spielen, z. B. Schwankungen der Versorgungsspannung des Arduino. Auch die innenschaltung des PWM-Ausgang spielt eine Rolle. So unterscheidet sich oft der effektive Widerstand zwischen dem digitalen Ausgangs-Pin und der Stromversorgung im High-Zustand vom Widerstand gegenüber Masse im Low-Zustand. Verglichen mit dem Wert des Filterwiderstands müssen beide klein sein, um die Linearität zu wahren. Nicht zuletzt muss das PWM-Signal kontinuierlich ausgegeben werden, um die Ausgangsspannung auf einem bestimmten Wert zu halten.

Reicht die Tiefpass-Lösung nicht aus, kann man mit nur wenig mehr Schaltungsaufwand einen echten Analogwert aus dem PWM-Signal erzeugen. Für diesen Zweck wurde der integrierte Baustein LTC2644 entwickelt. Der LTC2644 misst den Zeitraum und die Impulsbreite zweier PWM-Eingangssignale und steuert damit Spannungsausgangs-D/A-Wandler an. Die Wandler haben 12 Bit Genauigkeit und sind in der Lage, bei 3,3 V Betriebsspannung bis zu zu 5 mA und bei 5 V Versorgung bis zu 10 mA zu liefern. Der LTC2645 hat sogar vier Kanäle. Die interne Referenzspannungsquelle mit einer Drift von 10 ppm/K erlaubt das Generieren eines Analogsignals mit 12 Bit Auflösung aus dem PWM-Signal. LTC2644 und LTC2645 messen direkt das Tastverhältnis des eingangsseitigen PWM-Signals und übergeben den gemessenen Wert binär an einen Präzisions-D/A-Wandler übergeben.

Die eingebaute 1,25-V-Referenz legt den Maximalpegel des Ausgangs auf 2,5 V fest. Soll ein Ausgang mit einem anderen Maximalpegel benötigt werden, kann eine externe Referenz angeschlossen werden. Über einen separaten Anschluss (IOVCC) lässt sich der digitale High-Eingangspegel festlegen, so dass nicht nur der Arduino oder ein anderer 5-V-Mikrocontroller angeschlossen werden kann, sondern auch ein direkter Anschluss an FPGAs mit 1,8 V Versorgungsspannung möglich ist (es ist jede Spannung zwischen 1,8 V unbd % V möglich). Die Offsetspannung der Wandler liegt unter 5 mV, der maximale Verstärkungsfehler beträgt 0,8% und die maximale integrale Nichtlinearität liegt bei maximal 2,5 LSB. Der PWM-Frequenzbereich beträgt 30 Hz bis 6,25 kHz für die 12-Bit-Versionen.

Durch Beschalten des IDLSEL-Pins auf High-Pegel, aktiviert man den "Sample-and-Hold"-Modus. Die Ausgänge sind nach dem Einschalten zunächst hochohmig. Ebenso schaltet ein dauerhaft anliegender Low-Pegel den Ausgang hochohmig. Ein dauerhaftes High-Signal am Eingang bewirkt dagegen, dass der Ausgang seinen Wert beliebig lange aufrechterhält. So kann man nach dem Einschalten mit einem PWM-Burst die Ausgangsspannung festlegen und dann durch ein kontinuierliches High-Signal am Eingang auf diesen Wert "festnageln". Durch Verbinden des IDLSEL-Pins mit GND selektiert man den transparenten Modus, bei dem ein dauerhafter High-Pegel am Eingang den Ausgang auf den Maximalwert setzt, während ein dauerhaftes Low-Signal am Eingang den Ausgang auf 0 V schaltet. Das folgende Bild zeigt die Beschaltung des LTC2644.

Literatur/Links


Copyright © Hochschule München, FK 04, Prof. Jürgen Plate
Letzte Aktualisierung: