Schnittstellen mehrerer ADC: Haupttakt gemeinsam nutzen

Mein Projekt beinhaltet die Anbindung von zwei Analog-Digital-Wandlern an einen STM32F411RE-Mikrocontroller. Der erste ADC ist ein ADS1191, der zweite ein ADS1158.

Diese beiden ADCs müssen Signale gleichzeitig umwandeln und ihre Samples von der MCU abrufen.

Ich bin es gewohnt, mit einem einzigen ADC zu arbeiten. Das Programm wird unterbrochen, wenn der DRDY-Stift (Datenbereit) niedrig wird, und die Abtastungen werden abgerufen.

Die Fragen sind:

Muss ich sicherstellen, dass die beiden ADCs denselben Haupttakt verwenden? Wenn ja, sollte ich wohl die interne Uhr von einem von ihnen verwenden und sie an den externen Taktstift des zweiten speisen. ADS1191 hat einen internen Takt von 2 MHz und benötigt einen externen Takt von 2 MHz. ADS1158 hat einen internen Takt von 16 MHz und benötigt einen externen Takt von 0,1 bis 16 MHz. Ist es sicher, die interne Uhr von ADS1191 zu verwenden und sie an ADS1158 zu speisen? Muss ich irgendetwas opfern, wenn ich einen Master-Takt mit niedrigerer Frequenz (2 MHz gegenüber 16 MHz) füttere?

Grüße,

Laurent.

Erläuterungen

Der Modus "kontinuierliches Lesen", den ich mit einem einzelnen ADC verwende, besteht darin, ein Interrupt-Signal mit dem DRDY-Pin (Daten bereit) des ADC zu verbinden. Wenn Daten abgetastet werden, schaltet der DRDY-Pin hoch. Dann, wenn die Daten zur Übertragung bereit sind, schaltet der Pin auf Low. Die MCU erkennt die fallende Flanke von DRDY und beginnt mit der Übertragung der Daten Byte für Byte.

Was ich suche, ist "korrelierte" Samples zu haben, dh sicherzustellen, dass zwei jeweilige Samples von jedem ADC, die zur gleichen Zeit abgerufen werden, tatsächlich dem gleichen Zeit-"Bin" entsprechen, was möglicherweise nicht passiert, wenn die jeweiligen Hauptuhren a anzeigen Drift. Aus den wertvollen Antworten unten schließe ich Folgendes in Bezug auf die Verwendung von zwei (oder mehr) ADCs.

Vorgeschlagene Lösung Stellen Sie sicher, dass die beiden ADCs denselben Haupttakt verwenden. In meiner Anwendung kann ich den internen Haupttakt des ersten ADC auf einen Ausgangspin umleiten. Dieses Taktsignal würde dann als "externer Takt" auf den zweiten ADC geführt werden. Um die Frequenz zu reduzieren (die meistens mit der Abtastrate zusammenhängt), kann man auf ein d-Typ-Flip-Flop zurückgreifen (um die Frequenz durch zwei zu teilen). Das Prinzip wäre daher das gleiche wie bei einer Einzel-ADC-Anwendung: Trigger-Interrupt auf DRDY eines ADC (der mit der kürzesten Haltezeit). Rufen Sie nach Abschluss dieser ersten Übertragung Proben vom anderen ADC ab.

Antworten (2)

Wenn Sie die gleiche Anzahl von Abtastungen pro Sekunde haben möchten, müssen Sie die Datenblätter sehr genau durchlesen. Was Sie konkret mit „gleichzeitig“ meinen, bedarf der Klärung. Alles, was ich Ihnen hier zeigen kann, ist, wie Sie korrelierte Samples mit der gleichen Rate erreichen.

Der ADS1158 zeigt (Datenblattabbildung 128) einen festen Kanalmodus in seiner einfachsten Form mit einer Datenrate von Fclk/128. Dies scheint die Abtastrate zu sein.

Der ADS1191 ist für Abtastraten von <=8kS/s optimiert. Die Verwendung der 8kS/s-Rate wäre daher laut Hersteller das Beste, was Sie erreichen können.

