Ist es möglich, zwei 8-Bit-DACs miteinander zu kombinieren, um einen 16-Bit-DAC zu erstellen, muss ein Byte des 16-Bit-Wortes an jeden von ihnen gesendet werden

Bei zwei DACs, von denen einer D0-D7 und der andere D8-D15 sendet, sollte bei einer Stromversorgung von 5 V, wenn 5 V zum Ausgang des 2. DAC addiert und dann die beiden DAC-Ausgänge summiert werden, ein 16-Bit-DAC resultieren bestehend aus zwei 8-Bit-DACs.

Das einzige Problem ist, dass, wenn der zweite DAC einen 0x00-Eingang hat, die 5-V-Addition aufgehoben werden muss, was ich nicht sicher bin. Die Summierung kann durch einen Summierverstärker erfolgen. Die Schaltung muss nur bis zu einigen 10 kHz arbeiten.

Ist an dieser Idee etwas grundsätzlich falsch?

An Ihrer Idee ist grundsätzlich nichts auszusetzen, aber Sie müssen mit einem Design von relativer Komplexität umgehen. Erstens geht es nicht nur darum, die Ergebnisse im Analogsignal zu summieren. Vor der Summe müssen Sie den MSB-DAC um den Faktor x256 verstärken, da jedes Bit des MSB-DAC 256 Bit des LSB-DAC entspricht. Dann müssen Sie diesen Wert in LSB DAC Fullscale Volt ausgleichen, dann können Sie beide addieren.
Ganz zu schweigen von Rauschen, Verzerrungen, Versorgungsfähigkeit...
Wenn es so einfach wäre, würde es jeder tun ... Theoretisch können Sie zwei DACs kombinieren (Sie müssen jedoch eher multiplizieren als addieren). Realistisch gesehen werden Sie leistungsmäßig nicht in die Nähe von 16 Bit kommen. Kaufen Sie einfach einen 16-Bit-DAC.
@PDuarte Ist eine Verrechnung wirklich notwendig? So wie ich es sehe, sollte es nur die 256-Verstärkung zum MSB-DAC, gefolgt vom Hinzufügen, tun. (und ich stimme zu, dass das Design Probleme haben würde, eine 16-Bit-"Wiedergabetreue" zu erreichen)
Der Offset wird benötigt, wenn der 256x multiplizierte Wert zu groß wird. Angenommen, die 8-Bit-DACs geben 1 Volt im Vollausschlag aus. Multiplizieren Sie das mit 256 ergibt 256 V. Nicht so praktisch ;-). Mit einem DAC, der Strom liefert, ist es einfacher, dann können Sie die Stromausgänge einfach parallel schalten (vorausgesetzt, es gibt eine Last, die die Spannung auf dem richtigen Wert hält, eine virtuelle Masse oder ähnliches).
Was wäre, wenn Sie das Signal nicht in obere und untere 8 Bits aufteilen, sondern es als progressive Zwei-Pass-Näherung implementieren (wie progressives JPG- oder PNG-Rendering), wobei DAC1 (ungefähr) die geradzahligen Bits bereitstellt und DAC2 mit läuft halbe Kraft mit (wieder ungefähr) den ungeradzahligen Bits. Die Mathematik wäre chaotisch, aber ich denke, Sie können 15 Bit Signalgenauigkeit daraus ziehen.
@FooBar Ich verstehe nicht, wie das funktionieren würde, es sei denn, Sie hätten am Ende einen 16-Bit-Digitalprozessor, um die "unordentliche" Mathematik durchzuführen. Wenn Sie nur die geradzahligen Bits verarbeiten, erhalten Sie keine gute Annäherung an das Signal. (Wenn Sie z. B. 1010 in 11 und 00 aufteilen, gelangen Sie von 60 % auf 100 % + 0 %.) Wenn Sie die Anzahl der Bits halbieren und eine Annäherung erhalten möchten, lassen Sie sie am Ende fallen: die beste analoge bis progressive Bildwiedergabe ist genau das, was ursprünglich vorgeschlagen wurde.
@SarahG Würden Sie die ungeraden Ziffern nicht mit 66% und die geraden mit 33% "gewichten"? Was ich meine ist, dass der ungerade DAC-Ausgang 66% des Signals beitragen würde und der gerade 33%. Vielleicht fehlt mir etwas, aber in Anbetracht dessen würde Ihr Beispiel die richtige Ausgabe liefern. Aufsteigend auf 16 Bit: 1010101010101010 = 43690 und 43690/65535 = 66,66 %
@RichardSmith Versuchen Sie fast jede andere Nummer. Beispiel: 0000000011110000 = 240,240 / 65535 = 0,0037. Beide Hälften teilen sich auf als 00001100 = 12. 12 / 255 = 0,047. In diesem Beispiel weicht das Ergebnis um eine Größenordnung ab.

