Forum: Mikrocontroller und Digitale Elektronik DAC AD5724 - Fragen dazu


von Benjamin Nels (Gast)


Lesenswert?

Liebe Leute, im Rahmen einer Projektarbeit soll ich mit meinem Arduino 
DUE und der SPI-Schnittstelle den 4-Kanal 12 BIT DAC AD5724 ansteuern.

Bin relativ neu in diesem Themengebiet und daher entschuldigt bitte, 
wenn die ein oder andere Frage für euch recht simpel erscheint. Viele 
Fragen konnte ich durch recherche selbst beantworten, jedoch sind einige 
offen. Ich hoffe ihr könnt mir weiter helfen.

Vorab, hier das Datenblatt zum DAC:

http://www.analog.com/media/en/technical-documentation/data-sheets/AD5724_5734_5754.pdf


1. Der Dac hat sowohl ein DAC_GND, GND und ein SIG_GND. Darf ich die 
Massen einfach mit einander verbinden? Siehe dazu auf S. 9, PIN 
20,21,18,19,15.

2. Auf S. 9 ist ebenfalls erklärt, was BIN/2COMP bedeutet, allerdings 
weis ich nicht genau, was das ist bzw. wofür das gut ist.

3.Auf S. 9, DVcc soll zwischen 2.7 - 5.5 V sein. D.h. der Dach benötigt 
extern eine Spannung in diesem Bereich, welche sollte ich nehmen? Bzw. 
wonach ergibt sich meine notwendige Spannung? Macht es einen 
Unterschied, ob ich 5 V nehme oder 2.7 V?


4. Auf S. 9, PIN 16 (SDO), wird eig. für meine Anwendung nicht benötigt, 
lasse ich diesen Pin dann offen oder ziehe ich den auf Masse?

5. Auf S. 18 steht: The output amplifiers are capable of generating both 
unipolar  and bipolar output voltages. They are capable of driving a 
load
of 2 kΩ in parallel with 4000 pF to GND. Was bedeutet das genau? Wozu 
brauche ich diese Info?

6. Auf S. 28 steht: When operating from a single +5 V supply or a dual 
±5 V
supply, an output range of +5 V or ±5 V is not achievable because
sufficient headroom for the output amplifier is not available. In
this situation, a reduced reference voltage can be used. For example,
a 2 V reference voltage produces an output range of +4 V or ±4 V,
and the 1 V of headroom is more than enough for full operation. A
standard value voltage reference of 2.048 V can be used to produce
output ranges of +4.096 V and ±4.096 V.

Was bedeutet das? Welche externe Spannung benötige ich, um +/- 5V zu 
bekommen?



Ich weis, das sind einige Fragen, dennoch hoffe ich, dass Ihr mir helfen 
könnt.

Besten Dank vorab.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Benjamin Nels schrieb:

> 1. Der Dac hat sowohl ein DAC_GND, GND und ein SIG_GND. Darf ich die
> Massen einfach mit einander verbinden? Siehe dazu auf S. 9, PIN
> 20,21,18,19,15.

LAYOUT GUIDELINES, S. 28

Es gibt da zwei grundlegende Strategien, um die Einkopplung digitaler
Signale in die Analog-Domain zu unterbinden.  Entweder sorgfältig
beide trennen und nur an einer Stelle miteinander in Verbindung
bringen, an der sichergestellt ist, dass keine Digitalströme über
den endlichen Kupferwiderstand Störspannungen in den Analogbereich
einkoppeln.

Alternativ eine möglichst großflächige, wenig durchbrochene
Masseebene; diese ist so niederimpedant, dass sie Störungen ebenfalls
minimiert.

Letzteres geht natürlich vorzugsweise bei Mehrlagenplatinen zu
realisieren; bei nur zwei Lagen ist diese Variante kaum machbar.

> 2. Auf S. 9 ist ebenfalls erklärt, was BIN/2COMP bedeutet, allerdings
> weis ich nicht genau, was das ist bzw. wofür das gut ist.

Tabellen 7 bis 9 auf Seite 21 dokumentieren die unterschiedlichen
Codierungen zwischen “Offset binary” und „Zweierkomplement“.

> 3.Auf S. 9, DVcc soll zwischen 2.7 - 5.5 V sein. D.h. der Dach benötigt
> extern eine Spannung in diesem Bereich, welche sollte ich nehmen?

Nach der Logik, mit der du ihn ansteuerst.  Der DAC lebt ja nicht
im luftleeren Raum.

