Forum: Mikrocontroller und Digitale Elektronik Auflösung der Abtastung eines periodischen Signals mit ADC


von Lutz S. (lutzs)


Lesenswert?

Hallo,

im Moment geht mir das nur als Gedankenexperiment durch den Kopf, aber 
vielleicht baue ich das (ohne im Moment konkrete Verwendung zu haben) 
zum Erkenntnisgewinn auch mal auf. Vorher würde ich mich aber über 
Anregungen freuen, ob ich da grundlegende Denkfehler habe.

Worum geht es: gegeben ist ein periodisches Signal, dessen Verlauf mit 
möglichst hoher Auflösung im Nanosekundenbereich bestimmt werden soll um 
es dann anzuzeigen, zu protokollieren oder anderweitig auszuwerten.
Also so wie ein Oszilloskop das macht, aber eben mit einfacher, 
preiswerter Technik.

Das Signal kann durch einen Microcontroller getriggert werden, dessen 
ADC (oder auch ein externer wenn bessere Auflösung gewünscht) auch die 
Auswertung übernimmt.

Anwendung wäre z.B. die Auswertung eines TDR-Verlaufs, so wie hier 
beschrieben: https://www.youtube.com/watch?v=9cP6w2odGUc

Der Oszillator dort am Eingang würde dann durch einen Ausgangspin des 
Microcontrollers ersetzt, um das Signal gesteuert zu erzeugen.

Der Gedanke ist nun, das Signal vielfach zu erzeugen und abzutasten und 
den Zeitpunkt zwischen der Auslösung und der Abtastung dabei 
schrittweise zu verschieben, so dass man nach vielen Abtastungen die 
Daten des Verlaufs mit hoher zeitlicher Auflösung hat.

Wenn der ADC nun, so wie z.B. beim Raspberry Pico 2 etwa 2 µs für eine 
Umsetzung braucht ist das natürlich eigentlich viel zu langsam, aber 
reicht die im Blockschaltbild des ADC angegebene Sample and Hold 
Schaltung am Eingang aus, damit er immer den zum Zeitpunkt der 
Aktivierung der Umsetzung gültigen Pegel nutzt?

Der Abstand zwischen Start des Signals und Auswertung durch den ADC 
sollte sich durch die Software bis hin zur Länge eines Befehls (eines 
Taktes) fein einstellen lassen, bei 150 Mhz Taktfrequenz wären das 6,67 
ns.

Noch feinere Auflösung sollte sich erreichen lassen, wenn man den 
Auslöseimpuls durch eine steuerbare Kette von schnellen Gattern(ECL) 
schickt, die dann je nach Anzahl der Stufen um einige Nanosekunden 
verzögern.

So weit erst mal meine Gedanken. Könnte das so funktionieren oder ist da 
ein Denkfehler drin? Die kritischste Stelle sehe ich eigentlich beim 
Sample&Hold vom ADC, da werde ich mir mal einige Datenblätter anschauen.

Danke für eure Tips und Gedanken dazu.
: Bearbeitet durch User
von Rainer W. (rawi)


Lesenswert?

Lutz S. schrieb:
> Worum geht es: gegeben ist ein periodisches Signal, dessen Verlauf mit
> möglichst hoher Auflösung im Nanosekundenbereich bestimmt werden soll

Kannst du dir "möglichst hohe Auflösung" leisten?
Das erfordert ggf. die Entwicklung neuer ICs an der Grenze des technisch 
Machbaren.
Was meinst du mit "Nanosekundenbereich"?
Welche spektrale Zusammensetzung besitzt dein Signal und wie groß dürfen 
die Fehler durch Aliasing sein?

> Also so wie ein Oszilloskop das macht, aber eben mit einfacher,
> preiswerter Technik.

Du bekommst inzwischen preiswerte Oszilloskope mit Abtastraten von 1 
GSa/s. Was gefällt dir daran nicht?

> Der Gedanke ist nun, das Signal vielfach zu erzeugen und abzutasten und
> den Zeitpunkt zwischen der Auslösung und der Abtastung dabei
> schrittweise zu verschieben, so dass man nach vielen Abtastungen die
> Daten des Verlaufs mit hoher zeitlicher Auflösung hat.

Das nennt sich bei Oszis "Equivalent-Time Sampling".

> Die kritischste Stelle sehe ich eigentlich beim Sample&Hold vom ADC

Der Abtastjitter, d.h. die Unsicherheit des Abtastzeitpunktes reduziert 
dir im Bereich steiler Signalflanken die effektive Auflösung.
: Bearbeitet durch User
von Lutz S. (lutzs)


