Ich teste derzeit einen 16-Bit-DAC und einen 18-Bit-ADC. In vielen Tests habe ich festgestellt, dass der ADC an Codes "hängen bleibt", insbesondere an den Enden des Eingangsbereichs.
Sowohl der DAC als auch der ADC arbeiten im bipolaren Modus und sind mit einer analogen Schaltung verbunden, die verstärkt/dämpft und auch einen Gleichtakt-Offset und Clipping bereitstellt, um sicherzustellen, dass das Signal zu den Differenzeingängen des ADC passt. Die Datenkonverter sind mit einem Mikrocontroller mit SPI verbunden. Die Daten werden vom Mikrocontroller an einen PC mit serieller Schnittstelle übertragen.
Ich verwende den ADC, um die Ausgabe des DAC abzutasten, um Genauigkeit und Rauschen usw. zu testen. Die resultierenden Daten sollten eine gerade Linie sein, wenn der DAC als x-Werte verwendet wird, und die entsprechenden ADC-Abtastwerte auf der Y-Achse aufgetragen.
Beachten Sie, dass der volle Skalenbereich unterschiedlich ist: Der DAC gibt Spannungen zwischen -20,48 und 20,4794 aus. Der ADC liest Spannungen zwischen -16,384 und 16,3839.
Das folgende Diagramm zeigt die Samples vom ADC, wenn der DAC von 0 bis 65535 in Schritten von 1 LSB eingestellt ist. Die Gesamtzahl der Proben beträgt 65536.
Zoomt man in die Mitte des vollen Skalenbereichs (x-Span: 1000, y-Span: 5000), sieht der Plot so aus (etwas verrauscht, aber ansonsten OK):
Wenn Sie jedoch in den unteren Teil des gesamten Skalenbereichs hineinzoomen, sind festsitzende Codes deutlich sichtbar:
Dasselbe gilt für die oberen Proben:
Beachten Sie, dass alle drei Diagramme im gleichen Maßstab, aber in unterschiedlichen Bereichen sind.
Es ist interessant, sich ein Segment der Daten anzusehen (denken Sie daran, dass die analogen Schnittstellen einige Verstärkungs- und Offset-Fehler einführen):
Man kann deutlich sehen, dass der ADC hängen bleibt, obwohl die Auflösung des 18-Bit-ADC besser ist als die des 16-Bit-DAC.
Noch interessanter ist, dass der Unterschied zwischen zwei festgefahrenen Codes, wie 255648-255712 = -64 und 255712-255808 = -96, ein Vielfaches von 32 zu sein scheint. Das schließt Probleme mit der analogen Schnittstelle aus, denke ich.
Um das Problem besser darzustellen, habe ich den Unterschied zwischen einem Sample und dem nächsten Sample über den gesamten Skalenbereich grafisch dargestellt:
Das Diagramm zeigt deutlich, dass hängengebliebene Codes nicht in der Mitte des Vollbereichs auftreten. In Richtung der Enden des Bereichs werden festsitzende Samples immer deutlicher.
Um das Problem zu lösen, habe ich versucht, die SPI-Kommunikation zu verlangsamen und auch mit niedrigeren Geschwindigkeiten zu sampeln. Dies machte keinen Unterschied. Ich frage mich auch, ob das Problem die Umwandlung des 18-Bit-ADC-Ausgangs von Two's Complement in Offset Binary sein könnte. Ich verwende diesen Code, um die Konvertierung durchzuführen, die ich für richtig halte:
uint32_t y = (131072 ^ Y >> 6) & 0x3FFFF; // Y is 18-bit Two's Complement
Also, was könnte dieses Problem verursachen? Ich habe auch die Spannungsreferenz, die Entkopplung und andere analoge Probleme überprüft, die das Problem verursachen könnten. Immer noch sind die feststeckenden Codes Vielfache von 32, es sieht für mich so aus, als ob das Problem eher digital als analog ist.
Jede Hilfe oder Idee ist willkommen! Vielen Dank im Voraus :-)
Interessant. Ich glaube, ich habe diese Anomalie noch nie zuvor gesehen.
Es ist oft praktisch, sich einen SAR-ADC so vorzustellen, als würde er die analoge Eingangsspannung zu einem bestimmten Zeitpunkt abtasten. In der Praxis gibt es ein enges Zeitfenster, in dem Änderungen der analogen Eingangsspannung – oder Rauschen auf der analogen Spannungsreferenz oder Rauschen auf GND oder anderen Stromanschlüssen des ADC – den digitalen Ausgangswert beeinflussen können.
Wenn die Eingangsspannung während dieses Fensters langsam ansteigt, sind die niederwertigen Bits des SAR-Ausgangssignals nur Einsen.
Wenn die Eingangsspannung während dieses Fensters langsam abfällt, sind die niederwertigen Bits des SAR-Ausgangssignals nur Nullen.
Einen ähnlichen Effekt kann ein sehr schmaler Rauschpuls zum „falschen“ Zeitpunkt bei der Wandlung haben.
Im Moment ist meine beste Vermutung, dass Sie eine Art analoger Schalter oder Operationsverstärker verwenden, die in der Nähe der Hoch- und Niederspannungsschienen nicht ganz so gut funktionieren (höherer Widerstand oder so etwas) wie in der Nähe der mittleren Skala, irgendwie lassen in einer der oben genannten Arten von Rauschen, was dazu führt, dass die weniger signifikanten Bits nur Einsen oder Nullen sind.
Ich habe einige Sigma-Delta-ADCs und Sigma-Delta-DACs gesehen, die eine gute Auflösung im mittleren Bereich, aber eine schlechtere Auflösung in der Nähe der Schienen haben - aber der Effekt sieht anders aus als das, was Sie zeigen.
Faszinierend ist der „Plot der Differenz zwischen einer Probe und der nächsten Probe über den gesamten Skalenbereich“.
Wenn ich Sie wäre, würde ich ein ähnliches Diagramm erstellen, bei dem der X-Wert nicht die Differenz zwischen einem Sample und dem nächsten darstellt, sondern den X-Wert zu den niederwertigsten 6 Bits des rohen ADC-Ausgangs-Samples macht. Das würde schnell zeigen, ob die "steckengebliebenen" Werte meistens viele 1s in den niedrigstwertigen Bits sind (vielleicht steigt die Eingabe langsam an?) Oder viele 0s in den niedrigstwertigen Bits (vielleicht fällt die Eingabe langsam?).
Ich taste "gepulste" Gleichspannungen ab. Das bedeutet, dass ich für jede Messung eine Spannung an den DAC anlege, ihn für mindestens das 100-fache seiner Einschwingzeit einschwingen lasse, dann dem ADC sage, dass er konvertieren soll - und wenn die Konvertierung beendet ist, stelle ich den DAC wieder auf 0 V.
Mein Verständnis ist, dass, wenn ADC-Hersteller "keine fehlenden Codes" sagen, der von ihnen verwendete Test mehrere Kondensatoren umfasst, die sich zu einer riesigen Kapazität summieren, die direkt mit dem ADC-Eingang verbunden ist, und ein System einen großen Widerstand antreibt, der mit dieser Kapazität verbunden ist, die sich sehr langsam auflädt oder entladen Sie diesen Kondensator langsam genug, dass erwartet wird, dass der ADC für mehrere Umwandlungszyklen genau "dieselbe" Spannung (innerhalb von 1/2 LSB) sieht, bevor er "die nächste" Spannung sieht (um 1 erhöht, nach oben, um 1 verringert, nach unten). ).
Wenn ich Sie wäre, würde ich sehen, ob ein solcher Test mit "kontinuierlicher Steigung" die gleichen seltsamen Symptome eines "hängengebliebenen Codes" ergibt wie der "gepulste Test". Vielleicht würde das mehr Hinweise darauf geben, welche Komponente(n) genau dieses Problem verursachen.
Bitte teilen Sie uns mit, wenn Sie jemals herausgefunden haben, was diese Symptome verursacht hat.
Überprüfen Sie als zusätzlichen Test Ihren ADC auf „fehlende Codes“ mit einer einwandfreien Quelle, einem großen Kondensator, der von einem Widerstand überbrückt wird, der direkt mit dem ADC-Eingang verbunden ist. Aufladen, auslaufen lassen. Keine Masseschleifen, kein von Netzteilen injiziertes Rauschen, niedrige Impedanz, geringes/kein Rauschen, garantiert durch Design und Einfachheit, dass alle Spannungen der Reihe nach zwischen dem Start und dem Ende des Testlaufs durchlaufen werden. Wählen Sie eine Entladungsrate, um theoretisch mehrere Zählungen bei jedem Code zu erhalten. Es ist nicht linear, aber deshalb ist es ein zusätzlicher, nicht der einzige Test.
Als ich das letzte Mal ein DAQ-System gebaut habe, das diese Art von Verhalten hatte (und es mit dem gerade vorgeschlagenen RC getestet hatte), hatte es ein Übersprechen von den digitalen Ausgängen zurück zum analogen Eingang.
Welche Technologie wird in diesen Konvertern verwendet (Typ)? Was ist die Abtastrate? Versuchen Sie, die verwendete Frequenz zu verlangsamen, um Probleme mit der ADC-Eingangsimpedanzkopplung zu beseitigen. Das Verknüpfen eines DAC mit einem ADC hat bei der Bewertung der Leistung aufgrund der zunehmenden Probleme mit Quantisierungsfehlern (auch Unterschieden) eine begrenzte Relevanz. Versuchen Sie, ein Diagramm wie das obige zu erstellen, aber erhöhen Sie den Eingang mit einer linearen Spannung, anstatt mit einem DAC-Ausgang - zum Vergleich. Denken Sie daran, dass das Rauschen von Operationsverstärkern ebenfalls stört (da Sie eine hohe Auflösung verwenden). Außerdem weist ADC „ fehlende Codes “ auf. Das Datenblatt besagt so etwas wie "... keine fehlenden Codes für n Bits ..." (wobei n < ADC-Auflösung in Bits).
user_1818839
pvh1987
user_1818839
Platzhalter
Wouter van Ooijen
pvh1987
pvh1987
WasRoughBeast
pvh1987
MarkU
MarkU
pvh1987
pvh1987
Kewarek