Forum: Mikrocontroller und Digitale Elektronik A/D Wandler im ns-Bereich


von Sebastian (Gast)


Lesenswert?

Hallo alle zusammen..

Ich suche für eine zeitkritische Anwendung einen externen AD-Wandler. 
Der ATmega läuft mir 16 MHz und sollte, bei einem Messtrigger nach so 
wenig Takten wie möglich den Spannungswert ermitteln können.
Eine Auflösung von ca. 10 Bit sollten ausreichend sein.

Sind Schaltzeiten unter 10 ns bei ADs ungewöhnlich oder machbar?

Bitte reißt mir nicht den Kopf ab, wenn ich unmögliches verlange.

Habe leider absolut keine Vortstellung davon, was es auf dem AD-Markt 
gibt bzw. was dort möglich ist.

Mit freundlichen Grüßen
Sebastian

von Peter (Gast)


Lesenswert?

Dein Atmel braucht schon 62µs je Takt du willst und musst mindestens 
2Byte verarbeiten (10Bit). Ich denke da brauchst du auch kein AD der es 
in 10ns kann.

von Jens G. (jensig)


Lesenswert?

Einfach mal bei Farnell gucken - da bekommst Du so einen gewissen 
Überblick. 10ns wären mal grob gerechnet 50MHz - da gibt's schon was. 
Allerdings weis ich nicht, was Du damit bei einem 16MHz ATMega anfangen 
willst - da geht doch die Geschwindigkeit ohnehin flöten.

von Johannes M. (johnny-m)


Lesenswert?

Peter wrote:
> Dein Atmel braucht schon 62µs je Takt
??? Womit taktest Du Deine AVRs? 16 kHz RC-Oszi? Die meisten aktuellen 
AVRs können 20 MHz Taktfrequenz, also 50 ns Zykluszeit...

> du willst und musst mindestens
> 2Byte verarbeiten (10Bit). Ich denke da brauchst du auch kein AD der es
> in 10ns kann.
Es geht dem OP vermutlich nicht um die Verarbeitungszeit, sondern darum, 
dass nach Auftreten eines bestimmten Ereignisses sofort gewandelt wird.

von Sebastian (Gast)


Lesenswert?

letztendlich geht es darum, dass der Messwert bei einem bestimmten 
externen Signal aufgenommen werden muss.

Also ext-Interrupt -> auslesen -> speichern!

Die hinterher entstandene Messreihe sollte so exakt wie möglich an den 
Triggerzeitpunkten liegen.

Ich hoffe, ich habe die Problematik einigermaßen erklären können  ;)

von Martin (Gast)


Lesenswert?

@Peter

du meinst sicher 62ns.

von Johannes M. (johnny-m)


Lesenswert?

Sebastian wrote:
> letztendlich geht es darum, dass der Messwert bei einem bestimmten
> externen Signal aufgenommen werden muss.
>
> Also ext-Interrupt -> auslesen -> speichern!
>
> Die hinterher entstandene Messreihe sollte so exakt wie möglich an den
> Triggerzeitpunkten liegen.
>
> Ich hoffe, ich habe die Problematik einigermaßen erklären können  ;)
Also wie vermutet. Allerdings kann der AVR den ADC (wenn Du denn einen 
passenden findest) tatsächlich nicht so schnell triggern, das wirst Du 
schon irgendwie analog machen müssen.

Wie oben gesagt: Selbst wenn der AVR mit 20 MHz getaktet wird, braucht 
er zum Ausführen eines einzigen Maschinenbefehls schon mindestens 50 ns, 
und je nachdem, wo das Triggersignal herkommt, braucht es eine ganze 
Stange Befehle, bis der AVR dem ADC überhaupt Bescheid sagen kann, dass 
er etwas machen soll.

Gerade bei Interrupt-Bearbeitung gibt es schon mal einige Takte 
(mindestens 6), bis überhaupt der Interrupt Handler ausgeführt wird. 
Hochsprachen-Compiler betreiben dann erstmal noch Registersicherung, was 
ebenfalls zu einigen Takten Overhead führt.

von Hans-jürgen H. (hjherbert) Benutzerseite


Lesenswert?

