DAC Empfehlung für Arduino?

OP #7415313
Lesenswert?

Hallo, ich suche einen DAC (bevorzugt mit einer bestehenden Libary) um folgendes zu tun: Der Arduino soll ein 3-bit Signal das er an seinen Pins empfängt auswerten. je nach dem welches Signal angibt, soll die Ausgangspannung des DACs angepasst werden (also zum Beispiel bei einer dezimalen 4 -> 3V, bei einer 2 ->1V,...). Das Signal wechselt alle 80ms. Habt ihr eine Empfehlung für einen DAC, der möglichst schnell das Signal ausgibt. Die Auflösung sollte dabei mindestens 8 bit betrgen. Vielen Dank schonmal im Voraus!

Moderator (Firma: Titel) Persönliche Seite #7415333
Lesenswert?

Adrian A. schrieb:

Habt ihr eine Empfehlung für einen DAC, der möglichst schnell das Signal ausgibt.

Ist dir klar, dass dass die Forderung "möglichst schnell" automatisch "möglichst teuer" ergibt?

Fazit: man sucht nicht nach einem "möglichst schnellen" Bauteil, sondern einem, das "hinreichend schnell und bezahlbar" ist.

Und um das abwägen zu können, muss man wissen, woher das Signal kommt und was damit hinterher gemacht werden soll.

Du musst also passend zur "Mindestauflösung" eine "Mindestgeschwindigkeit" angeben.

Der Arduino soll ein 3-bit Signal das er an seinen Pins empfängt auswerten.

Schnarchlangsam. Nimm irgendeinen DAC.

Das Signal wechselt alle 80ms.

Schnarchlangsam. Nimm irgendeinen DAC.

(Firma: Schweigstill IT) Persönliche Seite #7415342
Lesenswert?

Adrian A. schrieb:

der möglichst schnell das Signal ausgibt.

"Möglichst schnell" bedeutet, dass Du offenbar einen DAC mit einer möglichst hohen Wandlungsrate und/oder Latenz suchst. Das ist jedoch im Zusammenhang mit einem Arduino ziemlich sinnlos, denn dessen Bearbeitungszeit für die Zustandsänderungen an den Eingangpins liegt ja schon bei etlichen Mikrosekunden. Folglich täte es jeder DAC ab 100 kS/s, vermutlich auch noch deutlich langsamer.

Oder legst Du allergrößten Wert darauf, einen sehr teuren DAC auf eine sehr teure Leiterplatte in Sonderausführung zu packen und das ganze aufwändig zu temperieren? Möchtest Du Dir bei "möglichst schnell" ggf. auch noch einen Haufen Bürokratie ans Bein binden, d.h. mit dem Wirtschaftministerium darüber verhandeln, ob Du den DAC überhaupt kaufen und importieren darfst? Ggf. musst Du regelmäßig über dessen Verbleib berichten. Gerade angesichts der aktuellen Lage in der Ukraine könnte es schon beträchtliche Auflagen geben, damit der DAC nicht in russische Hände gerät.

"Möglichst schnelle" DAC werden nämlich überwiegend z.B. in militärischen Radarsystemen o.ä. eingesetzt.

Die Auflösung sollte dabei mindestens 8 bit betrgen.

Das ist bei "normalen" DACs eine übliche Untergrenze. Damit dürfte fast jeder DAC passen.

Viel wichtiger ist jedoch die Art des gewünschten Ausgang: Strom oder Spannung, unipolar oder bipolar, mit oder ohne integriertem Verstärker, mit oder ohne interne Referenzspannung?

#7415368
Lesenswert?

Adrian A. schrieb:

Das Signal wechselt alle 80ms. Habt ihr eine Empfehlung für einen DAC, der möglichst schnell das Signal ausgibt. Die Auflösung sollte dabei mindestens 8 bit betrgen.

Wenn Du hier im Forum "möglichst schnell" sagst, hast Du sofort das Problem am Hals, dass Du die Geschwindgkeit konkret benennen sollst. Schlimmer noch, ruck zuck werden Dir Lösungen aus dem High-End Bereich geraten, die Du vermutlich nicht brauchst. Suche doch einfach nach "arduino dac", suche Dir einen schicken Wandler aus und schaue in das Datenblatt des verwendeten Typs, ob Dir die Änderungsgeschwindigkeit reicht. Bedenke auch, dass je nach gewähltem Interface SPI oder I²C auch eine gewisse Zeit für jeden Wechsel draufgeht, bei SPI tendentiell weniger. Eine fertige Lib wird es in fast allen Fällen geben. Für Arduino ist alles mögliche bereits umgesetzt.

