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
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.
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.
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.
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 ;)
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.
Schalte doch mit dem Messtrigger eine externe Sample- and Hold -
Schaltung. Etwa so
----- CMOS-Schalter -----+----->
!
!
2nF
!
!
-------------------------+----->
@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.
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?
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
@ 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.
@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.
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.
@ 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
>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?
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
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.
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?
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!
>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.
@ 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.
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 ;)
>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?
naja, ich würde sagen, bei steigender Messfrequenz und gleichbleibender
Messverzögerung steigt der relative Fehleranteil der Messung. Oder liege
ich da falsch?
>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...
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.
>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.
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.
>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?
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?
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...
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
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.
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.
>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).
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
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