PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : R2R-DAC Pegel anpassen



CowZ
15.09.2007, 22:06
Hi,

ich habe einen einfachen DAC mittels R2R-Netzwerk aufgebaut. Die einzelnen Eingänge betreibe ich mit 5V (nicht zu ändern, sind die Ausgänge eines AVRs).

Ich habe folglich eine Ausgangsspannung von 0 - 5V. Dieses "Fenster" möchte ich jetzt aber auf 0,33V - 1V "umwandeln".

Ich vermute, dass ich das mit einem Op-Amp machen kann, weiß aber nicht, wie genau. Auch aus den etlichen Seiten über Op-Amps kann ich mir (noch) kein sinnvollen Schaltplan erdenken.

edit: Eigentlich müsste das doch mit zwei Widerständen an den beiden Enden des Widerstandsgrabes möglich sein, oder?

Ich hoffe, ihr könnt mir dabei helfen,
Viele Gruß,
CowZ

EZ81
16.09.2007, 13:33
Hallo CowZ,

mit etwas rechnen (Spannungsteiler + äquiv. Spannungsquellen etc., bei Interesse mehr dazu) geht das mit 2 oder 3 Widerständen und ohne Opamp, selbiger koennte ggf. als Buffer dahinter, wenn die Schaltung zu hochohmig für die Last ist.



+5V
|
R2
|
0-5V >--R1--+--> 1/3-1V
|
R3
|
GND


R3 = 1/6 * R1
R2 = 2 * R1

In R1 ist der Innenwiderstand R_i des R-2R-Netzwerks (R_i = R) schon enthalten, wenn Du also bei den Werten von R2 und R3 in der Formel R1 = R einsetzt, kannst Du die 3 Cent für R1 auch noch sparen :wink:. Bitte nochmal nachrechnen/simulieren/testen/von anderen Forenmitgliedern nachrechnen lassen, bevor Du das so baust, keine Gewähr für die sonntagnachmittägliche Rechnung :wink:

Grüße
;Matthias

CowZ
16.09.2007, 15:01
Hi,

wie berechne ich denn R1? Der Wechselt doch mit der angelegten Spannung, oder?

Das R2R-Netzwerk besteht aus 100k-Ohm Widerständen, also 100k und 50kOhm.

Meine Alternativ-Idee wäre es jetzt, einen Spannungsteiler hinter nem OpAmp aufzubauen und den zweiten OpAmp im gleichen Gehäuse als Buffer zu benutzen (brauch ich so oder so).

Gruß, CowZ

sigo
16.09.2007, 15:16
Hi Cowz,
bei einem so hochohmigen Netzwerk würde ich eh mit einem Impedanzwandler (OP) arbeiten. Wenn du gleich einen CMOS-Doppel-OP nimmst, kannst du OP - Spannungsteiler - OP machen. 0..1V sind so einfach machbar. Die 0,33V kannst du per Software realisieren. Ansonsten Muss der 2. OP als Addierer geschaltet werdenund einfach noch 0,33V hinzuaddieren..

Sigo

CowZ
16.09.2007, 15:23
Hi,

wiegesagt, den OpAmp werd ich sowieso benutzen. Die 0,33V per Software gefallen mir nicht, da so die Auflösung des DACs verkürzt werden, aber den zweiten als Addierer zuverschalten sollte ja auch gehen.

Am besten gefallen würde mir allerdings immer noch die Variante mit dem einen OP von EZ81.
Wäre cool, wenn du mir das Prinzip dahinter noch mehr erläutern kannst, so dass ich irgendwann die Widerstände für andere Spannungen anpassen kann.

Gruß, CowZ

PICture
16.09.2007, 23:19
Hallo CowZ!

Am eifachsten ist es tatsächlich den festen Wert für 0,33 V immer softwaremassig zu jedem durch den DAC ausgegebenen Wert zu addieren. Das beeiflusst die Auflösung des DACs nicht.

Dann brauchst Du nur ein Spannungsteiler (Widerstand) am Ausgang des R-2R Netzwerks um eine maximale Ausgangsspannung auf 1V einzustellen oder die Werte für R-2R ausgegangen von der Last des DACs zu berechnen.