Schalte doch mit dem Messtrigger eine externe Sample- and Hold - 
Schaltung. Etwa so

----- CMOS-Schalter -----+----->
                         !
                         !
                         2nF
                         !
                         !
-------------------------+----->

von Peter (Gast)


Lesenswert?

@Martin (Gast)
ja viel mir auch gerade auf.

@Sebastian
ext-Interrupt -> auslesen -> speichern!

ext-Interrupt
    1-2 Takte zum anspringen (wenn nicht schon eine ISR bearbeit wird)
    +ca 4 Takte zur Register speicherung
    +ca 2 Takte um 2Byte einzulesen

das sind schon mal 10Takte a 62ns (620ns) die vergehen, was aber schon 
fast das minimum ist.

von Sebastian (Gast)


Lesenswert?

Entschuldigung, mir ist gerade aufgefallen dass ich unter 10 ns 
geschrieben habe..

T bei 16 Mhz ist ja 62 ns und nicht 0,62    -.-   habe mich peinlichst 
verrechnet  :D



in dem Fall würde ja eine 16 - 20 MPS geschichte reichen.


Was bedeutet das Sample-Hold?

von Johannes M. (johnny-m)


Lesenswert?

Peter wrote:
>     +ca 2 Takte um 2Byte einzulesen
Nochmal: Er will nur die Wandlung so schnell starten. Das Auslesen des 
Ergebnisses ist zweitrangig!

von Sebastian (Gast)


Lesenswert?

Genau.

Die Speicherung ist weniger Zeitkritisch.

Der AD soll halt nur so schnell wie möglich auf das Sample-Signal 
reagieren.

von Johannes M. (johnny-m)


Lesenswert?

Sebastian wrote:
> in dem Fall würde ja eine 16 - 20 MPS geschichte reichen.
Ob die reicht, musst Du wissen.

> Was bedeutet das Sample-Hold?
http://www.gidf.de

von Klugscheisser (Gast)


Lesenswert?

@ Sebastian

Es könnte sich vielleicht doch für Dich lohnen die Anforderungen mit 
mehr Details und Drumherum zu beschreiben.

1. Ist eine der Forderungen, das die Wandlung synchron zu einem externen 
Signal erfolgen muss? Anscheinend: Ja
2. Ist es eine der Forderungen, das die Wandlungen im Abstand von 10ns 
erfolgen müssen: Anscheinend: Nein
3. Müssen die Wandlungen immer im gleichen zeitlichen Abstand erfolgen? 
Wahrscheinlich: Ja
4. Spielt die Genauigkeit des Taktes eine grosse Rolle (so das ein 
externer Takt etwa von einem Normal benutzt wird): Wahrscheinlich: Nein

Wenn der Abstand der Messungen zu dem mit dem AVR möglichen passt (ich 
glaube es sind ca. 150kHz) dann würde ein einzelner Impuls von aussen 
reichen um die Wandlungen zu starten, die dann selbsttätig, immer im 
selben Abstand, erfolgen.

Dann könntest Du Dir einen externen Wandler sparen.

von Peter (Gast)


Lesenswert?

@Johannes M.
> Nochmal: Er will nur die Wandlung so schnell starten. Das Auslesen des
> Ergebnisses ist zweitrangig!
Dann kann er ja gleich das Tigger signal auf dem AD geben und müsste es 
nicht auf dem Atmel geben.

von Sebastian (Gast)


Lesenswert?

Hmm, ok.

Also hier mal eine grobe Projekt-Übersicht.

Ich habe ein zentrales Modul, dass über einen noch nicht 100%ig 
ausgewählten BUS mit Messmodulen verbunden werden kann.

Das Modul erzeugt eine Art Sampleclock, auf den die Module ihre 
Aufzeichnungen triggern.

Das heißt die Module schreiben ihren Speicher voll mit der Frequenz des 
Sampleclocks.

Hinterher wird das ganze dann weiterverarbeitet.

Die Samplefrequenz soll "so schnell wie möglich" sein können.

Das heißt im Endeffekt bestimmen die AD-Module (sampleclock->AD 
auslesen->RAM) wie schnell das ganze hinterher wird.