Ich weiß es natürlich nicht, aber vermutlich kannst Du da so ziemlich ALLES nehmen.

Beitrag #7415372 wurde von einem Moderator gelöscht.
#7415378
Lesenswert?

Adrian A. schrieb:

Die Auflösung sollte dabei mindestens 8 bit betrgen.

Wenn du nur ein 3 Bit Signal hast, warum sollte dann die Auflösung 8 Bit betragen?

Außerdem: Der höchste Zustand eines 3 Eingangs entspricht 7. Wenn du hierfür (wie in der Annahme einer Extrapolation) am Ausgang des DAC 6V haben möchtest wird das i.a.R. nicht funktionieren, hierfür mußt du dem DAC einen Verstärker nachschalten.

Wenn du also "nur" die 3 Bit "analogisieren" möchtest, reichen dir für die Auflösung dann sogar nur 3 Bit.

Natürlich kannst du ein analoges Signal mittels PWM und nachgeschaltetem Tiefpassfilter erreichen, für den Fall jedoch, dass du tatsächlich nur die 3 Bit analogisieren möchtest würde ein R2R Netzwerk (mit auch hier nachgeschaltetem Verstärker) schon reichen.

#7415389
Lesenswert?

Adrian A. schrieb:

welche Gruppe gerade ausgewählt ist und dann eine vorher definierte SPannung ausgeben. Die Gruppen "fordern" unterschiedliche Spannungen.

Also gibst du nicht eine Spannung pro Gruppe aus, sondern einen Spannungsverlauf! Das wäre jetzt nicht unwichtig gewesen...

Adrian A. schrieb:

Der Arduino

Dann hat DER Arduino bestimmt 8-Pins frei => R2R-Netzwerk. Einfach, genau und schnell. Kleinen OPV dahinter und dann kannst du deine Melodien ausgeben.

Moderator (Firma: Titel) Persönliche Seite #7415390
Lesenswert?

Adrian A. schrieb:

Die verschiedenen Signale des 3 bit signals stehen für Gruppen. Der Arduino soll erkennen, welche Gruppe gerade ausgewählt ist und dann eine vorher definierte SPannung ausgeben. Die Gruppen "fordern" unterschiedliche Spannungen.

Wenn das mit dem gewichteten Widerständen nicht möglich ist, dann könnte ich mir aber auch

  1. einen Spannungsteiler und einen Analog-Multiplexer oder
  2. einen Digitalmultiplexer und einem nachfolgenden Spannungsteiler

vorstellen. Dann muss ich mangels µC nichts programmieren und bin zudem "so schnell wie möglich".

1
1.
2
   5V ---o----  
3
         |        E2 E1 E0
4
         R1       |  |  |
5
         |     .----------.
6
         o-----|          |
7
         |     |          |           
8
         R2    | 8:1 Mux  |
9
         |     | analog   |
10
         o-----|          |--------- Uout
11
         :          :
12
         :          :
13
         o-----|          |
14
         |     |          |           
15
         R8    |          |
16
         |     |          |
17
         o-----|          |
18
         |     '----------'
19
         R9    
20
         |     
21
 GND ----o----
22

23
2.
24
5V ------------o--------------------------------
25
               |
26
        .-----------.
27
        |           |---->|--R1--. 
28
E2 -----|           |---->|--R2--o              
29
        |           |---->|--R3--o   
30
E1 -----|           |---->|--R4--o 
31
        |           |---->|--R5--o 
32
E0 -----|           |---->|--R6--o 
33
        |           |---->|--R7--o 
34
        |           |---->|--R8--o-----> Uout
35
        '-----------'            |
36
               |                R9
37
               |                 |
38
GND -----------o-----------------o------------
#7415395
Lesenswert?

Ingo L. schrieb:

Dann hat DER Arduino bestimmt 8-Pins frei => R2R-Netzwerk. Einfach, genau und schnell.

Kannst voll knicken. Mit üblichen 1% Widerständen schaffst Du nichtmal 7 Bit Genauigkeit. Von den Fehlern durch den Innenwiderstand der 8 Treiberstufen und Störungen auf GND/VCC mal ganz abgesehen.

Eine PWM hat den Vorteil, daß sie automatisch streng monoton ist. Und mit einem Single-Gate hinter dem MC kann man sie bequem mit sauberem GND/VREF versorgen. Bei 16MHz F_CPU hat die 8Bit-PWM 62kHz, die kann man bequem wegfiltern.