Es gibt eine Option für eine externe Uhr auf beiden, also mal sehen, was Sie tun können.

Der ADS1191 akzeptiert einen 2,048-MHz-Takt (Einzelheiten zu Pin-Anschlüssen finden Sie im Datenblatt, da erwartet wird, dass der Modulator mit 128 kHz läuft).

Um die 8kS/s-Rate vom ADS1158 im obigen einfachen Modus zu erhalten, ergibt sich ein Haupttakt von 1,024 MHz. Beachten Sie, dass es in diesem Teil nur begrenzte Möglichkeiten gibt, die Abtastrate zu ändern

Das ist ein Glücksfall: Generieren Sie einen Master-Takt von 2,048 MHz für den ADS1191 und teilen Sie ihn durch 2, um den externen Takt auf dem ADS1158 zu erhalten.

Wenn Sie jetzt jede Konvertierung zum selben Zeitpunkt starten, erhalten Sie Konvertierungen, die die gleiche Zeit in Anspruch nehmen, und die Abtastrate ist korreliert.

Beachten Sie, dass der 2,048-MHz-Takt für den ADS1191 nur implementiert wurde, um einen schnelleren SPI-Zugriff zu ermöglichen - Sie sollten nicht versuchen, den Modulator über 128 kHz zu betreiben.

[Aktualisierung als Antwort auf Kommentar]

Ich schlug eine Hauptuhr vor, weil dies eine Methode war, um das gewünschte Ergebnis zu erzielen; Wie Sie bemerken, gibt es andere Methoden.

Flip-Flop vom Typ AD mit #Q bis D ist in der Tat eine Standardmethode, um eine Uhr durch 2 zu teilen.

HTH

Das ist die Antwort, nach der ich gesucht habe. Darf ich jetzt fragen, warum Sie raten, "eine Hauptuhr für ADS1191 zu generieren"? Warum nicht das interne Oszillatorsignal als Eingang für ADS1158 verwenden? Es ist tatsächlich möglich, diesen internen Haupttakt auf einen Ausgangspin umzuleiten (ADS1191-Datenblatttabelle 3). Die folgenden Fragen lauten: Wie teile ich eine Taktfrequenz durch 2? Mein Take ist ein Flip-Flop vom Typ D. Richtig?

Was Sie entscheiden müssen, ist: Sollen sie die gleiche Anzahl von Bits in genau derselben Zeit konvertieren oder sollten sie gleichzeitig abtasten. Diese sind sehr, sehr unterschiedlich.

(Links zu Datenblättern in Ihrer Frage hätten mir übrigens geholfen, schneller zu sein) Als Referenz; ADS1191/ADS1192 TI-Datenblatt und ADS1158-Datenblatt

Gleichzeitig starten ist ganz einfach:

Beide Chips haben ein dediziertes "START"-Signal (p10 ADS1191 und p6 ADS1158), das Sie gleichzeitig auslösen können, und sie beginnen genau zur gleichen Zeit mit der Abtastung. Eine mit 16 MHz läuft vielleicht zuerst (abhängig von der eingestellten Konvertierungsauflösung!!), aber spielt das eine Rolle? Das erfasste analoge Signal ist von genau der gleichen Zeit. Dafür ist diese Nadel da. (( Bearbeiten: Eine Anmerkung: Das ADS1191-Datenblatt gibt die START-Polarität in dieser Tabelle nicht an. Sie sollten sie weiter unten im Datenblatt nachschlagen, wenn Sie beabsichtigen, sie zu verwenden. Es ist wahrscheinlich positiv, wie es in der ADS1158-Tabelle steht, aber am besten sicher sein. ))

Konvertieren in der gleichen Zeit hat ifs:

Wenn Sie genau zur gleichen Zeit und mit der gleichen Auflösung konvertieren müssen und beide Datenblätter die gleiche Anzahl von Taktzyklen für diese Auflösung angeben (zählen Sie die ifs hier!), dann sollten sie von derselben Quelle getaktet werden. Aber in einem solchen Fall würde ich ernsthaft in Betracht ziehen, für beide einen externen Quarzoszillator mit 2 MHz zu verwenden, da Sie offensichtlich einige sehr spezifische Timing-Anforderungen haben, die Ihnen ein interner Oszillator nicht erfüllen kann.