Antworten (8)

Es ist möglich, aber es wird nicht gut funktionieren.

Erstens gibt es das Problem, die beiden Ausgänge zu kombinieren, wobei einer genau 1/256 des anderen skaliert ist. (Ob Sie das eine um 1/256 dämpfen, das andere um 256 verstärken oder eine andere Anordnung, z. B. *16 und /16, spielt keine Rolle).

Das große Problem ist jedoch, dass ein 8-Bit-DAC wahrscheinlich auf etwas besser als 8 Bit genau ist: Er kann eine „DNL“-Spezifikation von 1/4 LSB und eine „INL“-Spezifikation von 1/2 LSB haben. Dies sind die „Differential“- und „Integral“-Nichtlinearitätsspezifikationen und sind ein Maß dafür, wie groß jeder Schritt zwischen benachbarten Codes wirklich ist. (DNL bietet eine Garantie zwischen zwei beliebigen benachbarten Codes, INL zwischen zwei beliebigen Codes über den gesamten Bereich des DAC).

Im Idealfall entspricht jeder Schritt genau 1/256 des Skalenendwerts; aber eine 1/4LSB DNL-Spezifikation zeigt an, dass benachbarte Stufen von diesem Ideal um 25 % abweichen können – dies ist normalerweise ein akzeptables Verhalten in einem DAC.

Das Problem ist, dass ein 0,25-LSB-Fehler in Ihrem MSB-DAC zu einem 64-LSB-Fehler (1/4 des gesamten Bereichs) in Ihrem LSB-DAC beiträgt!

Mit anderen Worten, Ihr 16-Bit-DAC hat die Linearität und Verzerrung eines 10-Bit-DAC, was für die meisten Anwendungen eines 16-Bit-DAC nicht akzeptabel ist.

Wenn Sie jetzt einen 8-Bit-DAC finden, der eine 16-Bit-Genauigkeit garantiert (INL und DNL besser als 1/256 LSB), dann machen Sie weiter: Sie sind jedoch nicht wirtschaftlich herzustellen, daher ist der einzige Weg, einen zu bekommen, anzufangen mit einem 16-Bit-DAC!

Eine andere Antwort schlägt "Softwarekompensation" vor ... die genauen Fehler in Ihrem MSB-DAC abzubilden und sie durch Hinzufügen des inversen Fehlers zum LSB-DAC zu kompensieren: etwas, worüber Audioingenieure in den Tagen, als 16-Bit-DACs teuer waren, lange nachgedacht haben. ..

Kurz gesagt, es kann bis zu einem gewissen Grad zum Laufen gebracht werden, aber wenn der 8-Bit-DAC mit der Temperatur oder dem Alter driftet (er wurde wahrscheinlich nicht dafür entwickelt, ultrastabil zu sein), ist die Kompensation nicht mehr genau genug, um sich zu lohnen Komplexität und Kosten.

Ihr Argument zur Drift ist gut und würde diese Methode unpraktisch machen, wenn Sie versuchen, durch Kombinieren von zwei 8-Bit-DACs beispielsweise eine 20-Bit-Präzision zu erzielen. Ich würde jedoch denken, dass der Versuch, 13-14 nutzbare Bits aus 2x8 zu erhalten, machbar wäre.

Ein 8-Bit-DAC kann ausgeben 2 8 = 256 verschiedene Werte.

Ein 16-Bit-DAC kann ausgeben 2 16 = 65536 verschiedene Werte.

Beachten Sie, wie sich das multipliziert, es ist keine Addition (wie es passieren würde, wenn Sie die Ausgänge von zwei 8-Bit-DACs summieren).

Wenn ich zwei 8-Bit-DACs nehmen und ihre Ausgänge summieren würde, was wären die möglichen Werte?

Antwort: 0, 1, 2, ..., 256, 257, 258, ....511, 512 und fertig !