Wenn Du den DAC für Video anwenden willst, sind 100 k und 50 k wegen Montagekapazitäten zu hoch.

MfG

sigo
17.09.2007, 14:21
Cowz,

An der Auflösung verlierst du ja tatsächlich nur 1/3 Bit, da du statt eines Bereichs von 0,67V (0,33..1V) nun 0..1V speisen musst. Die Softwarelösung ist aber viel einfacher.

Ich habe mir das Netzwerk nochmal angesehen. Es hat nach außen ja immer den gleichen Innenwiderstand, nämlich R. (Ausnahme Bit 0)

Wenn die Spannungsquelle aber immer den gleichen Widerstand hat, dann kann man mit einem einzigen Widerstand von deinem +Ausgang nach Masse einen Spannungsteiler bilden.

Dieser Widerstand muss 1/4R betragen. Bei 50kOhm wären das also 12k5.
Bei 10kOHm, die ich eher nehmen würde, wären es entsprechend 2k5.
Ein weiterer VOrteil ist, dass dadurch der Innenwiderstand (bzw. Ausgangswiderstand) deiner Analogspannung gleich auf 10kOhm, bzw. 2KOhm sinkt.

Sonderbetrachtung Bit 0:
Bit 0 hat einen höheren Ausgangswiderstand, sodass dein Spannungsteiler Bit 0 überproportional abschwächen würde. Das kannst du aber mit 2 zusätzlichen R-Widerständen (in Reihe) von Bit0 gegen Masse kompensieren. Das gesamte Ergebnis rutscht dann um 1/2 LSB nach unten. Aber das kann man erstens besser verkraften als ein zu schwaches Bit0, und außerdem kann man das ja bei der Software berücksichtigen. Da man es ja weiß. Die Auflösung leidet so nicht.

Sigo

CowZ
17.09.2007, 17:35
Hi,

ich habe eine Auflösung von 8 Bit. Das entspricht auf 1V also einer Auflösung von:
1V : 256 Bit = 0.00390625 V/Bit

0,33V entsprechen also 0,33V / 0,0039 V/Bit = 84 Bit.

Das ist mir doch bisschen arg an Auflösungsverlust.

Wie ich den Innenwiderstand meiner Spannungquelle (ADC) berechne, ist mir noch nicht klar. Würde aber gerne dazu lernen.

Um den Ausgang belastbarer zu machen, wollte ich einen OpAmp dahinter schalten. Wenn ich nun den Innenwiderstand der Spannungsquelle wüsste (und der konstant ist) kann ich doch über eine Verstärkerschaltung zunächst die Spannung (mehr als) fünfteln, und dann mit dem zweiten OpAmp 0,33V aufaddieren, oder?

Es kommt mir so vor, als würde ich dadurch mehrere Vorteile kombinieren:
a) ich habe immer noch volle 8bit für 0,33V - 1V
b) ich habe ein belastbares Ausgangssignal

Alternativ kann ich natürlich auch zunächst über einen Spannungsteiler die Ausgangsspannung auf 0,67V reduzieren und dann mit nem OpAmp 0,33V aufaddieren. Oder was spricht überhaupt gegen die Addiererschaltung?

Klärt mich bitte auf :D Bin ja hier, um zu lernen :)

Gruß, CowZ

sigo
17.09.2007, 18:23
Hi,

ich habe eine Auflösung von 8 Bit. Das entspricht auf 1V also einer Auflösung von:
1V : 256 Bit = 0.00390625 V/Bit

0,33V entsprechen also 0,33V / 0,0039 V/Bit = 84 Bit.

Das ist mir doch bisschen arg an Auflösungsverlust.

Wie ich den Innenwiderstand meiner Spannungquelle (ADC) berechne, ist mir noch nicht klar. Würde aber gerne dazu lernen.

Um den Ausgang belastbarer zu machen, wollte ich einen OpAmp dahinter schalten. Wenn ich nun den Innenwiderstand der Spannungsquelle wüsste (und der konstant ist) kann ich doch über eine Verstärkerschaltung zunächst die Spannung (mehr als) fünfteln, und dann mit dem zweiten OpAmp 0,33V aufaddieren, oder?