Lesenswert?

Rainer W. schrieb:
> Du bekommst inzwischen preiswerte Oszilloskope mit Abtastraten von 1
> GSa/s. Was gefällt dir daran nicht?

Dass es mit einem Oszi geht weiss ich.

Bisher reines Gedankenexperiment, ob man so was mit preiswerter Hardware 
und etwas Software lösen kann. Ob ich das mal brauche - wer weiss.

Manchmal neige ich dazu, mir auch ohne ein konkretes Problem Gedanken 
über eine technische Aufgabe zu machen. Da kann man ja immer was lernen, 
auch für spätere reale Probleme.

>> Der Gedanke ist nun, das Signal vielfach zu erzeugen und abzutasten und
>> den Zeitpunkt zwischen der Auslösung und der Abtastung dabei
>> schrittweise zu verschieben, so dass man nach vielen Abtastungen die
>> Daten des Verlaufs mit hoher zeitlicher Auflösung hat.
>
> Das nennt sich bei Oszis "Equivalent-Time Sampling".

ok, das klingt doch schon gut.

>> Die kritischste Stelle sehe ich eigentlich beim Sample&Hold vom ADC
>
> Der Abtastjitter, d.h. die Unsicherheit des Abtastzeitpunktes reduziert
> dir im Bereich steiler Signalflanken die effektive Auflösung.

Wenn der ADC (one shot) und der das Signal auslösende Prozessor mit 
derselben Taktquelle laufen sollte das durch die starre Kopplung doch 
nicht auftreten?
: Bearbeitet durch User
von Ob S. (Firma: 1984now) (observer)


Lesenswert?

Lutz S. schrieb:

> im Moment geht mir das nur als Gedankenexperiment durch den Kopf

Traffic-Troll, ick hör dir trapsen.
von Rainer W. (rawi)


Lesenswert?

Lutz S. schrieb:
> Wenn der ADC (one shot) und der das Signal auslösende Prozessor mit
> derselben Taktquelle laufen sollte das durch die starre Kopplung doch
> nicht auftreten?

Das hat nichts mit dem ADC zu tun, sondern es hängt davon ab, mit 
welcher zeitlichen Genauigkeit der S&H das Eingangssignal zu fassen 
kriegt.
https://www.ti.com/lit/an/snaa018/snaa018.pdf

Ob du das mit "etwas Software" lösen kannst, hängt davon ab, was "im 
Nanosekundenbereich" bedeutet. Für hartes Timing ist es i.d.R. mit 
reiner Software nicht getan.
: Bearbeitet durch User
von Axel S. (a-za-z0-9)


Lesenswert?

Lutz S. schrieb:
> Worum geht es: gegeben ist ein periodisches Signal, dessen Verlauf mit
> möglichst hoher Auflösung im Nanosekundenbereich bestimmt werden soll um
> es dann anzuzeigen, zu protokollieren oder anderweitig auszuwerten.

Ich bin nicht sicher ob du das vorhast was ich denke (und Youtube Links 
folge ich für sowas nicht). Aber wenn es das ist, dann hast du gerade 
Unterabtastung neu erfunden:

https://de.wikipedia.org/wiki/Unterabtastung

Das wird weiträumig angewendet, z.B. in Leistungsmeßgeräten für das 
Stromnetz. Allerdings kann die zeitliche Auflösung nicht besser werden, 
als die Sample-Zeit der S&H Stufe im ADC.
von Ob S. (Firma: 1984now) (observer)


Lesenswert?

Axel S. schrieb:

> Allerdings kann die zeitliche Auflösung nicht besser werden,
> als die Sample-Zeit der S&H Stufe im ADC.

Das ist nicht korrekt.

Auch wenn die Dauer der S&H-Zeit natürlich konstant bleibt, wird doch 
ihre Lage bezüglich des abzutastenden Signals verschoben. Das geht 
üblicherweise in viel kleinerer Zeit-Stückelung als die Dauer der 
S&H-Zeit.
von Hans-Georg L. (h-g-l)


Lesenswert?

Wen ich dich richtig verstehe willst du die zeit zwischen 2 Flanken 
detektieren. Dafür gibt es bezahlbare TDC (Time to Digital Converter) 
als fertige IC  z.B. TDC7200 ( Auflösung 50ps) oder AS6501 (Auflösung 
10ps). Oder du lädst über eine Konstantstromquelle einen Kondensator und 
misst die Spannung nach der Zeit über ADC. Da gibt es z.B. den 
PIC24FJ128 der kann das  mit einer Auflösung unter 1ns.
von Lutz S. (lutzs)