> 4. Auf S. 9, PIN 16 (SDO), wird eig. für meine Anwendung nicht benötigt,
> lasse ich diesen Pin dann offen oder ziehe ich den auf Masse?

Es ist ein Ausgang: den solltest du niemals auf irgendein festes
Potenzial klemmen, denn wenn er selbst das entgegengesetzte Potenzial
treiben möchte, hast du einen satten Kurzschluss.

Also offen lassen.

> 5. Auf S. 18 steht: The output amplifiers are capable of generating both
> unipolar  and bipolar output voltages. They are capable of driving a
> load
> of 2 kΩ in parallel with 4000 pF to GND. Was bedeutet das genau? Wozu
> brauche ich diese Info?

Damit du weißt, was du mit dem DAC ansteuern kannst, ohne dass er
zusätzliche Verzerrungen erleidet.  Nochmal: der steht doch nicht im
luftleeren Raum!

> Was bedeutet das? Welche externe Spannung benötige ich, um +/- 5V zu
> bekommen?

Eine höhere, ist doch logisch.

Siehe Tabelle 1, “SPECIFICATIONS”, dort “Headroom Required”.

> Ich weis, das sind einige Fragen, dennoch hoffe ich, dass Ihr mir helfen
> könnt.

Ganz ehrlich: an deinen Fähigkeiten, ein Datenblatt von vorn bis
hinten durchzuarbeiten, solltest du arbeiten.  Die letzte Frage und
auch die mit den beiden Encodings sind nun wirklich gut dokumentiert.
Das Stichwort “Headroom” (für den Ausgangsspannungsbereich) wurde dir
ja ebenfalls bereits vorgegeben, danach hättest du direkt suchen können.

von Benjamin Nels (Gast)


Lesenswert?

Vielen Dank für deine Antworten, aber noch mal, ich bin kein Experte.

Jörg W. schrieb:
>> 2. Auf S. 9 ist ebenfalls erklärt, was BIN/2COMP bedeutet, allerdings
>> weis ich nicht genau, was das ist bzw. wofür das gut ist.
>
> Tabellen 7 bis 9 auf Seite 21 dokumentieren die unterschiedlichen
> Codierungen zwischen “Offset binary” und „Zweierkomplement“.

Ja, ich sehe Tabelle 7 bis 9, kann jedoch gar nichts damit anfangen. 
Meine Frage ist, wozu ich das brauche bzw. für was es ist?

Jörg W. schrieb:
>> 3.Auf S. 9, DVcc soll zwischen 2.7 - 5.5 V sein. D.h. der Dach benötigt
>> extern eine Spannung in diesem Bereich, welche sollte ich nehmen?
>
> Nach der Logik, mit der du ihn ansteuerst.  Der DAC lebt ja nicht
> im luftleeren Raum.

Auch mit der Antwort kann ich nicht viel anfangen. Wo ist der 
Unterschied, wenn ich 2.7V nehme oder 5v?

Jörg W. schrieb:
>> Was bedeutet das? Welche externe Spannung benötige ich, um +/- 5V zu
>> bekommen?
>
> Eine höhere, ist doch logisch.

Ja, aber um welchen Faktor höher? Oder ist dies egal?


Frage 4 und 5 sind gut beantwortet, danke!

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Benjamin Nels schrieb:

> Ja, ich sehe Tabelle 7 bis 9, kann jedoch gar nichts damit anfangen.
> Meine Frage ist, wozu ich das brauche bzw. für was es ist?

Nun, hast du denn noch gar keinen Plan, womit du deinen DAC später
mal an Daten befüttern willst und wie diese zustanden kommen?


> Auch mit der Antwort kann ich nicht viel anfangen. Wo ist der
> Unterschied, wenn ich 2.7V nehme oder 5v?

Korrekte Antwort: in der Höhe der Logikpegel.

Nützt dir jetzt sicherlich trotzdem nichts …

Auch hier: womit zum Geier™ willst du denn deinen DAC ansteuern?
Was auch immer es ist, es lebt doch nicht von der Luft allein, sondern
hat eine Betriebsspannung, und nach der richten sich die Logikpegel,
die es ausgibt.

Normalerweise sollte Vcc des DAC die gleiche Spannung sein wie die,
die dieses ansteuernde Teil versorgt.

> Jörg W. schrieb:
>>> Was bedeutet das? Welche externe Spannung benötige ich, um +/- 5V zu
>>> bekommen?
>>
>> Eine höhere, ist doch logisch.
>
> Ja, aber um welchen Faktor höher? Oder ist dies egal?

Im Datenblatt steht was von 0,9 V.  Also mindestens ±5,9 V brauchst
du, damit dir der Hersteller garantiert, dass du ±5 V am Ausgang
erreichen kannst.  (Typisch ist der “Headroom” nur 0,5 V, aber das
ist halt kein Wert, auf den du dich verlassen darfst.)

: Bearbeitet durch Moderator
von Benjamin Nels (Gast)


Lesenswert?

Jörg W. schrieb:
>> Ja, ich sehe Tabelle 7 bis 9, kann jedoch gar nichts damit anfangen.
>> Meine Frage ist, wozu ich das brauche bzw. für was es ist?
>
> Nun, hast du denn noch gar keinen Plan, womit du deinen DAC später
> mal an Daten befüttern willst und wie diese zustanden kommen?

Lieber Jörg, vielen Dank für die Antworten.

Naja an Daten füttern wird sein: Ein Arduino nehmen, die entsprechenden 
Befehle programmieren und dann an die SPI-Schnittstelle schicken.

Jörg W. schrieb:
> Auch hier: womit zum Geier™ willst du denn deinen DAC ansteuern?
> Was auch immer es ist, es lebt doch nicht von der Luft allein, sondern
> hat eine Betriebsspannung, und nach der richten sich die Logikpegel,
> die es ausgibt.

Ja aber die Betriebsspannung ist doch bereits für andere Pins, z.B. Pin 
1 negative Betriebsspannung (AVss) und AVdd für positive 
Betriebsspannung.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Benjamin Nels schrieb:

> Naja an Daten füttern wird sein: Ein Arduino nehmen, die entsprechenden
> Befehle programmieren und dann an die SPI-Schnittstelle schicken.

Da brauchst du jetzt ein paar Ideen über das interne Zahlenformat.

Mal auf 8 Bit bezogen (musst du dir auf 14 Bit dann gedanklich
erweitern), und davon ausgehend, dass du bipolare Ausgangsspannung
haben willst, hast du nun folgende Möglichkeiten, deinen DAC-Wert
in der Software festzulegen:

int8_t - vorzeichenbehaftete Ganzzahl im Zweierkomplement, das
Bitmuster 0x00 ist 0 V. Das Bitmuster 0x01 ist die kleinste und 0x7f
ist die größte positive Ausgangsspannung.  Das Bitmuster 0xFF ist
die betragsmäßig kleinste und 0x80 die betragsmäßig größte (am meisten
negative) Ausgangsspannung.

uint8_t - vorzeichenlose Ganzzahl, 0x00 ist die am meisten negative
Spannung, 0x80 ist 0 V, 0xFF ist die am meisten positive Spannung.

Letzteres wäre "offset binary" im Sinne deines DAC.

Für 14 Bit gibt's keinen direkten Datentyp, da musst du dir nun
überlegen, welche Variante dir einfacher fällt.

>> Was auch immer es ist, es lebt doch nicht von der Luft allein, sondern
>> hat eine Betriebsspannung, und nach der richten sich die Logikpegel,
>> die es ausgibt.
>
> Ja aber die Betriebsspannung ist doch bereits für andere Pins, z.B. Pin
> 1 negative Betriebsspannung (AVss) und AVdd für positive
> Betriebsspannung.

Das sind die Analog-Betriebsspannungen, die für die Ausgangsspannung
zuständig sind.  Da brauchst du mindestens ±5,9 V, wenn du am Ausgang
±5 V haben möchtest (kannst aber auch bspw. ±12 V einspeisen).

Für die Digitaleingänge ist DVcc zuständig, und die verbindest du mit
den 5 V deines Arduino.

von Benjamin Nels (Gast)


Lesenswert?

Jörg W. schrieb:
> Das sind die Analog-Betriebsspannungen, die für die Ausgangsspannung
> zuständig sind.  Da brauchst du mindestens ±5,9 V, wenn du am Ausgang
> ±5 V haben möchtest (kannst aber auch bspw. ±12 V einspeisen).
>
> Für die Digitaleingänge ist DVcc zuständig, und die verbindest du mit
> den 5 V deines Arduino

Super, vielen Dank!
Super, so mach ich das!


Jörg W. schrieb:
> Für 14 Bit gibt's keinen direkten Datentyp, da musst du dir nun
> überlegen, welche Variante dir einfacher fällt.

Du meinst denk ich 24 Bit, oder? Der DAC muss mit 24 Bits versorgt 
werden, da hätte ich jeweils 3 Befehle direkt hintereinander mit jeweils 
8 Bit versendet.

Jörg W. schrieb:
> Da brauchst du jetzt ein paar Ideen über das interne Zahlenformat.

Hmm, ich dachte ich nehme von Arduino den Befehl SPI.transfer(X), wobei 
X ein Byte bzw. 8 Bit sind.

So würde ich die Befehle losschicken.



Aber vielen Dank für deine hilfreichen Antworten.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Benjamin Nels schrieb:

> Jörg W. schrieb:
>> Für 14 Bit gibt's keinen direkten Datentyp, da musst du dir nun
>> überlegen, welche Variante dir einfacher fällt.
>
> Du meinst denk ich 24 Bit, oder?

Nein, ich meinte schon 14 Bit.  Ich hatte den DAC irrtümlich als
14bittig in Erinnerung.  Habe jetzt nochmal nachgesehen, der kann
bis zu 16 Bits, und nimmt entsprechend 16 Bit Digitalwerte als
Eingabe.  Das ist wieder einfach, da das direkt als int16_t in der
Software abbildbar ist.  (int16_t wäre dann die Darstellung im
Zweierkomplement, also BIN/2sCOMP auf "low".

> Der DAC muss mit 24 Bits versorgt
> werden, da hätte ich jeweils 3 Befehle direkt hintereinander mit jeweils
> 8 Bit versendet.

Naja: 3 mal 8 Bit ist korrekt, aber SYNC (welches hier als eine Art
Chip Select fungiert) muss natürlich über alle drei Bytes "low"
bleiben.

>> Da brauchst du jetzt ein paar Ideen über das interne Zahlenformat.
>
> Hmm, ich dachte ich nehme von Arduino den Befehl SPI.transfer(X), wobei
> X ein Byte bzw. 8 Bit sind.

Ja, aber irgendwie müssen doch deine Werte erstmal in diese Bytes
hineinkommen.  Ich verstehe dich hier noch nicht, du willst doch
sicher nicht nur permanent das gleiche Byte ausgeben wollen …

von Benjamin Nels (Gast)


Lesenswert?

Hallo Jörg, vielen Dank für deine Antworten.

Ich bin mittlerweile etwas weiter und habe die Theorie verstanden.

Ich habe auch das Datenblatt etwas genauer untersucht.


Eine Frage ist leider offen geblieben bzw. kann aus dem Datenblatt nicht 
ganz so einfach entnommen werden:

Für den SPI-Anschluss bzw. für den Code in Arduino benötige ich noch den 
SPI-Modus (Mode0,1,2,3).

Im Datenblatt finde ich dazu leider nichts, nimmt man dann irgendeinen 
oder wie geht man da vor?

von Benjamin Nels (Gast)


Lesenswert?

Benjamin Nels schrieb:
> Hallo Jörg, vielen Dank für deine Antworten.
>
> Ich bin mittlerweile etwas weiter und habe die Theorie verstanden.
>
> Ich habe auch das Datenblatt etwas genauer untersucht.
>
> Eine Frage ist leider offen geblieben bzw. kann aus dem Datenblatt nicht
> ganz so einfach entnommen werden:
>
> Für den SPI-Anschluss bzw. für den Code in Arduino benötige ich noch den
> SPI-Modus (Mode0,1,2,3).
>
> Im Datenblatt finde ich dazu leider nichts, nimmt man dann irgendeinen
> oder wie geht man da vor?

Also auf S. 9 steht zwar: ... Data transfered on the falling edge...je 
doch brauch ich noch CPHA und CPOL um den Modus zu bestimmen?!

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Ich denke, dass Mode 1 oder 2 beide gehen sollten.

von Benjamin Nels (Gast)


Lesenswert?

Jörg W. schrieb:
> Ich denke, dass Mode 1 oder 2 beide gehen sollten.

Um es zu verstehen, würde ich natürlich gerne wissen, wie du drauf 
kommst.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Beide übernehmen bei der fallenden Taktflanke die Daten im Slave.

Der Unterschied zwischen beiden ist vor allem das Idle-Potenzial von
SCK, das ist beim AD5724 laut Datenblatt jedoch nicht wichtig.

von Benjamin Nels (Gast)


Lesenswert?

Jörg W. schrieb:
> Beide übernehmen bei der fallenden Taktflanke die Daten im Slave.
>
> Der Unterschied zwischen beiden ist vor allem das Idle-Potenzial von
> SCK, das ist beim AD5724 laut Datenblatt jedoch nicht wichtig.

Lieber Jörg, vielen Dank für deine Antworten, die sehr hilfreich sind.

von Benjamin Nels (Gast)


Lesenswert?

Benjamin Nels schrieb:
> Jörg W. schrieb:
>> Beide übernehmen bei der fallenden Taktflanke die Daten im Slave.
>>
>> Der Unterschied zwischen beiden ist vor allem das Idle-Potenzial von
>> SCK, das ist beim AD5724 laut Datenblatt jedoch nicht wichtig.
>
> Lieber Jörg, vielen Dank für deine Antworten, die sehr hilfreich sind.

Lieber Jörg, vielen Dank für deine Antworten.


Es fehlt nur noch ein letzter Schritt bis zur Inbetriebnahme.

Nur zwei Fragen müssen nur noch geklärt werden.

Da der DAC unterschiedliche Massen hat (Signal_GND, Analog_GND und 
Digital_GND), wollte ich fragen, in wie weit das Problematisch 
erscheint, wenn ich die alle auf einen einzigen Punkt dann beziehen bzw. 
auf ein Potential lege? Klar, kann ich dadurch vll. irgendwelche 
Einkopplungen haben, aber funktionieren sollte es doch trotzdem, oder?


Und die andere Frage, wofür ich leider keine Antwort finde:

Was mache ich verdammt noch mal mit dem PIN CLR (Active low input).

In der Beschreibung steht folgendes:
ctive Low Input. Asserting this pin sets the DAC registers to zero
-scale code or midscale code (user
-selectable).

bzw.
CLR is an active low clear that allows the outputs to clear to
either zero -scale code or midscale code. The clear code value is
user -selectable via the CLR select bit of the control register
(see  the  Control Register  section). It is necessary to  maintain CLR 
low
for a minimum amount of time to complete  the operation  (see  Figure 
2). When the  CLR signal is returned high, the output  remains at the 
cleared value until a new value is programmed.  The outputs cannot 
update with a new value while the  CLR pin
is low. A clear operation can also be performed via the clear
command in the control register.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Benjamin Nels schrieb:

> …, in wie weit das Problematisch
> erscheint, wenn ich die alle auf einen einzigen Punkt dann beziehen bzw.
> auf ein Potential lege? Klar, kann ich dadurch vll. irgendwelche
> Einkopplungen haben, aber funktionieren sollte es doch trotzdem, oder?

Funktionieren auf jeden Fall, und sie müssen natürlich auch auf
jeden Fall irgendwo zusammengelegt werden.  Ansonsten habe ich ja
oben schon mal die beiden üblichen Strategien beschrieben, wie man
sie zusammenlegen kann: entweder mit einer großen, durchgehenden
Massefläche (vorzugsweise so, wenn man 4 Lagen oder mehr auf der
Platine zur Verfügung hat) oder an möglichst genau einem Punkt unter
dem DAC selbst, an dem sich Analog- und Digitalteil „treffen“.  Bei
letztgenannter Variante muss man aber genau draufschauen, wie das
mit der Stromversorgung und den zurückfließenden Strömen auf der
Masse funktioniert.

Eventuell ist es dann auch sinnvoller, den gemeinsamen Massepunkt
an der Einspeisung der Stromversorgung vorzusehen.

> Was mache ich verdammt noch mal mit dem PIN CLR (Active low input).

Ich würde ihn auf einen GPIO des Controllers legen und diesen nur
während der Initialisierung einmalig kurz (aber natürlich ausreichend
lange gemäß den Anforderungen) auf low ziehen, um „geordnete
Verhältnisse“ im DAC herzustellen.

Wenn du keinen GPIO mehr frei hast, kannst du ihn sicher auch fest
auf high ziehen (bspw. mit Widerstand nach DVcc), aber dann musst du
in der Software sicherstellen, dass auch wirklich alle Register mit
den gewünschten Einstellungen konfiguriert werden, da du dich nicht
unbedingt auf Reset-Werte verlassen kannst.

> A clear operation can also be performed via the clear
> command in the control register.

… was ein guter Hinweis ist, auf welche Weise du meine oben genannte
Anforderung in der Software erreichen kannst. ;-)

: Bearbeitet durch Moderator
von Benjamin Nels (Gast)


Lesenswert?

Besten dank lieber Jörg!!

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.