Es kommt mir so vor, als würde ich dadurch mehrere Vorteile kombinieren:
a) ich habe immer noch volle 8bit für 0,33V - 1V
b) ich habe ein belastbares Ausgangssignal

Alternativ kann ich natürlich auch zunächst über einen Spannungsteiler die Ausgangsspannung auf 0,67V reduzieren und dann mit nem OpAmp 0,33V aufaddieren. Oder was spricht überhaupt gegen die Addiererschaltung?

Klärt mich bitte auf :D Bin ja hier, um zu lernen :)

Gruß, CowZ


Hi Cowz
0,33 ..1V = 0,67V Spannungshub

0,67V / 255 = 2,63mV / digit

1V / 255 = 3,92mV / digit

sooo groß ist der Verlust doch eher nicht, oder?

Falls du aber doch lieber die vollen 8 Bit ausschöpfst, kannst du natürlich beiden deiner Lösungen realisieren. Da aber eiN Doppel-OP genau wie die meisten EInfach-OPs in einem DIL8 Gehäuse sitzt, und der erste OP eh keine Beschaltung braucht, kannst du ja ruhig auch die Schaltung mit dem Doppel-OP anweden. Dann hast du den Spannungsteiler fast garnicht belastet und mit dem 2. OP einen sehr soliden Ausgang. Ich würde einen CMOS-OP ala TL072 nehmen.

Alternativ geht es natürlich auch, den von mir eben vorgeschlagenen Spannungsteiler zu realisieren und nur einen OP in Addierer-Schaltung dahinter hängen.

Da Addierer in der typischen Schaltung aber einen Eingangsstrom brauchen (Es werden meist 2 Ströme über 2 Eingangswiderstände addiert), belastet der Addierer deinen Spannungsteiler und kann somit sas Ergebnis verfälschen.. Wieviel das ausmacht, musst du selbst durchrechnen. Bei der Schaltung mit CMOS Doppel-OP entfällt dieser Fehler.

EDIT:
Wenn du auf die Addition verzichtest, kannst du mit einem Einfach-OP als Impedanzwandler direkt hinter dem Spannungsteiler arbeiten. Dann ist der Eingang hochohmig und belastet den Spannungsteiler nicht. Das dürfte dann auch mit den 50/100kOhm gut gehen.


Sigo

EZ81
17.09.2007, 18:27
Hallo CowZ

Innenwiderstand des DAC:
http://upload.wikimedia.org/wikipedia/en/a/af/R2R.png
Die Spannungsquellen (also hier die Ausgaenge des uC) werden dazu immer kurzgeschlossen=auf Masse gelegt.

Dann von rechts nach links vorgehen:
Die 2 2R ganz rechts sind parallel und koennen als einfacher R gegen Masse angesehen werden, (X) mit dem R zw. Bit0 und Bit1 in Serie entsprechen die rechten drei Widerstaende dann einem 2R gegen Masse. Der ist parallel mit dem 2R zu Bit1, entspricht also einem R gegen Masse und du kannst bei (X) wieder anfangen zu lesen und die ganze Schaltung SChritt für Schriit weiter vereinfachen, bis du nur noch einen R hast, der dann dein Ausgangswiderstand ist. Dass Bit0 einen anderen Ausgangswiderstand haben soll, kann ich nicht ganz nachvollziehen.


Wenn die Spannungsquelle aber immer den gleichen Widerstand hat, dann kann man mit einem einzigen Widerstand von deinem +Ausgang nach Masse einen Spannungsteiler bilden.
Oder man legt den einzigen Widerstand nicht gegen Masse, sondern gegen 5/13 V und hat genau das gewünschte Ergebnis. Die Bierdeckelrechnung dazu habe ich mal angehängt, die Form bitte ich zu entschuldigen ;).

Grüße

PS: Kannst mal nach Thevenin googlen, da ist mehr zu dem Thema zu finden.

CowZ
18.09.2007, 11:51
Hi,

super geile Antworten Leute! Danke schön :)