(Firma: Schweigstill IT) Persönliche Seite #7415404
Lesenswert?

Ingo L. schrieb:

Dann hat DER Arduino bestimmt 8-Pins frei => R2R-Netzwerk. Einfach, genau und schnell. Kleinen OPV dahinter und dann kannst du deine Melodien ausgeben.

Ein selbstgebasteltes R2R-Netzwerk ist alles, aber nicht genau. Bei 8 Bit Auflösung und z.B. 1%-Widerständen wäre nicht einmal die Monotonie sichergestellt. Und der Verdrahtungsaufwand wäre auch höher als bei einem schnöden 8-Bit-DAC mit Paralleleingang. Die uralte Gurke ZN426 wäre hierfür perfekt.

Wir wissen aber noch nicht, welche Anforderungen an das Ausgangssignal bestehen. Wohin soll es geführt werden? Soll der Ausgang kurzschlussfest und/oder strombegrenzt sein. Welches ist der maximale Ausgangsspannungsbereich? Ggf. wäre auch ein DAC mit entsprechender Signalaufbereitung am Ausgang sinnvoll, da sich damit sehr viel Außenbeschaltung einsparen lässt. Mit DACs wie z.B. AD5753 oder AD 5758 lassen sich äußerst kompakte Wandler mit per SW konfigurierbarem Ausgang (Spannung/Strom, unipolar/bipolar, usw.) realisieren, aber der Baustein ist so mächtig, dass man ihn nicht mal in fünf Minuten konfiguriert bekommt.

Bevor hier irgendwelche Unterstellungen bezüglich Kanonen auf Spatzen kommen: ich empfehle nicht unbedingt einen AD575x, sondern zeige nur auf, wie kompakt sich heute die Signalaufbereitung integrieren lässt.

OP #7415406
Lesenswert?

Lothar M. schrieb:

Wenn das mit dem gewichteten Widerständen nicht möglich ist, dann könnte ich mir aber auch

  1. einen Spannungsteiler und einen Analog-Multiplexer oder
  2. einen Digitalmultiplexer und einem nachfolgenden Spannungsteiler

Das ist auch ein Ansatz von mir gewesen, jedoch sollen die Spannungen der einzelnen "Gruppen" auch veränderbar sein (mindestens 3 verschiedene Werte je Gruppe). Das wären dann einige Wierstände und für ein neues Projekt müsste ich die Widerstände alle neu dimensionieren,...

Moderator (Firma: Titel) Persönliche Seite #7415407
Lesenswert?

Adrian A. schrieb:

Der Arduino soll erkennen, welche Gruppe gerade ausgewählt ist und dann eine vorher definierte SPannung ausgeben.

Und wie "möglichst schnell" muss diese Gruppenauswahl geschehen?

Peter D. schrieb:

Bei 16MHz F_CPU hat die 8Bit-PWM 62kHz, die kann man bequem wegfiltern.

Allerdings ist man da dann in der Analogtechnik unterwegs und muss Dämpfungen und Grenzfrequenzen und so ein Zeug herleiten:

Da ist es dann gut, wenn man weiß, dass 1 Bit zusätzlicher Auflösung dem Faktor 2 und damit 6 dB entsprechen.

schaffst Du nichtmal 7 Bit Genauigkeit.

Würde mich nicht sehr wundern, wenn das auch schon reichen täte... ;-)

#7415413
Lesenswert?

Adrian A. schrieb:

Das ist auch ein Ansatz von mir gewesen, jedoch sollen die Spannungen der einzelnen "Gruppen" auch veränderbar sein (mindestens 3 verschiedene Werte je Gruppe). Das wären dann einige Wierstände und für ein neues Projekt müsste ich die Widerstände alle neu dimensionieren,...

Solange du nicht mehr Infos hinsichtlich Geschwindigkeit und Genauigkeit rausrückst, stochern wir im Nebel und du bekommst u.U. unnütze Lösungen unterbreitet.

#7415427
Lesenswert?

OP #7415435
Lesenswert?

Andreas S. schrieb:

"Möglichst schnell" bedeutet, dass Du offenbar einen DAC mit einer möglichst hohen Wandlungsrate und/oder Latenz suchst. Das ist jedoch im Zusammenhang mit einem Arduino ziemlich sinnlos, denn dessen Bearbeitungszeit für die Zustandsänderungen an den Eingangpins liegt ja schon bei etlichen Mikrosekunden. Folglich täte es jeder DAC ab 100 kS/s, vermutlich auch noch deutlich langsamer.