Ein 16-Bit-DAC kann 0,1,2 ...,65535, 65536, das ist viel mehr!

Theoretisch ist das möglich, aber dann müssen Sie die Ausgabe eines der 8-Bit-DACs mit genau 256 multiplizieren und die LSB-Bits mit dem 1x-DAC und die MSB-Bits mit dem 256x-DAC verbinden. Aber wundern Sie sich nicht, wenn Genauigkeit und Linearität darunter leiden!

Hmm, ich verstehe. das war mir nicht klar...
Wenn man einen Multiplikationsfaktor von weniger als 256 verwendet, kann man die Nichtlinearität in der Software kompensieren. Die differentielle Nichtlinearität ist mindestens gleich der Schrittgröße des kleineren DAC, aber wenn man zwei 8-Bit-DACs verwendet, könnte man einen monotonen 14-Bit-DAC realistisch handhaben, wenn man genau bestimmen kann, welche Kompensationsfaktoren anzuwenden sind
Sie können die Ausgabe eines DAC auch mit 257/256 multiplizieren und summieren, wenn Ihnen die mathematische Herausforderung gefällt, herauszufinden, welche Werte an welchen DAC gesendet werden müssen, um eine bestimmte Gesamtausgabe zu erhalten. Ansonsten sind die Aufrufe die gleichen :)
@hobbs: Ich glaube nicht, dass das ganz funktioniert. Wenn ein DAC 0 bis 65280 in Schritten von 256 und die anderen 0 bis 65535 in Schritten von 257 ausgibt, kann man alle Ausgangswerte zwischen 65280 und 65535 erreichen, aber keinen im Bereich erreichen zwischen zB 32639 und 32768. Das ist nicht wirklich viel besser als ein einzelner 8-Bit-DAC.
@supercat du hast recht, ich habe die mathe aufgelockert. Ich denke, es gibt eine Version, die funktioniert, wenn Sie negativ werden können, aber es funktioniert nicht so, wie ich es geschrieben habe. War sowieso hauptsächlich ein Versuch des Humors.

Die Technik ist praktikabel, wenn die Vollskalenspannung des "inneren" DAC größer als die Schrittweite des äußeren DAC ist und man eine Möglichkeit hat, die von verschiedenen Ausgangscodes erzeugten Ausgangsspannungen genau (wenn auch nicht unbedingt schnell) zu messen und anzuwenden geeignete Linearitätsanpassungen in der Software. Wenn die Vollskalenspannung des inneren DAC kleiner sein könnte als die schlimmstmögliche Schrittweite zwischen zwei Spannungen am äußeren DAC (wobei zu berücksichtigen ist, dass die Schritte selten absolut vollkommen gleichförmig sind), kann es zu Spannungen kommen, die mit keinem erreicht werden können Kombination von Innen- und Außen-DAC-Werten. Stellt man jedoch sicher, dass sich die Bereiche überlappen, kann die Verwendung einer Software-Linearitätskorrektur gute Ergebnisse ermöglichen.

Übrigens emuliert das alte PSOC-Chipdesign von Cypress (neuere kenne ich nicht) einen Neun-Bit-DAC mit zwei Sechs-Bit-DACs, die relativ zueinander skaliert sind. Es verwendet keine Software-Linearitätskorrektur, sondern versucht nur, einem Sechs-Bit-DAC drei Bit Präzision hinzuzufügen. Der Versuch, einem beliebigen DAC mehr als 3-4 Bit Präzision hinzuzufügen, ohne eine Softwarekompensation zu verwenden, wird wahrscheinlich nicht sehr gut funktionieren.

Vor 21 Jahren, als ich ein armer College-Student war (und mir nur 8-Bit-DACs leisten konnte), verwendete ich diese Technik, um zwei 8-Bit-DACs zu einem höheren Bit-DAC zu kombinieren, da ich wusste, dass ich keine 16-Bit-Genauigkeit erhalten würde, weil von integraler Nichtlinearität (INL) und differentieller Nichtlinearität (DNL). DNL auf dem höchstwertigen Byte-DAC ist in diesem Fall der Killer; Wenn Sie INL haben, ist die Ausgabe verzerrt, aber immer noch glatt. DNL diktiert die Größe von einem DAC-Schritt zum nächsten, und wenn sie genug variiert, sehen Sie Diskontinuitäten oder Umkehrungen, wenn Sie 8-Bit-Grenzen überschreiten: 0x07ff <-> 0x0800 zum Beispiel, wenn sich der MSB-DAC von 0x07 <-> ändert 0x08, könnte es sich nicht um die idealen 256 Zählwerte des LSB-DAC ändern, sondern um 384 Zählwerte oder 128 Zählwerte (±1/2 seines eigenen niedrigstwertigen Bits). Ein guter DAC wird nur 1/2 LSB DNL haben, ein mittelmäßiger DAC wird eine schlechtere DNL haben, obwohl es schwieriger wird, je höher die Auflösung ist, also sollte es ziemlich einfach sein, 1/2 LSB DNL in einem 8-Bit-DAC zu finden, aber nicht in einem 16-Bit-DAC.