Vorallem die Rechnung von EZ81 und das Stichwort "Thevenin" ist super :) Werde die Rechnung nochmal langsam nachvollziehen, aber das sollte ich hinbekommen (hoffentlich ;). Nach Thevenin werd ich nochmal googlen und was drüber lesen :)

Vielen Dank nochmal!
Gruß, CowZ

CowZ
18.09.2007, 18:11
Hi,

ich bin restlos begeistert :D

Die Rechnung verstehe ich, das Ergebnis stimmt und alles funktioniert!
Vielen, vielen Dank! :)

Jetzt habe ich nur noch ein Problem: Der Ausgang ist nicht ganz flüssig, sondern "schwankt" (kann man das so sagen?) Habe mir jetzt "gedacht" (mit ausprobieren ;) ), dass ich an den Eingang einfach n Kondensator gegen GND schalte. Das Ergebnis sieht auch schon besser aus.

Ich frage mich nur, ob ich das Problem überhaupt richtig erkannt habe, und ob so ein Kondensator die "richtige" Lösung ist. Eine andere Vermutung von mir ist, dass es mit dem Umschaltvorgang vom µC-Port zusammenhängt (PortA, mega32).

Hier noch ein Bild vom Oszi (http://www.cowz.de/forenbilder/dac-schwingung.jpg). Links das Ergebnis der DA-Wandlung, rechts "eingezoomt". Eine volle Schwingung dauert 0,5µs, die Frequenz beträgt also 2MHz.

=> Da der µC den Port mit gemessenen 2,5MHz umschaltet, kann es nicht daran liegen.

Gruß, CowZ

Yossarian
18.09.2007, 18:26
Hallo
Das kann ja nun viele Ursachen haben. Solange keine Umschaltung der Ausgänge erfolgt, sollte die Spannung schon eine Gleichspannung sein.
Da Frequenz und Amplitude des Sägezahns unbekannt sind, würde ich erstmal auf die Betriebsspannung tippen.

Mit freundlichen Grüßen
Benno

CowZ
18.09.2007, 18:36
Hi,

die Amplitude beträgt 0,33 - 1V, die Frequenz habe ich vergessen, richtig. Sie beträgt 14,7kHz.

Die Versorgungsspannung schwankt nur minimal. Sollte man 100n von + zu - vom OpAmp legen?

edit: Habe mich vermessen, die Schwankung ist genau wie das Signal vom Mikrocontroller. Zudem tritt sie auch ohne den OpAmp auf. Denke also, dass das am Umschaltvorgang liegt. Wie kann ich dieses Problem am besten umgehen? Kleine Kondensatoren in den Signalweg der einzelnen Bits?

Gruß, CowZ

Yossarian
18.09.2007, 19:04
Hallo
Jetzt steh ich etwas auf dem Schlauch.
Ich bin davon ausgegangen, daß der Sägezahn die Störung ist.
Wenn Du den Sägezahn erzeugen willst, warum verstümmelst Du ihn dann wieder?
Mit freundlichen Grüßen
Benno

CowZ
18.09.2007, 19:05
Hi,

nein, der ist absolut nicht verstümmelt. Das Bild rechts ist nur "reingezoomt", also Zeit + Spannungsanzeige vergrößert / verkleinert. Was rechts ist, ist ein Ausschnitt aus dem Links, damit man die Störung sieht.

Gruß, CowZ

sigo
18.09.2007, 21:05
Hi Cowz,
welche Amplitude Spitze-Spitze hat die Schwingung denn?

Hast du schonmal probiert, einen 1-2kHz-Sägezahl zu erzeugen?
WIe sieht das Signal dann aus?
Hintergrund: Die Umschaltvorgänge spielen dann eine geringere Rolle, da dazuwischen "ewig" Zeit ist..
Evtl. das Bild nochmal posten..

Komdensator im R-2R-Netzwerk (wenn, dann genauso entsprechend den Widerständen c - 1/2C wählen evtl. eine Möglichkeit aber der Aufwand wäre natürlich ziemlich groß und die Cs müssten sehr klein sein, im pF bereich. Ich denke nicht, dass das eine praktikable Lösung ist.

Du könntest deinen OP als Tiefpass 2. Ordnung ausführen, z.B. mit 100-kHz Grenzfrequenz. Das kostet natürlich Bandbreite, würde das Problem aber glattbügeln. (Es lebe die Symptombekämpfung).

Ich vermute, dass du evtl. Toleranzen in den Widerständen haben könntest, die dazu führen.

Eine andere Möglichkeit wäre evtl. eine unsaubere Masseführung.

Sigo

sigo
18.09.2007, 21:08
Evtl. mal einen 10M-Ohm Widerständ (oder irgendwas zwischen 1-10MOhm) parallel zu den 2R an Bit 0 (oder 1 usw.) hängen, und so den Widerstand ein wenig verändern. Dann schauen, was mit dem Signal passiert..

Falls vorhanden auch Poti..

CowZ
19.09.2007, 16:59
Hi,

Amplitude: ca 0,1V

1-2kHz Sägezahn: Hab ich ausprobiert, liefert dieses Ergebnis (http://www.cowz.de/forenbilder/dac-schwingung2.jpg).

Bandbreite: Das wird kritisch, muss den DAC mit ~5MHz arbeiten lassen. (Ist dafür so ein R2R überhaupt sinnvoll, oder gibt es da bessere Alternativen (billiger (Standard-)IC oder so)?

Toleranzen: Sind Metallschicht 1%, könnte also sein.

Masseführung: Das ganze ist auf einem Steckbrett aufgebaut... Masse und 5V liegen auf den "typischen" senkrechten Verbindungen.

10M-Ohm Widerstand: Ändert überhaupt nichts.

Wenn es mit einem R2R-DAC nicht gehen sollte und ein IC dafür besser geeignet ist (und nicht so teuer bei Reichelt ist), ist das wohl die nächste Alternative. Werde mich da dann mal auf die Suche begeben... Hoffe aber trotzdem noch auf Lösungen für das R2R-DAC-Problem :)

Gruß, CowZ

sigo
19.09.2007, 17:51
Ich denke das Geheimnis liegt im Steckbrett und den hohen Widerstandswerten.
Man sieht an dem 1kHz - Bild gut, dass du offenbar ziemliche Überschwingprozesse hast, also kapazitives Übersprechen in dem Fall.
(wie Kondensatoren parallel zu deinen Widerständen..)

Ein weiterer Effekt könnte der Umschaltprozess der ganzen Ausgänge sein. Ich denke das aber eher nicht.
Lösung(en):

1. Statt 100kOhm 10kOhm Widerstände nehmen -->
Die Kapazitäten wirken sich nur noch 1/10 so stark aus.
Entsprechend noch weniger bei noch kleineren Widerständen..

2. Natürlich wird ein besseres Layout ziemlich viel bringen

3. Du kannst das auch sehr gut kompensieren, indem du einen Kondensator parallel zu R3 aus EZ81s Berechnung schaltest.

Wenn du das Oszi-Bild des 1kHz signal lässt, kannst du mit dem C spielen, bis es passt. Damit kannst du den Effekt ziemlich gut kompesieren, etwa wie bei einem Tastkopf... Das geht praktisch ohne Bandbreitenverlust.
Natürlich geht das nur für ein gegebenes Layout. Ein neues Layout erfordert einen anderen Wert..je besser das Layout desto kleiner.

4. Ein größerer C (100nF o.ä.) parallel zu R3 würde in jedem Fall einiges verbessern, geht aber auch auf Kosten der max. Bandbreite.

5. Mit einem 2. RC-Glied am Ausgang des OP kannst du das Signal noch besser glätten.

Jede dieser Maßnahmen bringt einiges. Ich würde sie durchspielen..
Fange am besten mit 3. bzw. 4. an, ist am einfachsten...

Am Kern packst du das Problem mit 1. eher.

Sigo

CowZ
19.09.2007, 19:56
Hi,

danke Sigo!!!

Ich habe das Netzwerk nochmal mit 10k-Widerständen aufgebaut! Jetzt ist es wunderbar!!! :D Danke :D Super geil :)

Projekt Videokarte wieder einen Schritt weiter :D

Gruß, CowZ