Kann ich mir ausrechnen wielange ein Arduino Nano braucht um das 3 bit Signal zu verwerten und dann etwas schalten/Daten an einen DAC senden,...?

Moderator (Firma: Titel) Persönliche Seite #7415438
Lesenswert?

Adrian A. schrieb:

Kann ich mir ausrechnen wielange ein Arduino Nano braucht um das 3 bit Signal zu verwerten und dann etwas schalten/Daten an einen DAC senden,...?

Rechnen ist schwierig, aber geh mal bei Verwendung eines SPI-DACs von 100µs aus. Dann hast du genügend Luft für die lansgsamen IO-Routinen des Arduino.

Aber wie wäre es, wenn du einfach mal sagst, wie lange das dauern darf?

Oder viel, viel einfacher, dass du beantwortest, was ich schon lange mal gefragt habe,

als ich schrieb:

Und um das abwägen zu können, muss man wissen, woher das Signal kommt und was damit hinterher gemacht werden soll.

#7415454
Lesenswert?

Adrian A. schrieb:

Das signal kommt von einem IC und die Spannungen werden dann vor einem ADC eingespeist

Also: Ein "IC" gibt ein Digital-Signal aus, das willst du in einem Arduino einlesen, damit einen DAC ansteuern der ein Analog-signal draus macht, und das Analog-Signal in einen ADC einspeisen, der es dann wieder digitalisiert?

Warum bleibst du da nicht durchgängig digital?

OP #7415468
Lesenswert?

Εrnst B. schrieb:

Der macht genau das. 8 Analoge Eingangssignale, die du per drei digitalen Steuereingängen auswählen und auf einen analogen Ausgang schalten kannst.

Ja, da sProblem ist jedoch, dass ich mehr als 8 Werte brauche, da die 8 Messignale nicht konstant sind und unabhängig voneinder verändert werden sollen, während der MUX in einem PEriodisch durchschaltet

Moderator (Firma: Titel) Persönliche Seite #7415478
Lesenswert?

Ingo L. schrieb:

In der Zeit berechnest du die Laufbahn eines Kometen für die nächsten 100 Jahre ganz nebenbei...

Aller in Frage kommenden Kometen...

der hat für 3 Kanäle aktualisieren ~3µs benötigt (settling Time).

Das ist aber nur die Zeit, die die Ausgänge nach dem Beschreiben der Ausgangsregister zum Stabilisieren brauchen.

Adrian A. schrieb:

max 10 ms dauern (je schneller desto sicherer).

Adrian A. schrieb:

Optimal wäre alles unter 1ms

Baust du öfters unnötigerweise eine 10-fache Reserve ein?

Adrian A. schrieb:

Weil ich mit meiner Schaltung ein analoge Signale simulieren möchte.

Nächste Salamischeibe: wofür?

Mein vorschlag: beschreibe mal mit Bauteilnamen und Typen und Herstellern und so viel Informationen wie du hast, was die eigentliche Aufgabe ist, wer das Signal ausgibt, wer das Signal bekommt und wie der darauf reagiert. Und dann kann dir gezielt geholfen werden.

Derzeit kann man nur sagen: nimm irgendeinen DAC mit irgendeiner Schnittstelle und das wird schon fluffen, wenn du nicht noch einen Bock und ein delay() ind die Software einbaust.

#7415479
Lesenswert?

Adrian A. schrieb:

Ja, da sProblem ist jedoch, dass ich mehr als 8 Werte brauche, da die 8 Messignale nicht konstant sind und unabhängig voneinder verändert werden sollen, während der MUX in einem PEriodisch durchschaltet

Hänge 8 Potis an VCC und GND und schalte die Schleifer periodisch mit einem analogen MUX um. Sollen sich die 8 analogen Signale selber ändern, nimm 8 Funktionisgeneratoren und schalte die periodisch über den MUX auf deinen ADC.

#7415486
Lesenswert?

Adrian A. schrieb:

und unabhängig voneinder verändert werden sollen,

Irgendwie versteh ich das Problem nicht... Wenn du die Werte analog verändern willst, machst du das vor dem MUX, wenn du sie digital verändern willst, nach dem ADC?