Und da wäre es mir am liebsten, wenn die jew. AVRs in den Modulen nicht 
ewig rumidlen müssen um auf den Messert zu warten. Außerdem soll wie 
gesagt der gemessene Wert so nah wie Möglich am Zeitpunkt 
Sampleclock-Flanke liegen.

Ich hoffe, das ganze soweit verständlich dargelegt zu haben.

Gruß, Sebastian.

von Sebastian (Gast)


Lesenswert?

@ Johannes M.

Findest Du das OK, mir zu unterstellen ich würde "dumme Fragen stellen"?

Ein freundlicher Hinweis, dass Du keine Lust/Zeit hast darüber etwas zu 
schreiben mit einem Verweis auf google hätte es auch getan.

Gruß, Sebastian

von Klugscheisser (Gast)


Lesenswert?

>Die Samplefrequenz soll "so schnell wie möglich" sein können.
Das ist eine Killerphrase. Denn schneller gehts immer, wenn es das Geld 
erlaubt.
Das solltest Du wirklich definieren. So viel wie nötig und nicht mehr.

>Und da wäre es mir am liebsten, wenn die jew. AVRs in den Modulen nicht
>ewig rumidlen müssen um auf den Messwert zu warten.
Warum? Was solls?

> Außerdem soll wie gesagt der gemessene Wert so nah wie Möglich am >Zeitpunkt 
Sampleclock-Flanke liegen.

Warum? Wird der Trigger aus dem Signal abgeleitet?
Ist die Messung nun fortlaufend und im immer gleichen Abstand oder 
nicht?

von Jens G. (jensig)


Lesenswert?

also wenn Du nur erstmal möglichst schnell und zeitnah mit dem Clock den 
Wert einfangen willst, muß der ADC wohl keine extrem hohe Abtastrate 
haben (bzw. niedrige Wandlungszeit). Denn wenn der ADC getrigggert wird, 
macht er ohnehin als erstes einen Sample&Hold-Schritt, nimmt also 
sozusagen erstmal eine Meßprobe, die er dann (in Ruhe) wandeln kann. Und 
die Meßprobe nehmen ist relativ schnell getan ...
Auserdem - wenn immer in gleichen Zeitabstängen getriggert werden soll, 
dann isses doch egal, wie schnell der ADC mit der Wandlung beginnt - 
dann haste eben eine gewisse Verzögerung, aber eben durchgehend, und 
auch gleichmäßig

von Sebastian (Gast)


Lesenswert?

Also die Definition der Sampleclock Geschwindigkeit könnte ich 
folgendermaßen abwandeln:

Am liebsten wäre es mir, wenn diese Frequenz nicht von dem AD sondern 
von dem auswertenden AVR abhängig wäre.

Also brauche ich quasi einen AD, der schneller einen Wert liefert, als 
eine Taktperiode des AVR-Systemclocks (16 MHz).

Ist die Definition besser?   ;)

Der Sampleclock läuft über einen gewissen zeitraum kontinuierlich.

Das Problem ist, dass auch Module vorgesehen sind, die nur digitale 
Werte aufnehmen.

Wären alle Module gleich verzögert wäre das ja egal.

Nur die digitalen können innerhalb einer handvoll Clocks ihre Ports 
einlesen und im RAM speichern.

Die ADs müssten also einfach nur schnell den Wert liefern können.

von Klugscheisser (Gast)


Lesenswert?

Ich denke es gibt da einen wesentlich breiteren Spielraum für die Lösung 
als die Fragestellung suggeriert.
Unter den Annahmen, die ich oben gemacht habe, wäre es ja möglich die 
Wandlungen einmalig extern zu triggern und dann selbsttätig ablaufen zu 
lassen.

Jetzt soll der Takt zentral erzeugt werden. Wenn das Wetterdaten sind 
ist, das sicherlich weniger relevant als bei einer chemischen Reaktion 
von 5ml in einem Gläschen.
Wenn also die Synchronität weniger wichtig ist, dann würde es reichen 
einige Male in der Minute, Stunde oder so zu synchronisieren.

Wenn der Wandlungsabstand relativ gross ist (was mit dem AVR halt 
möglich ist) dann würde das so gehen.