Ich erinnere mich nicht, was die effektive Auflösung in meinem Fall war, vielleicht 12 oder 13 Bit, und ich musste die Verstärkung der 2. Stufe manuell mit einem Potentiometer einstellen.

Ich habe dies in der Praxis auf einem HPLC-UV-Detektor gesehen, um den Dynamikbereich zu erhöhen. Einer der DACs ist um die benötigte Menge versetzt. Sprich der 1. DAC handhabt 0 bis 10 V und der 2. handhabt 10 bis 20 Volt.

Würde dies nicht nur ein bisschen hinzufügen?
Ja, das fügt nur ein bisschen hinzu. Audiotechnisch kann es jedoch ein sehr gelungener Kompromiss sein. Ein "gerade" DAC hat ein großes Problem bei halber Skalierung, wo alle 16 Bits gleichzeitig schalten - das MSB schaltet ein, alle anderen schalten aus, und dort wird der größte einzelne DNL-Fehler liegen. Bei einem Audiosignal befindet sich dieser größte Fehler auch an der ungünstigsten Stelle - dem Nulldurchgang - und verfälscht selbst die leisesten Töne. Wenn nun ein DAC positive Signale und der andere negative Signale verarbeitet, können Sie dieses Problem vollständig vermeiden. Der legendäre Burr-Brown PCM-63 DAC nutzte dies gut aus.

Ich habe eine andere Meinung dazu ... Verwenden Sie einfach einen 8-Bit-DAC. Sie haben erwähnt, dass es nur bis zu einigen 10 Hz funktionieren muss, sodass Sie nur einen DAC (der wahrscheinlich bis zu 100 kHz arbeiten kann) verwenden und als Modulator verwenden können. Die Grundidee besteht darin, 256 Zyklen des MSB-Werts plus das Ein-Bit-Überlauf-/Übertrags-Flag von einem 8-Bit-Akkumulator auszugeben, zu dem das LSB in jedem Zyklus hinzugefügt wird. Sie erhalten nur 254 als maximales MSB wegen des zusätzlichen „modulierenden Bits“ vom LSB, aber das reduziert die Reichweite nicht sehr.

Beispiel: Wenn Sie den Zyklus mit 30 kHz ausführen, wiederholen sich die 256 Zyklen mit 117 Hz, sodass Sie einen 50-Hz-Tiefpassfilter am Ausgang anbringen könnten, um ein ziemlich glattes und genaues Signal zu erhalten, das bis zu der von Ihnen gewünschten Rate arbeiten kann.

Die Genauigkeit dieser Methode hängt ziemlich stark von der Größe der Bitschritte ab, aber nicht mehr als bei jeder anderen Methode. Ich habe es in der Vergangenheit zur Erzeugung von Referenzspannungen verwendet, und es funktioniert überraschend gut.

Das ist möglich und wurde auch schon gemacht. Sehen Sie sich diese hervorragende Implementierung auf EDN.com http://www.edn.com/design/analog/4329365/Combine-two-8-bit-outputs-to-make-one-16-bit-DAC an

Bitte bearbeiten Sie diese Antwort, um die Daten im Link zumindest zusammenzufassen. Nur-Link-Antworten sind verpönt, da Links oft tot sind.

Ich habe versucht, mit dem ESP32 einen DAC für die positive Hälfte der einzelnen 0 bis + 3 V und über den zweiten DAC durch den Operationsverstärker zu verwenden, um die untere negative Hälfte der einzelnen 0 bis -3 V zu erhalten. Dies funktionierte, aber die Synchronisierung war sehr schwierig, da auch DMA verwendet wurde.