Externer DAU am Mikrocontroller

Mikrocontroller haben leider sehr selten D/A-Wandler integriert!
Oftmals kann man sich mit einer Pulsweitenausgabe behelfen, aber auch dabei ist die Kanalanzahl, die Abtastrate und die Auflösung begrenzt.

TDA1543

Dieser Schaltkreis scheint die Lösung des Problems zu sein. Die Kurzdaten: Der Leser sollte das Datenblatt vor sich liegen haben, und vermutlich wird er auch nach mehrmaligem Durchlesen nicht schlau daraus.
Deshalb hier das Ergebnis meiner Untersuchungen in hoffentlich verständlicherer Form, sowie deutsch (da werden die Vxx zu Uxx).

Wechselspannung

Für die Ausgabe von Wechselspannung genügt die folgende Schaltung:
Download: Vektorformat
Einfachste Schaltung für Wechselspannung; Dimensionierung der Widerstände siehe Text!
Je nach Datenquelle eigent sich diese Schaltung für die Wiedergabe in CD-Qualität! Dann sollte der Schaltkreis mit einem extra Festspannungsregler mit 8 V versorgt werden.

Hier wird der Ausgang nicht im Kurzschluss mit der Referenzspannung wie im Datenblatt beschrieben betrieben, sondern an einem Lastwiderstand. Es wird kein OPV benötigt!

Dimensionierung:

Zur Dimensionierung ist das Wissen über die ausgangsseitigen Stromquellen, -senken und -spiegel erforderlich!
Download: Vektorformat
Ausgangsseitige Stromquellen, -senken und -spiegel
Man sieht, dass man mit dem Programmierwiderstand Rbias den Quellstrom Ibias einstellt. Intern wird dies sicherlich über eine sog. Stromspiegelschaltung mit pnp-Transistoren realisiert. Die Stromstärkeverhältnisse werden über die wirksamen Emitterflächen eingestellt, angedeutet durch die Doppel-Emitter. Genauso gut kann man sich zwei Transistoren parallel geschaltet denken.

Als ein typischer Vertreter der integrierten Analogschaltungstechnik funktioniert der Stromspiegel nur in integrierten Schaltungen! (Nicht nachbauen!)

Dass sich der Programmierwiderstand am Referenzspannungsausgang befindet ist nur eine trickreiche Art, Pins einzusparen.

Zurück zur Schaltung:

Der Lastwiderstand darf nicht zu groß werden, denn der Ausgang muss ja immer noch möglichst Kurzschluss »sehen«.
Die Ausgangsspannung UOC(DC) darf zwischen 1,8 .. UDD – 1,2 V liegen.
Bei UDD = 5 V also zwischen 1,8 .. 3,8 V. Damit ist die Amplitude klar begrenzt, auf 2 VSS.
Mit dem maximalen Stromhub von IFS = 2,65 mA ergibt sich für den maximalen Spannungshub ein Widerstand RL = 2 V / IFS = 760 Ω. Das ergibt bei 3,8 V einen Strom von 5 mA, und der ist gerade so zulässig. Damit ist der Hub von 2 VSS auch der Mindesthub!
Günstiger werden die Verhältnisse bei höherer Betriebsspannung.

Die beiden Ausgänge sind normalerweise Stromsenken.
Mit einem Programmierwiderstand von Uref (Referenzspannung von 2,2 V, Pin 7) nach Masse kann man an den Ausgängen eine Stromquelle hinzufügen und so die Ausgangsspannung auf ein mittleres Potenzial von 2,8 V hochziehen. Also braucht man einen Ruhe-Biasstrom von 3,8 V / 760 Ω = 5 mA, einen Programmierwiderstand Rbias = 2,2 V / 2,5 mA = 880 Ω.

BetriebsspannungUB5 V8 V
maximaler HubΔUDAU2 V (± 1 V)5 V (± 2,5 V)
AusgangsspannungsbereichUDAU1,8 .. 2,8 .. 3,8 V1,8 .. 4,3 .. 6,8 V
ArbeitswiderstandRL755 Ω1,88 kΩ
StromeinstellwiderstandRbias880 Ω1,22 kΩ
Ausgangsstrom (in RL)IL2,4 .. 5 mA0,96 .. 3,6 mA
Dimensionierung für übliche Betriebsspannungen und maximalem Hub
Sicherlich ist diese Stromprogrammierung nicht sonderlich langzeitstabil und auch nicht kanalgleich, was den Einsatz in DC-Schaltungen weiter unten erschwert.

Unipolare (oder, wer will, auch bipolare) Gleichspannung

Wenn der oben genannte Ausgangsspannungsbereich UOC(DC) ausreicht, lässt man im Bild 1 einfach die Kondensatoren weg, und fertig.
Bei Bezugnahme auf die Referenzspannung Uref Pin 7 muss dies (wechsel)stromfrei geschehen, bspw. mit einem Spannungsfolger am Pin 7. Da rächt sich das Pinsparen.
Beachte: Das niedrigste Kodewort -32768 = 8000h ergibt die größte, das höchste Kodewort 32767 = 7FFFh die kleinste Spannung.

In allen anderen Fällen benutzt und dimensioniert man einen I/U-Wandler.

Download: Vektorformat
I/U-Wandler am Ausgang. Der NE5532 bekommt allerdings zu wenig Betriebsspannung…
Bei der Ausgabe einer Gleichspannung würde man normalerweise eine Potenzialversatzstufe verwenden. So etwas tut man aber nicht, wenn man eine Stromquelle hat! (= Vorteil des Stromquellen-Ausgangs)

