Forum: Mikrocontroller und Digitale Elektronik DAC, DA-Wandlung mit PWM?


von Andreas T. (tilli)


Lesenswert?

Hallo,
für ein Projekt benötige ich zur Steuerung 4 regelbare Gleichspannungen 
zwischen 0 – 3,3 Volt (max. 5 Volt) aus einem Arduino (oder ähnlich). Da 
in den meisten Mikrocontroller kein DA-Wandler integriert ist, dachte 
ich  mittels eines PWM-Ausgangs eine DA-Wandlung vorzunehmen. Hierbei 
bin ich im Artikel 
https://www.mikrocontroller.net/articles/Pulsweitenmodulation und 
https://www.mikrocontroller.net/articles/Pulsweitenmodulation#DA-Wandlung_mit_PWM 
fündig geworden.
Ich habe die kleine Schaltung wie gezeigt nachgebaut. Sie funktioniert 
auf den ersten Blick eigentlich recht gut.
Es gibt jedoch einen kleinen Schönheitsfehler. Ist der Eingang offen 
oder wird nicht angesteuert, geht der Ausgang auf maximale 
Ausgangsspannung. Dies ist jedoch eine Eigenart, die ich nicht 
gebrauchen kann. Wie genau erklärt sich dieser Zustand und kann ich dies 
mit kleinen Aufwand abändern?
Tritt dies bei der fertigen Lösung LTC2645 so auch auf? Gibt es andere 
einfache Lösungen für meine Aufgabenstellung von oben?
Über etwas Hilfe würde ich mich sehr freuen. Vorab vielen Dank.
Gruß Tilli

von Wolfgang (Gast)


Lesenswert?

Andreas T. schrieb:
> Es gibt jedoch einen kleinen Schönheitsfehler. Ist der Eingang offen
> oder wird nicht angesteuert, geht der Ausgang auf maximale
> Ausgangsspannung. Dies ist jedoch eine Eigenart, die ich nicht
> gebrauchen kann.

Das hängt von den Eigenheiten deiner anzusteuernden Schaltung und von 
deinem Programm ab.

von Carsten-Peter C. (carsten-p)


Angehängte Dateien:

Lesenswert?

Wenn Deine anzusteuernde Schaltung den Pegel hochzieht, ist vielleicht 
diese Schaltung geeignet.

von Wolfgang (Gast)


Lesenswert?

Carsten-Peter C. schrieb:
> Wenn Deine anzusteuernde Schaltung den Pegel hochzieht, ist vielleicht
> diese Schaltung geeignet.

Das gibt eine mühselige Kennlinienrechnerei. Der lineare Zusammenhang 
zwischen Tastverhältnis und Ausgangsspannung geht jedenfalls mit 
Sicherheit verloren.

Ein Op mit Rail-to-Rail Ausgang als Impedanzwandler könnte eher passen.

von N. M. (mani)


Lesenswert?

Andreas T. schrieb:
> Ist der Eingang offen oder wird nicht angesteuert, geht der Ausgang auf
> maximale Ausgangsspannung.

Pulldown am Eingang hinzufügen?
uC Pin ohne Pullup im Resetfall verwenden?

von Carsten-Peter C. (carsten-p)


Lesenswert?

Wolfgang schrieb:
> Das gibt eine mühselige Kennlinienrechnerei. Der lineare Zusammenhang
> zwischen Tastverhältnis und Ausgangsspannung geht jedenfalls mit
> Sicherheit verloren.

Andreas schreibt.“ Sie funktioniert auf den ersten Blick eigentlich 
recht gut.“ Der Widerstand R1 liegt parallel zum PWM-Ausgang und hat 
somit kaum Auswirkungen auf den TP. Der Transistor entkoppelt den 
unbekannten Eingang der Schaltung weitgehend. Eine ähnliche Schaltung 
nutze ich für mein Lasermodul. Es ist schnell aufgebaut. Probiere es 
einfach aus.
Gruß Carsten

von Bauform B. (bauformb)


Lesenswert?

Andreas T. schrieb:
> Gibt es andere einfache Lösungen für meine Aufgabenstellung von oben?

Am einfachsten finde ich einen normalen DAC mit I2C-Schnittstelle. Der 
MAX5815BAUD kommt im SSOP-14, braucht nur ein Abblock-C und liefert vier 
Spannungen von 0 bis 3.3V mit 12 Bit Auflösung.

Die Grenze für so ein Teil ist die I2C-Bandbreite, theoretisch schafft 
der 4x3.7kHz. Aber es gibt ähnliche Teile mit High Speed I2C.

von ElektroFH (Gast)


Lesenswert?

LTC2645 sollte funktionieren.

Er hat ein IDLSEL Pin. Wenn mehr als 60ms kein INx Signal gibt, geht der 
OUTx auf dem von dir gewählten Pegel. Z.B. VCC oder GND.
Datenblatt Seite 13.