Was ich sagen will ist: Wenn Sie Grund haben, sich Sorgen über die Diskrepanz der Konvertierungszeit in der Größenordnung von Mikrosekunden zu machen (was Sie meiner Meinung nach nicht haben, wenn Sie die Start-Pins zum Synchronisieren verwenden, aber das sind Details, die Sie nicht hatten angeben), möchten Sie keine internen Oszillatoren verwenden. Überhaupt.

Worüber Sie sich meiner Meinung nach Sorgen machen wollten:

Wenn Sie nur 100% sicher sein wollen, dass die Korrelation zwischen den Samples von beiden korreliert, gehen Sie in die Datenblätter, sehen Sie sich die Spezifikationen für das START-Signal zu den tatsächlichen Sample/Hold-Zeiten an und prüfen Sie, ob sie Ihren Erwartungen entsprechen. Ich denke, sie werden es wahrscheinlich tun.

Was verlieren Sie, wenn Sie ein Hochgeschwindigkeitsgerät mit einer niedrigeren Geschwindigkeit takten:

Wenn Sie das höherfrequenzfähige Gerät mit einer niedrigeren Frequenz takten, werden Sie tatsächlich entweder Geschwindigkeit oder Genauigkeit oder beides opfern.

Nehmen wir an, es kann 16 Samples in 1 ms bei 16 MHz ausführen (ich habe diesen Teil des Datenblatts nicht gelesen, daher ist dies hypothetisch, keine tatsächliche Zahl).

Wenn Sie es dann mit 2 MHz takten, kann es nur 2 Samples in derselben 1 ms ausführen. Wenn Sie nur ein Sample pro 1 ms benötigen und keine hohe Genauigkeit durch Oversampling benötigen: Kein Schaden. Wenn Sie eine hohe Genauigkeit wünschen, möchten Sie wahrscheinlich überabtasten, und normalerweise geschieht dies mit Faktor 4, 8 oder 16: Ah, schade: Jetzt ist es zu langsam.

Dasselbe gilt für die Notwendigkeit von 4 Samples pro 1 ms. Es könnte das bei 16 MHz tun, aber jetzt bei 2 MHz kann es nicht. So einfach ist das.

Das genaue Timing ergibt sich aus Ihrem Datenblatt, und Sie haben Ihre genauen Anforderungen nicht mitgeteilt, daher liegt es ganz bei Ihnen, all dies zu überprüfen.

Meine Sorge bezog sich tatsächlich auf den Drifteffekt der jeweiligen Uhren. Angenommen, wenn beide ADCs so eingestellt sind, dass sie theoretisch alle 1 ms neue Samples übertragen (während sie genau zur gleichen Zeit gestartet werden), ist ein ADC möglicherweise etwas langsamer, um hin und wieder ein Sample zu "überspringen". Ich denke, das ist es, was Peter Smith als "korrelierte Proben" bezeichnet. Was Sie über die Start-to-Hold-Zeit sagen, ist jedoch interessant.
@olol85 Um die analogen Abtastpunkte zu korrelieren, betrachten Sie nur den Abtastzeitpunkt, nicht die Umwandlungszeit, wie oben angegeben. Der "START"-Pin signalisiert, wenn die ADCs den Wert vom Eingang "bekommen", die Taktrate bestimmt nur, wie schnell sie ihn in etwas Digitales umwandeln. Wenn Sie sie mit genauen und jitterfreien 1 kHz am Start-Pin takten und sie so konfiguriert haben, dass sie > 1 kSPS zulassen, erhalten Sie jitterfreie, korrelierte Samples von beiden. Wenn Sie eine Korrelation im freilaufenden Modus (untriggered) wünschen, benötigen Sie eine genaue Uhrenmathematik, wie Peter in seiner Antwort vorschlägt. Siehe Seite 28 von ADS1191