Lesenswert?

Ob S. schrieb:
> Auch wenn die Dauer der S&H-Zeit natürlich konstant bleibt, wird doch
> ihre Lage bezüglich des abzutastenden Signals verschoben. Das geht
> üblicherweise in viel kleinerer Zeit-Stückelung als die Dauer der
> S&H-Zeit.

Ja, darauf will ich ja mit meinen Gedanken hinaus. (Nein, kein Troll - 
es interessiert mich einfach wie weit man damit zeitlich 'nach unten' 
kommt).

Wenn man da mit preiswerter Hardware reproduzierbar alle 2-3 ns 
vernünftige Abtastwerte des Originalsignals erhält wäre das doch einige 
Gedanken um die Realisierung wert.

Was man dann später daraus mal praktisch macht ist eine andere Sache. 
Eingeschränkt ist es schon dadurch dass das zu messende Signal nach der 
Idee reproduzierbar und synchron mit der Messung sein muss.
: Bearbeitet durch User
von Lutz S. (lutzs)


Lesenswert?

Hans-Georg L. schrieb:
> Wen ich dich richtig verstehe willst du die zeit zwischen 2 Flanken
> detektieren.

Nein, ich will erst mal den zeitlichen Verlauf des Signals mit 
ns-Auflösung als Kurve im µC rekonstruieren. Weitere Auswertung baut 
darauf auf, beim im Video als Beispiel gezeigten TDR wäre das dann der 
Abstand zwischen den Flanken, aber man könnte ja auch 
Übertragungseigenschaften von Filtern oder allgemein von anderen 
Schaltungen damit messen.

Mir geht es erst mal um die zeitliche Auflösung nach unten, Anwendungen 
finden sich dann schon.
: Bearbeitet durch User
von Ob S. (Firma: 1984now) (observer)


Lesenswert?

Lutz S. schrieb:

> Ja, darauf will ich ja mit meinen Gedanken hinaus. (Nein, kein Troll -
> es interessiert mich einfach wie weit man damit zeitlich 'nach unten'
> kommt).

Na, auf einen System-Takt. Drunter geht ganz sicher nicht.
von Lutz S. (lutzs)


Lesenswert?

Rainer W. schrieb:
> Das hat nichts mit dem ADC zu tun, sondern es hängt davon ab, mit
> welcher zeitlichen Genauigkeit der S&H das Eingangssignal zu fassen
> kriegt.
> https://www.ti.com/lit/an/snaa018/snaa018.pdf

Ich gestehe, dass ich das Dokument nicht komplett durchdrungen habe. 
Aber hängt der S&H im ADC nicht auch fix an der Taktung des ADC (und 
damit bei entsprechender Konfiguration auch fix am Prozessor) und 
etwaige zeitliche Abläufe würden sich damit bei jeder Messung gleich 
auswirken?
von Lutz S. (lutzs)


Lesenswert?

Ob S. schrieb:
> Na, auf einen System-Takt. Drunter geht ganz sicher nicht.

Deshalb ja noch die Idee, im TDR-Beispiel zwischen den Pin vom µC und 
den Treiber für den steilen Impuls eine per Software variable Anzahl 
schnelle ECL-Gatter zu schalten, um das unterhalb der 6,7 ns noch in 
einer feineren Rasterung zu verschieben.

Falscher Gedanke?
Beitrag #8058481 wurde vom Autor gelöscht.
von Lutz S. (lutzs)


Lesenswert?

Ob S. schrieb im Beitrag #8058481:
> Kann man machen, ist aber nur nötig, wenn man nicht programmieren kann.

Wie kommt man nur mit Programmierung auf gemessene Werte unterhalb eines 
Systemtakts?

Ok, nun hat er gelöscht worauf ich antwortete. Aber hier steht es ja 
noch als Zitat.
: Bearbeitet durch User
von Ob S. (Firma: 1984now) (observer)


Lesenswert?

Lutz S. schrieb:

> Wie kommt man nur mit Programmierung auf gemessene Werte unterhalb eines
> Systemtakts?

Garnicht natürlich.

> Ok, nun hat er gelöscht worauf ich antwortete.

Deswegen auch gelöscht. Nicht schwer zu begreifen.
von Axel S. (a-za-z0-9)


Lesenswert?