Nimmt man den anderen Extremfall, dann müssten zwei Takte für den 
Wandler und den AVR erzeugt werden, die etwas versetzt sind. Dann würde 
der AVR nicht iddlen (was er dann sonst macht weiss nur der Frager). Da 
dann aber nochwas damit getan und gerechnet werden soll, wird der 
AD-Wandler der nun innerhalb von 60ns sampled wahrscheinlich garnicht 
seine volle Wandlungsrate realisieren brauchen. Verschwendung.

Ausserdem wundert mich, das erst 10ns genannt werden und die neue Zeit 
dann ANHAND DER AVR-TAKTFREQUENZ ausgerechnet wird. Wie kommt das?

von Sebastian (Gast)


Lesenswert?

Hatte mich verrechnet 62,4 ns -> 0,625 ns   ;) Sorry

Über den zweiten, zeitlich nach vorne versetzten Takt habe ich auhc 
schon nachgedacht.. Aber dann ist der aufgenommene Messwert statt 
verzögert zu früh aufgenommen.

Aber ein Takt für den AD ikst schon eine gute Idee.

Das der AD quasi mit dem AVR (16 MHz) getaktet wird und der AVR dann 
nurnoch auslesen muss.

Da kann man dann ja einen AD mit entsprechend geringer Verzögerung 
wählen!

von Klugscheisser (Gast)


Lesenswert?

>Da kann man dann ja einen AD mit entsprechend geringer Verzögerung
>wählen!
Ich habe Dich gefragt warum die Verzögerung so gering sein muss. Das 
hast Du noch nicht beantwortet.

Weisst Du mir ist das ja auch egal. Ich frage ja nur um zu helfen.
Was soll dieses "Ist diese Definition jetzt besser?" Es ist doch in 
Deinem Interesse.
Die Fragen sind gestellt. Ob Du sie beantwortest ist Deine Sache.

von ahem (Gast)


Lesenswert?

Was spricht dagegen, den Samplclock auf den ADC und auf den AVR zu geben 
? Der ADC misst sofort, der AVR liest nachher aus ?

von Klugscheisser (Gast)


Lesenswert?

@ ahem

>Was spricht dagegen, den Samplclock auf den ADC und auf den AVR zu geben
>? Der ADC misst sofort, der AVR liest nachher aus ?

>>Und da wäre es mir am liebsten, wenn die jew. AVRs in den Modulen nicht
>>ewig rumidlen müssen um auf den Messwert zu warten.
>Warum? Was solls?

Habe ich ihn auch schon gefragt.

von Sebastian (Gast)


Lesenswert?

Hmm, habe extra einen Emoticon dahinter gesetzt um der Formulierung die 
Härte zu nehmen. Ich wollte eine art Scherz machen.  ;)

Ich bin auch ausgesprichen dankbar darüber, dass in diesem Froum im 
Regelfall eine ausgesprochen kompetente Beratung stattfindet und ein 
freundlicher Umgangston herrscht.

Zu der Beantwortung Deiner Frage:

Hier haben jetzt schon so viele was geschrieben, ich komme da bei 
Antworten verfassen hin und wieder durcheinander. Sorry  ;)


Also nochmal, ich bin dankbar für jede Hilfe hier und weiß eure für 
diesen kostenfreien Service geopferte Freizeit zu schätzen.

Ich entschuldige mich, falls einige Formulierungen aufdringlich oder 
unfreundlich gewirkt haben sollten, dies lag definitiv nicht in meiner 
Absicht.

So, und jetzt "backt tothe topic":

Da es sich um eine hoffentlich hochfrequente Messung handeln soll 
(1-2MHz), sollten die Vertögerungen zwischen Messzeitpunkt und 
tatsächlicher Messung geringstmöglich sein  ;)

von Klugscheisser (Gast)


Lesenswert?

>Da es sich um eine hoffentlich hochfrequente Messung handeln soll
>(1-2MHz), sollten die Vertögerungen zwischen Messzeitpunkt und
>tatsächlicher Messung geringstmöglich sein  ;)

Aha. Und wer oder was sagt, das das eine eine Folgerung aus dem anderen 
ist?

von Sebastian (Gast)


Lesenswert?

naja, ich würde sagen, bei steigender Messfrequenz und gleichbleibender 
Messverzögerung steigt der relative Fehleranteil der Messung. Oder liege 
ich da falsch?