von Andreas T. (tilli)


Lesenswert?

Vielen Dank für die vielen, schnellen Antworten.
Um es zu verstehen, fasse ich einmal zusammen:

Wolfgang antwortete:
„Das hängt von den Eigenheiten deiner anzusteuernden Schaltung und von
deinem Programm ab“.
Anmerkung: Die anzusteuernden Schaltung ist einfach ein 
Komperator-Eingang eines OP's über einen Spannungsteiler (zB. 1/10). Das 
Programm ist ein Standart-PWM-Signal aus einem Arduino.

@Carsten-Peter: Soll die Schaltung PWM-TP.png das ganze Filter ersetzen? 
Welche werte hast du verwendet? „Wenn Deine anzusteuernde Schaltung den 
Pegel hochzieht, ist vielleicht diese Schaltung geeignet.“ Wie genau ist 
das gemeint?

@ Mani: „Pulldown am Eingang hinzufügen?“ Habe ich gestern kurz 
getestet. Geht schon in die richtige Richtung. Muss ich mir einmal genau 
ansehen. Auf so eine einfache Lösung bin ich nicht gekommen, da ich 
dachte, dass dies den TP beeinträchtigt.

@bauformb: MAX5815BAUD klingt auch nach einer guten Alternative. War 
halt auf der Suche nach einer einfachen und kostengünstigen Lösung. 
Eventuell auch DIY. Diese IC's sind auch oft etwas schwer zu beschaffen. 
Schaue ich mir aber einmal an. Benötige ich denn für ein 
Standart-PWM-Signal aus einem Arduino eine solch hohe Frequenz?

@ElektroFH: „LTC2645 sollte funktionieren. Er hat ein IDLSEL Pin. Wenn 
mehr als 60ms kein INx Signal gibt, geht der OUTx auf dem von dir 
gewählten Pegel. Z.B. VCC oder GND. Datenblatt Seite 13.“

Macht er dies für jeden Out einzeln oder schaltet er alle Ausgänge 
gleichzeitig ab? Das zweite könnte ich natürlich nicht gebrauchen.
Vorab für weitere Tipps vielen Dank.
Gruß Andreas

von Egon D. (Gast)


Lesenswert?

Andreas T. schrieb:

> Anmerkung: Die anzusteuernden Schaltung ist einfach
> ein Komperator-Eingang eines OP's über einen
> Spannungsteiler (zB. 1/10). Das Programm ist ein
> Standart-PWM-Signal aus einem Arduino.

Nur als Hinweis: Dir ist klar, dass Dein persönlicher
Troll-Salami-Faktor gerade in die Nähe von 100% gekommen
ist?

Begründung:
1. Kein Schaltplan.
2. Offensichtlich unvollständige Aufgabenstellung.

Dein ursprüngliches Problem (stellbare Spannung mittels
Arduino und PWM erzeugen) erfordert
1. einen Arduino mit Programm,
2. je Spannungskanal einen Widerstand,
3. je Spannungskanal einen Kondensator.

Deine Erwähnung von "Komperator-Eingang", "OP" und
"Spannungsteiler" zeigt an, dass Du irgendwas völlig
anderes tust, als man nach Deinem Ursprungsbeitrag
erwarten würde.

Das nur als Hinweis, damit Du Dich über die Reaktionen
hier nicht wunderst.

von Berater (Gast)


Lesenswert?

>Das gibt eine mühselige Kennlinienrechnerei. Der lineare Zusammenhang
>zwischen Tastverhältnis und Ausgangsspannung geht jedenfalls mit
>Sicherheit verloren.
Das ist doch ein normaler Emitterfolger mit Verstärkung 1. Nur eben auf 
dem Kopf.
Und dass Du am Ausgang nie 0V haben wirst. Kommt auf die Anwendung an.

von Carsten-Peter C. (carsten-p)


Lesenswert?

Andreas T. schrieb:
> @Carsten-Peter: Soll die Schaltung PWM-TP.png das ganze Filter ersetzen?

Der Filter besteht aus R2 und C1. Nach der positiven Flanke Deines PWM 
Signals wird C1 über den Widerstand R2 aufgeladen, bis nach der 
negativen Flanke C1 wieder über R2 entladen wird usw. Ist die Frequenz 
hoch genug, stellt sich eine Gleichspannung proportional zum 
Taktverhältnis des PWM Signales ein.

> Welche werte hast du verwendet? „Wenn Deine anzusteuernde Schaltung den
> Pegel hochzieht, ist vielleicht diese Schaltung geeignet.“ Wie genau ist
> das gemeint?

Du schreibst:
Es gibt jedoch einen kleinen Schönheitsfehler. Ist der Eingang offen
oder wird nicht angesteuert, geht der Ausgang auf maximale 
Ausgangsspannung.