Ob S. schrieb:
> Axel S. schrieb:
>
>> Allerdings kann die zeitliche Auflösung nicht besser werden,
>> als die Sample-Zeit der S&H Stufe im ADC.
>
> Das ist nicht korrekt.
>
> Auch wenn die Dauer der S&H-Zeit natürlich konstant bleibt, wird doch
> ihre Lage bezüglich des abzutastenden Signals verschoben.

Zugegeben. Aber alles was das Signal innerhalb der Sample-Zeit macht, 
wird auf nicht verhersagbare Weise glattgebügelt. Wenn es das Integral 
über die Samplezeit wäre, dann wäre es tatsächlich möglich, aus den N 
verschobenen Integralen die N Stützstellen einer Periode 
zurückzurechnen. Aber eine S&H Stufe ist nichts weiter als ein 
RC-Tiefpaß. Und der Kondensator hat nicht mal eine definierte 
Anfangsspannung.
von Bauform B. (bauformb)


Lesenswert?

Lutz S. schrieb:
> aber eben mit einfacher, preiswerter Technik.

Kein Problem, wenn man Analog-Elektronik mit GHz Bandbreite einfach 
findet... Ein S&H ist im Prinzip sehr einfach und den Rest macht ein 
STM32G474 für 6 Euro. Der hat einen Timer mit 184 ps Auflösung. Damit 
triggert man 4 externe S&H, die dann ganz gemütlich von den 4 internen 
ADCs digitalisiert werden. Mit den 4 parallelen Kanälen bekommt man alle 
62.5 ns einen neuen Wert mit 12 Bit per DMA ins RAM; leider nur 80 bis 
90 KByte. Trotzdem: Preiswert und einfach ;)

Axel S. schrieb:
> Aber eine S&H Stufe ist nichts weiter als ein RC-Tiefpaß.
> Und der Kondensator hat nicht mal eine definierte Anfangsspannung.

Ganz zu Anfang ist das doof, aber später sollte das jedes Mal der Wert 
der vorigen Abtastung sein. Da kommt dann die Software ins Spiel.
von Christoph M. (mchris)


Lesenswert?

Lutz S. schrieb:
> Der Gedanke ist nun, das Signal vielfach zu erzeugen und abzutasten und
> den Zeitpunkt zwischen der Auslösung und der Abtastung dabei
> schrittweise zu verschieben, so dass man nach vielen Abtastungen die
> Daten des Verlaufs mit hoher zeitlicher Auflösung hat.

Das Verfahren ist relativ alt und würde früher in Oszilloskopen 
verwendet.
Ich habe damit mal mit dem ADC eines Atmega8 das stehende Bild eines 
Videosignals gesampelt.
von Hans W. (hanswieland)


Lesenswert?

Lutz S. schrieb:
> reicht die im Blockschaltbild des ADC angegebene Sample and Hold
> Schaltung am Eingang aus, damit er immer den zum Zeitpunkt der
> Aktivierung der Umsetzung gültigen Pegel nutzt?

Das ist eine gute Frage. Das Sampling braucht Zeit. In dieser Zeit muss 
der Kondensator auf den Signalpegel geladen werden. Wie schnell das 
geht, hängt sehr von seiner Kapazität und den beteiligten Widerständen 
ab. Berücksichtige auch parasitäre Kapazitäten vom I/O Pin (meist um 5 
pF) und den Leitungen, sowie die Induktivität der Leitungen.

Und natürlich macht jede Änderung des Signals innerhalb der Sample Zeit 
die Messung ungenau.

Mit dem internen ADC deines Mikrocontrollers kommst da nicht weit.
von Lutz S. (lutzs)


Lesenswert?

Bauform B. schrieb:
> Kein Problem, wenn man Analog-Elektronik mit GHz Bandbreite einfach
> findet... Ein S&H ist im Prinzip sehr einfach und den Rest macht ein
> STM32G474 für 6 Euro. Der hat einen Timer mit 184 ps Auflösung. Damit
> triggert man 4 externe S&H, die dann ganz gemütlich von den 4 internen
> ADCs digitalisiert werden. Mit den 4 parallelen Kanälen bekommt man alle
> 62.5 ns einen neuen Wert mit 12 Bit per DMA ins RAM; leider nur 80 bis
> 90 KByte. Trotzdem: Preiswert und einfach ;)

Der hochauflösende Timer ist interessant, das kannte ich bisher nicht.