von ahem (Gast)


Lesenswert?

>Da es sich um eine hoffentlich hochfrequente Messung handeln soll
(1-2MHz), sollten die Vertögerungen zwischen Messzeitpunkt und
tatsächlicher Messung geringstmöglich sein  ;)


Ein genuegend schneller ADC macht das sofern er richtig angesteuert 
wird. Also nichts mit ueber den Prozessor triggern gehen...

von Sebastian (Gast)


Lesenswert?

Ja, denke ich mittlerweile auch.

Der ADC bekommt eine eigene Taktquelle die ihn mit deiner maximalen SPs 
füttert.

Der AVR kann dann ja quasi "on demand" den Ausgangspegel auslese.
Habe bei Farnell einen ADC gefunden der im Continuous-Mode einen 
Sample-to-Output-delay von 6 ns hat.

Das wäre, denke ich, bei 2MHz Messungen (T=500ns) eine maximale 
vertretbare Ungenauigkeit.

von Klugscheisser (Gast)


Lesenswert?

>naja, ich würde sagen, bei steigender Messfrequenz und gleichbleibender
>Messverzögerung steigt der relative Fehleranteil der Messung. Oder liege
>ich da falsch?

Erstens ist garnicht klar, das die Messfrequenz verändert werden soll.

Zweitens spielt der Abstand nur dann eine Rolle wenn Du den Messwert mit 
irgendeinem externen Ereignis verknüpfen musst, das durch absoluter Zeit 
beschrieben ist. Wenn es nur relative Abstände sind, spielt das keine 
Rolle.

Drittens: Wie gross der Fehler durch die zeitliche Abweichung ist hängt 
von dem Signal ab und wie es entsteht. Deswegen ja die Frage (die D auch 
noch nicht beantwortet hast :-) :-) :-) ). Wenn aber die Messungen 
zeitlich immer im selben Abstand erfolgen ist das egal, sofern nur die 
verschiedenen Messungen synchron erfolgen.

Viertens: Der erforderliche Grad der Synchronität (wenn das überhaupt 
eine graduelle Angelegenheit ist) hängt von der Anwendung ab. Bei 
Wetterdaten ist das sicherlich weniger kritisch als bei einem Hadron 
Collider.

von ahem (Gast)


Lesenswert?

Ist uebertrieben. Die Messung ist eh periodisch. Also ist eh nur der 
Jitter wichtig. Wenn die Wandlung 500ns dauert waer's auch gut. Und 
guenstiger.

von Sebastian (Gast)


Lesenswert?

Hmm das Problem habe ich ja eben schon erläutert.

Es gibt Module die digital-samplen, also nahezu ohne verzögerung.

Da die Werte der Analogen und der Digitalen hinterher zusammen 
ausgewertet werden, wäre dort eine zu große differenz.

Das steigen der Messfrequenz war nur darauf bezogen, dass ich bei der 
Höhe der Messfrequenz noch nichts festgelegt habe  ;)

Wärend der Messung ist diese natürlich konstant.

Die Synchronität ist kritisch, es werden Zustände elektrischer 
Steuerungen gemessen.

von Klugscheisser (Gast)


Lesenswert?

>Da die Werte der Analogen und der Digitalen hinterher zusammen
>ausgewertet werden, wäre dort eine zu große differenz.
Wer zwingt Dich bzw. die Schaltung denn dazu, dass die AD-Wandlung mit 
dem selben zeitlichen Abstand vom Trigger erfolgen muss wie das Port 
lesen?

Was hast Du eigentich für einen Hintergrund? Bist Du Schüler oder 
Student?

von Sebastian (Gast)


Lesenswert?

Da die Messungen zueinander im Bezug stehen müssen sie zur gleichen Zeit 
erfolgen. Dadurch wäre bspw. eine solche Auswertung möglich:

wenn PORTX=134 hat Ux folgenden Wert.

Ich bin ein angehender Student mit Fachhochschulreife. 
(Informationstechnische Assistent)

Warum?

von Johannes M. (johnny-m)


Lesenswert?