Wenn man nur einen Hammer hat, schaut jedes Problem wie ein Nagel aus. Wenn man grad frisch erfahren hat, dass es sowas Tolles wie DACs gibt, schaut jedes Problem aus, als müsste man es damit lösen.

Der beste Lösungsweg kommt so aber leider seltenst heraus.

#7415518
Lesenswert?

Ingo L. schrieb:

Adrian A. schrieb:

Das ist auch ein Ansatz von mir gewesen, [...]

Solange du nicht mehr Infos hinsichtlich Geschwindigkeit und Genauigkeit rausrückst, stochern wir im Nebel und du bekommst u.U. unnütze Lösungen unterbreitet.

Antworten mit dem Credo "Ich habe auch mal was gehört ..." oder "Ich weis nichts Genaues nicht ..." sind hier doch Programm.

Der überwiegende Anteil der Antworten SIND unnütz, nicht nur 'unter Umständen'. Aber das juckt hier keinen: Hauptsache man kann hier einen auf großen Zampano machen und sich selbst aufpupsen.

Nicht TO Adrian ist das Problem, er fragt halt so gut er kann - denkt sich u.U. einen unbrauchbaren Ansatz aus, einfach weil er es nicht besser weis -- aber die ganzen Torfnasen hier benutzen das als willkommene Chance um sich aufzuplustern und locken den TO (wissentlich?) mit unnützen Vorschlägen auf eine falsche Fährte ...

#7415523
Lesenswert?

Joe L. schrieb:

Nicht TO Adrian ist das Problem

Doch, eindeutig

denkt sich u.U. einen unbrauchbaren Ansatz aus, einfach weil er es nicht besser weis

Das wäre verschmerzbar, wenn es fachlich dünn wird. Er ist aber nicht einmal in der Lage, seine Aufgabe in Worte zu fassen, damit es andere auch verstehen bzw. rückt nur scheibchenweise damit raus. Man geht doch auch nicht für 5 Artikel 5x hintereinander in den Supermarkt.

Hauptsache man kann hier einen auf großen Zampano machen und sich selbst aufpupsen.

Lange nicht so einen Unsinn gelesen...

#7415526
Lesenswert?

Harald A. schrieb:

Suche doch einfach nach "arduino dac", suche Dir einen schicken Wandler aus und schaue in das Datenblatt des verwendeten Typs, ob Dir die Änderungsgeschwindigkeit reicht.

Adrian A. schrieb:

Du würdest also SPI als Schnittstelle verwenden?

Nimm einen Arduino Due, der hat zwei echte DACs integriert. Kein SPI, keine extra Platine und kein Multiplexer nötig. Einfach mit analogWrite() den Wert auf 12Bit genau ausgeben ...

OP #7415531
Lesenswert?

Εrnst B. schrieb:

Adrian A. schrieb:

und unabhängig voneinder verändert werden sollen,

Irgendwie versteh ich das Problem nicht... Wenn du die Werte analog verändern willst, machst du das vor dem MUX, wenn du sie digital verändern willst, nach dem ADC?

Wenn man nur einen Hammer hat, schaut jedes Problem wie ein Nagel aus. Wenn man grad frisch erfahren hat, dass es sowas Tolles wie DACs gibt, schaut jedes Problem aus, als müsste man es damit lösen.

Der beste Lösungsweg kommt so aber leider seltenst heraus.

Ich möchte damit 8 Sensoren simulieren. Der IC wählt dabei immer den Sensor aus den er braucht indem er de MUX steuert. Deshalb vor dem MUX.

Beitrag #7415604 wurde von einem Moderator gelöscht.
Beitrag #7415611 wurde von einem Moderator gelöscht.
Beitrag #7415612 wurde von einem Moderator gelöscht.
Gast #7416068
Lesenswert?

Adrian A. schrieb:

Das wäre natürlich das einfachste, aber auf der Webseite steht folgendes: "Please note that DAC output range is actually from 0.55 V to 2.75 V only."

Na und? Dafür gibt es Operationsverstärker. Den brauchst du wahrscheinlich sowieso, weil die Ausgänge von DAC üblicherweise kaum belastbar sind.

Leider kannst oder willst du deinen Anwendungsfall nicht detailliert genug beschreiben. Bisher habe ich den Eindruck, dass ein Satz Trimmpotis mit einem nachfolgenden analog-Multiplexer erheblich einfacher und besser geeignet ist, als Mikrocontroller mit DAC.

Schau dir den CD4051 an: https://www.ti.com/lit/ds/symlink/cd4053b.pdf

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren