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.
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.
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!
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
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.
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.
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.
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 …
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?
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?!
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.
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.
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.
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.