Diese maximale Ausgangsspannung kann nur vom nachfolgendem Gerät kommen 
(wie bei meinem Lasermodul). Das bedeutet für mich, die Klemmen X2 
müssen  bei nicht angeschlossenem Eingang  X1 gegen Masse gezogen 
werden. Das geschieht dadurch, das der Transistorüber die Widerstände R2 
und R3 seine Basisspannung erhält und durchschaltet. Für R1 würde ich 
einen Wert zwischen 2K und 10K nehmen. Für R2 und C1 würde ich die Werte 
Deiner Schaltung übernehmen. Je größer C1, je glatter die Gleichspannung 
aber auch träger. Da mein Laser mit PWM zurecht kommt, habe ich R2 und 
C1 nicht verbaut.
Gruß Carsten

von Wolfgang (Gast)


Lesenswert?

Berater schrieb:
> Und dass Du am Ausgang nie 0V haben wirst. Kommt auf die Anwendung an.

Die Anwendung sagt:

Andreas T. schrieb:
> ... regelbare Gleichspannungen zwischen 0 – 3,3 Volt (max. 5 Volt) ...

von FPGA-Nutzer (Gast)


Lesenswert?

Andreas T. schrieb:
> Dies ist jedoch eine Eigenart, die ich nicht
> gebrauchen kann.

Wenn man diePWM richtig ansteuert, dann liefert die automatisch 50%:50%, 
wenn man 0Volt vorgibt. "Gar keine Spannung" gibt es elektrisch nicht, 
da man definieren muss, was "Null" sein soll. Für den Fall von Brücken 
gibt es daher noch eine Abschaltung. In dem Fall des TE empfiehlt sich 
entweder eine einseitig (unsymetrische) Auswertung durch einen OP, den 
man auf Null steuert oder eine nur unsymmetrische Nutzung des Ausgangs 
bei einem rail-2-rail.

Richtig auf 0V und 3.3V wird man eh nicht kommen, wenn man nicht einen 
OP nimmt, der mit etwa -1V bis 4V beschaltet ist und die PWM mit einem 
Offset belegt.

Z.B. Range = 5V,  0 = 0V , 100% = 5V, Offset am OP = -1V, damit:
20% PWM = 0V, 80% PWM = 3V
Stärker sollte man eine PWM auch nicht ausreizen.
Mit einem kleinen Zähler in einem PLD benutze ich das in 64 Kanälen, um 
CVs für Eisenbahnbeleuchtung und-steuerung zu erzeugen.

von Bauform B. (bauformb)


Lesenswert?

Andreas T. schrieb:
> Diese IC's [echte DACs] sind auch oft etwas schwer zu beschaffen.
> Schaue ich mir aber einmal an. Benötige ich denn für ein
> Standart-PWM-Signal aus einem Arduino eine solch hohe Frequenz?

Den MAX5815 gibt's immerhin bei Mouser. Der hat aber mit PWM überhaupt 
nichts zu tun, kennt er nicht, kann er nicht, braucht er nicht. Du sagst 
ihm einfach per I2C wieviel Volt er liefern soll und dann macht er das, 
nicht mehr und nicht weniger.

Die Frequenz hängt davon ab, wie schnell du die Spannungen am 
Komparator-Eingang ändern willst. So über den Daumen kannst du sie (per 
I2C) tausend mal pro Sekunde neu einstellen.

von ElektroFH (Gast)


Lesenswert?

Andreas T. schrieb:
> @ElektroFH: „LTC2645 sollte funktionieren. Er hat ein IDLSEL Pin. Wenn
> mehr als 60ms kein INx Signal gibt, geht der OUTx auf dem von dir
> gewählten Pegel. Z.B. VCC oder GND. Datenblatt Seite 13.“
>
> Macht er dies für jeden Out einzeln oder schaltet er alle Ausgänge
> gleichzeitig ab?

Jedes Kanal (EingangX + AusgangX) ist unabhängig von einander.

von Carsten-Peter C. (carsten-p)


Angehängte Dateien:

Lesenswert?

Hallo, hier noch mal eine einfache Schaltung, um eine Gleichspannung aus 
einem 5V PWM Signal zu erzeugen. Die BE-Spannung beträgt ca. 1V. Um 3.3V 
zu erzeugen sollte also durch den Spannungsteiler eine Basisspannung am 
Q1 von ca. 4.3V eingestellt werden. C1 ist von der Frequenz abhängig.

von Peter D. (peda)


Lesenswert?

Carsten-Peter C. schrieb:
> Die BE-Spannung beträgt ca. 1V.

Naja, ich will ja eine PWM bauen und kein Thermometer (etwa-2mV/°).
Heutzutage nimmt man als Spannungsfolger einen OPV. Ist im SOT23-5 auch 
nicht größer als ein Transistor.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.