Habe mich mal durch die Unterlagen gelesen.
Wenn ich wieder zur anfangs beschriebenen Unterabtastung zurückkehre 
kann ich den Zeitpunkt für die Signalerzeugung und für die Erfassung 
durch den ADC durch die HRTimer steuern. Das wäre dann mit einer 
zeitlichen Auflösung von 184 ps ca. 36 mal feiner gerastert als mein 
ursprünglicher Ansatz mit 6,67 ns.

Danke für den Denkanstoß.
von Lutz S. (lutzs)


Lesenswert?

Hans W. schrieb:
> Das ist eine gute Frage. Das Sampling braucht Zeit. In dieser Zeit muss
> der Kondensator auf den Signalpegel geladen werden. Wie schnell das
> geht, hängt sehr von seiner Kapazität und den beteiligten Widerständen
> ab. Berücksichtige auch parasitäre Kapazitäten vom I/O Pin (meist um 5
> pF) und den Leitungen, sowie die Induktivität der Leitungen.

Wenn ich das im Manual des STM32 richtig verstanden habe lässt sich das 
mit dem BULB-Mode entschärfen.

'Bulb sampling mode
When the BULB bit is set in ADC register, the sampling period starts 
immediately after the last ADC conversion. A hardware or software 
trigger starts the conversion after the sampling time has been 
programmed in ADC_SMPR1 register. The very first ADC conversion, after
the ADC is enabled, is performed with the sampling time programmed in 
SMP bits. The Bulb mode is effective starting from the second 
conversion.'
von Hans W. (hanswieland)


Lesenswert?

Lutz S. schrieb:
> Wenn ich das im Manual des STM32 richtig verstanden habe lässt sich das
> mit dem BULB-Mode entschärfen.

Glaube ich nicht, denn das ändert nichts an der Sampling Zeit.
von Lutz S. (lutzs)


Lesenswert?

Wenn ich das richtig verstehe ist er in dem Mode vorher durchweg mit dem 
Signal verbunden und dann wird nur zu Auswertung die Verbindung 
getrennt, damit der Wert für die Zeit der Auswertung durch den ADC 
stabil steht.
von Hans W. (hanswieland)


Lesenswert?

Lutz S. schrieb:
> Wenn ich das richtig verstehe ist er in dem Mode vorher durchweg mit dem
> Signal verbunden

Dennoch folgt die Spannung am Kondensator deinem Signal mit einer 
signifikanten Verzögerung. Ob man diese heraus rechnen kann weiß ich 
nicht.
von Bauform B. (bauformb)


Lesenswert?

Lutz S. schrieb:
> Wenn ich wieder zur anfangs beschriebenen Unterabtastung zurückkehre
> kann ich den Zeitpunkt für die Signalerzeugung und für die Erfassung
> durch den ADC durch die HRTimer steuern. Das wäre dann mit einer
> zeitlichen Auflösung von 184 ps ca. 36 mal feiner gerastert

Für die Signalerzeugung sollte das funktionieren und auch für das 
ADC-Triggersignal. Aber der ADC selbst benutzt einen "normalen" Takt mit 
max. 60 MHz und mit dem muss der Trigger synchronisiert werden. Für die 
Abtastzeitpunkte bleibt die Auflösung also bei 16.7 ns.

Das sollte aber kein Problem sein, solange du das Signal mit hoher 
Auflösung startest. Das schon eher:

Lutz S. schrieb:
>> Der Abtastjitter, d.h. die Unsicherheit des Abtastzeitpunktes reduziert
>> dir im Bereich steiler Signalflanken die effektive Auflösung.
>
> Wenn der ADC (one shot) und der das Signal auslösende Prozessor mit
> derselben Taktquelle laufen sollte das durch die starre Kopplung doch
> nicht auftreten?

Doch, und es gibt noch mehr Jitter: Der Systemtakt wird per PLL erzeugt 
und daraus wird der 5.4 GHz Takt für den Timer gemacht; egal wie, eine 
starre Kopplung gibt es nur gemittelt über mehrere Sekunden.
von F. M. (foxmulder)


Lesenswert?

Wenn ich dich richtig verstanden habe, willst du ein sampling-scope 
bauen.

https://www.youtube.com/live/99u53V7uDFY?is=9xWW82shHqFet33C
von Lutz S. (lutzs)


Lesenswert?

Interessanter Vortrag. Und ein schönes Detail, die Verzögerung des 
Triggersignals von 3,2 bis 14,8 ns in Schritten von 10 Picosekunden mit 
dem SY89296U.
: Bearbeitet durch User
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
Noch kein Account? Hier anmelden.