Eine per RS232 einstellbare Spannungsquelle

Foto des fertigen Geräts (Thumbnail)

Manchmal benötigt man eine variable Spannung, beispielsweise um etwas zu steuern. In vielen Fällen kann man eine PWM (Pulsweitenmodulation) nutzen, bei der die Versorgungsspannung schnell ein- und ausgeschaltet wird. Durch die Dauer der jeweiligen Zustände ergibt sich ein mittlerer Spannungswert, den man recht gut steuern kann. Für LEDs oder einfache Gleichstrommotoren (klassisches Beispiel: PC-Lüfter) funktioniert das prima, da durch die Trägheit des menschlichen Auges bzw. der trägen Masse des Motors eine Art Filterung der plötzlich wechselnden Zustände erzielt wird. Manchmal benötigt man aber doch eine "echte" Gleichspannung, nämlich wenn das zu versorgende Bauteil einem plötzliche Aussetzer der Versorgungsspannung übel nimmt.

Eine einfache und bewährte Methode ist einen Linearregler mit einstellbarer Ausgangsspannung zu verwenden, z.B. den LM317. Die Widerstände zum Einstellen der Spannung ersetzt man durch ein Potentiometer und fertig ist die steuerbare Spannungsquelle. Allerdings ist diese nur manuell bedienbar. Abhilfe schaffen digitale Potentiometer, wie z.B. MCP4151, die per SPI angesteuert werden können. Doch manchmal ist auch dieser Weg ungeeignet, da diese Potentiometer mitunter recht hohe Widerstandswerte besitzen (ab 10 Kiloohm aufwärts).

Mich hat vor allem auch interessiert, wie man so etwas selbst bauen könnte. Eine tiefpassgefilterte PWM zu nutzen ist guter Ansatz. Es gibt zahlreiche Projekte, bei denen über eine solchermaßen erzeugte PWM ein Lautsprecher oder Piezo-Piepser angesteuert wird, um Musik oder Sprache ertönen zu lassen. Allerdings ist eine solche Gleichspannung nicht sehr belastbar. Mein Ziel bestand darin, eine Spannungsquelle zu bauen, die mit einigen hundert Milliampere belastet werden kann. Dies konnte ich erreichen, indem ich zwei Transistoren als Emitterfolger nachgeschaltet habe, welche die Impedanz der Quelle erheblich verstärken.

Schaltbild 1

Die Ausgangsspannung dieser Schaltung kann prinzipbedingt niemals die Vesorgungsspannung erreichen, da die Basis-Emitter-Strecken der beiden Transistoren einen Spannungsabfall erzeugen. Dieser ist abhängig vom Strom der fließt. Das folgende Diagramm zeigt verschiedene Messreihen, bei denen unterschiedliche Lastwiderstände angeschlossen wurden. Die Kurven für die unbelastete und wenig belastete Spannung sehen anfangs recht steil aus, während ab einer Last von etwa 100 Ohm ein ausgesprochen linearer Zusammenhang zwischen PWM-Dutycycle und Ausgangsspannung sichtbar wird.

Plot der Messergebnisse 1

Eine weitere interessante Größe ist der Innenwiderstand, denn dieser bestimmt bis zu welcher Stromstärke die vorgegebene Spannung gehalten werden kann. Das folgende Diagramm zeigt die Spannung im Verhältnis zum Strom. Bei den hohen Strömen sind die Werte etwas unsauber, da sich die Widerstände teilweise stark erwärmt und damit ihre Werte geändert haben. Aber die geglättete Kurve zeigt recht genau den weiteren Verlauf an.

Plot der Messergebnisse 2

Die Software

simple

Die Software besteht aus nur einem Teil, der Firmware auf dem Gerät. Sie kann direkt mit einem Terminal-Programm wie z.B. PuTTY oder picocom bedient werden. Die Steuerung der Ausgangsspannung erfolgt über die Vorgabe des PWM-Duty-Cycles in Dezimalwerten zwischen 0 und 255. Eine Sitzung könnte wie folgt aussehen:

+OK voltsrc 1.0 ready
SET A 100
+OK Channel set
SET B 150
+OK Channel set
SET A 0
+OK Channel set

Wobei das ganze case-insensitive ist, d.h. "set a 0" würde genauso zum Erfolg führen. Das Programm sendet alle Zeichen zurück (echo), wobei CR durch CRLF ersetzt wird. Bei der Eingabe wird eine Zeile als komplett betrachtet, wenn CR empfangen wird (weil dies die meisten Terminal-Programme als Default verwenden).

Die Software benötigt ca. 1 KByte Speicher, was im wesentlichen an der (teuren) Zeichenketten-Verarbeitung liegt.

ee_curve

Die ee_curve-Software besteht aus zwei Teilen, einer Firmware und einem PC-Programm. Im Unterschied zur simple-Software kann der Benutzer hierbei einen Spannungswert in Millivolt angeben, der von der Hardware in einen vorher konfigurierten PWM-Duty-Cycle übersetzt wird. Die Konfiguration erfolgt in Form einer Kennlinie (Spannung zu Duty-Cycle), die für jeden Kanal getrennt im EEPROM abgespeichert wird. Für einen gegebenen Spannungs-Wert wir der dazugehörige Duty-Cycle über das Verfahren der linearen Interpolation angenähert. In der Praxis erreicht man damit erstaunlich gute Ergebnisse.

Die Verwendung des PC-Programms ist notwendig, weil aus Grüden der Einfachheit in der Firmware (und damit letztendlich Platzgründen) ein Binärprotokoll zum Einsatz kommt. Bisher gibt es ein einfaches Konsolen-Programm für Linux (bzw. POSIX-konforme Systeme) sowie ein etwas aufwändigeres Windows-Programm.

Die ee_curve-Software ist ab Version 1.1 enthalten.

Downloads

Version Datum Änderungen Datei Beschreibung
1.0 2012-10-02 Erstes Release voltsrc-1.0.tar.gz Schaltplan und Layout im Eagle-Format (Version 6),
Software (AVR-GCC)
1.1 2013-03-31 ee_curve-Software hinzugefügt voltsrc-1.1.tar.gz Schaltplan und Layout im Eagle-Format (Version 6),
Software (AVR-GCC)