Dimensionierung

Die Ausgangsspannung UOC(DC) beträgt hier immer Uref und spielt bei der Dimensionierung keine Rolle.
RIU wird als Quotient zwischen gewünschtem Ausgangsspannungshub (in Volt) und Stromhub IFS = 2,3 mA (typ.) ermittelt. RIU muss einstellbar sein, wenn die Ausgangsspannung definiert sein soll; besser ist eine softwaremäßige Verstärkungskalibrierung.
Hier gilt: Das niedrigste Kodewort -32768 = 8000h ergibt die kleinste, das höchste Kodewort 32767 = 7FFFh die größte Spannung.

Der Strom in den I/U-Wandler ist theoretisch Null beim Kode 8000h und –2,3 mA beim Kodewort 7FFFh. Daher kommt es am Ausgang nur zu höheren Spannungen als Uref. Die maximale Aussteuerfähigkeit des OPV ist dabei zu beachten. Will man kleinere Spannungen, ist ein positiver Konstantstrom in den Eingang des I/U-Wandlers einzuspeisen. Im einfachsten Fall mit je einem Festwiderstand von UDD, denn die Spannung ist ja konstant. (Dies ist auch der Weg der Kalibrierung, oder für unterschiedliche Bereiche für die beiden Ausgänge.)
Genau dafür ist der Programmierwiderstand Rbias zuständig und nutzbar!
Zur Nullpunktkalibrierung (Offsetkalibrierung) sollte Rbias einstellbar sein. Es kann jedoch nur auf einen der beiden Kanäle kalibriert werden. Müssen beide Kanäle offset-kalibriert werden, sind Einstellpotenziometer zwischen Eingang des I/U-Wandlers und UDD oder besser Masse vorzusehen. Noch besser ist softwaremäßige Offsetkalibrierung.

Sollen die Betriebsspannungen erreicht werden, müssen ausgangsseitig sog. Rail-To-Rail-OPVs eingesetzt werden, beispielsweise LMV358.

AusgangsspannungsbereichUA0 .. 5 .. ± 5± 10± 15V
MittenspannungUM2,5 000V
ArbeitswiderstandRL2,17 4,358,713
StromeinstellwiderstandRbias4,35 2,663,143,34
Ausgangsstrom (auch durch RL)IL–1,3 .. 1 –0,6 .. 1,7–0,9 .. 1,4–1 .. 1,3mA
Dimensionierungsbeispiel für typische Einsatzfälle sowie JavaScript-Rechnung

Bipolare Gleichspannung mit Nullpunktfixierung

Statt mit einem weiteren Widerstand den innewohnenden Offsetfehler zu kompensieren bietet sich auch die Bezugnahme auf die Referenzspannung mittels Instrumentationsverstärker an. Das ergibt einen Potenzialversatz.
Download: Vektorformat
Potenzialversatzstufe hinter dem I/U-Wandler
Das sieht jedoch m. E. nicht sehr empfehlenswert aus, da aufwändig.
Je nach Beschaltung am Potenzialversatz steigt oder sinkt die Ausgangsspannung mit steigenden Kodewörtern.

Serielle Ansteuerung

Ich hätte es fast vergessen, den Schaltkreis muss man auch mit Daten füttern. Auch hier ist die Darstellung im Datenblatt zweifelhaft.
Download: Vektorformat
Datenfütterung
Nützlich zu wissen: Man muss nicht alle Bits senden; braucht man nur einen 8-bit-DAU, schickt man dem Schaltkreis einfach nur 8 statt 16 Bits.
Zu viele gesendete Bits werden vom IC ignoriert.
Man kommt nicht umhin, stets beide Kanäle zu aktualisieren, auch wenn sich nur an einem etwas ändert.
Beide Analogwerte erscheinen einen BCK-Takt nach der fallenden WS-Flanke, also gleichzeitig.

Mehrere TDA1543

Will man mehrere TDA1543 benutzen, dann bieten sich zwei Arten der Mehrfachausnutzung von Mikrocontroller-Pins an. Eine mikrocontroller-interne SPI-Einheit kann man dann leider nicht direkt benutzen!

Für massive oder exakt zeitgleiche Datenübertragung bietet es sich an, die Taktleitungen BCK und WS zu verbinden und die Daten von je einem Pin des Mikrocontrollers liefern zu lassen. Das erfordert etwas Bitschaufelei in der Firmware.

Bei geringerem Datenaufkommen erscheint es leichter, die Taktleitung BCK einzeln heranzuführen und die Leitungen DATA und WS parallel zu schalten. Will man das SPI doch benutzen, muss man einen Demultiplexer oder Dekoder einsetzen. Diese Verschaltung erlaubt außerdem unterschiedliche Aktualisierungsraten der D/A-Umsetzer.

Im Allgemeinen wird man jedoch entsprechend mehrkanalige D/A-Wandler einsetzen, bspw. Texas Instruments TLV5630 (8 Kanäle, 12 bit, 200 kHz/Kanal, 6-16 mA, 20-pol. SMD-Gehäuse, Spannungsausgänge, interne Referenzspannung).

Code-Beispiele

8051ATmega...
ADC2USB.A51 ab Label T0ISR trotz Ping-Pong-Verfahren für 48 kSa/s, allerdings nur einkanalig.steht noch aus???