Sebastian wrote:
> @ Johannes M.
>
> Findest Du das OK, mir zu unterstellen ich würde "dumme Fragen stellen"?
Oh, da nimmt aber einer den "dezenten Hinweis" persönlich...

> Ein freundlicher Hinweis, dass Du keine Lust/Zeit hast darüber etwas zu
> schreiben mit einem Verweis auf google hätte es auch getan.
Das wäre bedeutend mehr Tipparbeit gewesen.

Der Hinweis war auch nicht böse gemeint. Nur sollte es in der heutigen 
Zeit gerade bei Begrifflichkeiten fast selbstverständlich sein, mal eben 
den fraglichen Ausdruck in eine Suchmaschine oder Wikipedia 
einzugeben...

von Jan (Gast)


Lesenswert?

Wenn es nicht mit einem AVR sein muß, dann ein µC mit schnellen internem 
AD. Kontinuierlich wandeln lassen und bei Triggerung steht der Meßwert 
quasi sofort bereit. STM32 geht wohl bis 1 MHz Samplefrequenz und zudem 
12 Bit Auflösung?

Gruß Jan

von ahem (Gast)


Lesenswert?

Zur Gleichzeigigkeit der Messungen. Dazu ist zu sagen, dass sich ein 
Signal mit 100kHz Bandbreite, das mit 2MHz abgetastet wird, nicht 
beliebig aendert, da es quasi bekannt ist. Irgendwelche zeitlichen Werte 
lassen sich durch Interpolation errechnen. Ein 2Mhz Wandler darf in der 
Tat 500ns verbrauchen. Das Signal ist immer noch bekannt.

von Klugscheisser (Gast)


Lesenswert?

Der Punkt ist doch einfach der, das um synchrone Abtastungen zu 
erreichen die Delays zwischen Trigger und Sample (analog und digital) 
keine Rolle spielt.

Ich habe den Verdacht, das der geforderte kurze Abstand garnicht 
notwendig ist. Das Sebastian das nur annimmt.

Die Frage ob der Trigger aus dem Signal abgeleitet wird bzw. werden muss 
hat er nicht beantwortet. Das aber wäre der einzige zwingende Grund, 
warum der Abstand vom Trigger definiert sein muss und es nicht reicht 
wenn er nur konstant ist.

von Klugscheisser (Gast)


Lesenswert?

>Der Punkt ist doch einfach der, das um synchrone Abtastungen zu
>erreichen die Delays zwischen Trigger und Sample (analog und digital)
>keine Rolle spielt.

Natürlich spielt der tatsächliche zeitliche Abstand schon eine Rolle,
aber eventuelle Unterschiede, können durch eine Wartezeit ausgeglichen 
werden. Und der absolute Abstand spielt auch keine Rolle (solange er zu 
dem zu messenden System passt).

von hans (Gast)


Lesenswert?

Wenn man mal bei Herstellern schaut (z.B. Linear) gibt es
viele AD-Wandler mit paralleler Ausgabe die auf Tempo ausgelegt
sind.
Das Einlesen ist dann fast wie das "normale" Port lesen/speichern
bei den Digitalmodulen.

Man braucht halt mehr Pins.

gruß hans

von Michael U. (amiga)


Lesenswert?

Hallo,

hab jetzt nicht alles gelesen, würde aber auch tippen, daß ein möglichst 
schneller Wandler (Flash-Wandler???) mit Parallel-Ausgabe gehen sollte.
Zwischen ADC und AVR ein schelles Latch. Der Wandler läuft durch und der 
Sampleimpuls triggert das Latch über ein externes RS-FF und löst am AVR 
einen IRQ zum Einlesen aus. Wenn der AVR fertig ist setzt er das FF 
zurück und der Kram wartet auf den nächsten Sampleimpuls.

Die Laufzeiten der Geschichte wären hier vermutlich sogar günstig, weil 
ein Flashwandler ja mit der Ausgabe hinterherhinkt.

Alles unter der Bedingung, daß es Snapshots der Werte sein sollen, die 
in brauchbar großen Abständen erfolgen sollen. Brauchbar groß -> Zeit, 
die der AVR zum Lesen des Latch, speichern der Daten und Rücksetzen des 
FF braucht.

Gruß aus Berlin
Michael

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.