Forum: FPGA, VHDL & Co. u.a. CPLD/VHDL: Ansteuerung eines ADC richtig timen


von Full W. (realjey)



Lesenswert?

Hallo Forum,
ich benötige mal die Hilfe erfahrener Entwickler, ich komme nicht weiter 
beim Entwurf einer ADC-Strecke zum digitalisieren von Pixeldaten 
(NIR-Sensor).

Die Ansteuerung des Sensors ist soweit fertig, allerdings habe ich 
Probleme beim Beschalten und der Taktung des ADC.

Der NIR-Sensor liefert ein ADC-Trigger Signal, welches zum Sampeln 
verwendet werden soll. Die fallende Flanke des ADC-Trigger Signals gibt 
den optimalen Samplepunkt wieder. Der Sensor hat 192 Pixel, das 
ADC-Trigger-Signal beinhaltet also 192 clocks (siehe Anhang1).
Nach den 192 clocks ist ADC-Trigger solange „High“ bis die nächste 
Messung getätigt wird, bzw. die Zeile erneut ausgelesen wird. Diese 
Pause habe ich auch wenn ich den Sensor kontinuierlich auslese, da 
zwischen jeder Messung immer eine „Processing Time“ von wenigen µs nötig 
ist. Siehe Anhang 2.

Der ADC AD9826 
http://www.analog.com/static/imported-files/data_sheets/AD9826.pdf 
sampelt auch bei fallender Flanke, das passt also erst einmal gut 
zusammen.

Betreiben möchte ich den ADC im „1-Channel SHA Mode“.  Der ADC benötigt 
in diesem Modus zwei clocks (CDSCLK1 und ADCCLK) zur Verarbeitung der 
Pixeldaten.

Das Problem liegt für mich nun bei folgendem:

Wenn ich Seite 13 des AD9826 datasheets (3channel SHA-Mode) richtig 
verstehe, benötige für das korrekte Verarbeiten/Sampeln der Pixeldaten 
nicht 192 fallende Flanken an CDSCLK1 und ADCCLK, sondern 192+3=195 
clocks.
“The output data latency is three ADCCLK cycles”. D.h. für mich, das 
erst 3 clocks nach dem pixel 192 gesampelt wurde, die digitale 
Information am Ausgang des ADC liegt. Diese 3 clocks zusätzlichen 
besitzt aber mein ADC-Trigger Signal nicht, nach 192 ist Schluss.

Fragen:
A)Verstehe ich das DB des AD9826 überhaupt richtig?
B)Falls ja, war meine Idee nun, dass ich das ADC-Trigger Signal mit 
einem CPLD einlese, 3 clocks anhänge und dann erst auf den ADC gehe. Es 
würde zwar ein kleines Delay durch die Laufzeit entstehen, ich denke 
aber damit kann man leben?!
C)Wie würdet ihr so etwas lösen?
D)Falls die Idee mit dem CPLD gut ist, könnte mir jemand beim 
Programmieren helfen, VHDL ist nicht so meins :)
E) ADCCLOCK muss zu CDSCLK verschoben sein, auch das würde ich gerne mit 
einem CPLD lösen...

Bitte prügelt nicht zu sehr auf mich ein, ich benötige wirklich dringend 
Hilfe und bin kein Crack auf dem Gebiet :)

Mfg
fwc

von Johann (Gast)


Lesenswert?

>The output data latency is three clock cycles.

Das bedeutet, dass die digitalisierten Ausgangswerte (bezogen auf den 
analogen Eingang) drei Takte später am Ausgang anliegen.

Woher sollen denn die drei Takte ADCCLK, CDSCLK1 und CDSCLK2 kommen?

von Johann (Gast)


Lesenswert?

Liefert der Sensor mehrere Takte oder nur einen?

von fwc (Gast)


Lesenswert?

der Sensor liefert nur einen Takt: ADC-Trigg.

Im 1 channel SHA-Mode benötige ich nur CDSCLK2 und ADCCLK für den ADC.
Den ADC-Trigg-Takt der aus dem Sensor kommt plane ich mit einem CPLD 
weiter zu verabeiten, so das CDSCLK2 und ADCCLK generiert werden. 
Allerdings benötige ich (wenn ich das richtig verstehe), jeweils 3 
clocks mehr, als mir ADC-Trigg liefert.

von franke (Gast)


Lesenswert?

uiui.. clock an und aus... das wird hart... wo sollen die extra-takte 
auch herkommen.

Aber der Sensor bekommt doch bestimmt irgendwoher einen Referenz-Takt 
oder ähnliches. Such Dir doch erstmal einen druchlaufende Clock die 
syncron zu deinen Pixel-Daten ist.

Gruß

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

fwc schrieb:
> Allerdings benötige ich (wenn ich das richtig verstehe),
> jeweils 3 clocks mehr, als mir ADC-Trigg liefert.
Ist doch halb so schlimm, die kommen ja vom Sensor mit der nächsten 
Zeile...
Du musst also einfach einen Synchronimpuls erzeugen, der um 3 
Taktimpulse versetzt ist: erst nach 3 Takten der "neuen" Zeile ist die 
"alte" durch den Wnadler durch.

von fwc (Gast)


Lesenswert?

Lothar Miller schrieb:
> Ist doch halb so schlimm, die kommen ja vom Sensor mit der nächsten
> Zeile...
> Du musst also einfach einen Synchronimpuls erzeugen, der um 3
> Taktimpulse versetzt ist: erst nach 3 Takten der "neuen" Zeile ist die
> "alte" durch den Wnadler durch.

Das hatte ich mir auch schon überlegt, aber dann habe ich ja das 
Problem, das der letzte Pixel der aktuellen Zeile erst verzögert (also 
um die Pause des ADC-Trigg-Taktes) gesamplet wird, während die anderen 
Pixel schon im PC sind. Oder verstehe ich dich falsch?

Von der Idee CDSCLK2 und ADCCLK aus ADC-Trigg mit einem CPLD zu 
generieren haltet ihr nichts?

von franke (Gast)


Lesenswert?

ähm...

um an die Daten zukommen brauchst du einen 16fachen Datentakt für das 
SPI-Interface.
Wo kommt der her ?

Gruß

von franke (Gast)


Lesenswert?

ups .. verrafft.. sorry... vergesses...

von fwc (Gast)


Lesenswert?

was meinst du?

Die Konfiguration des AD9826 durch das 3wire Interface (SPI) habe ich 
auch im CPLD realisiert. Der CPLD wird mit 40MHz getaktet.

Die SPI selbst, takte ich nur mit 1MHz, also SCLK=1MHz.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

fwc schrieb:
> was meinst du?
Gemeint war, dass die Daten auch über die SPI-Schnitte abgeholt werden 
würden....

> Der CPLD wird mit 40MHz getaktet.
Hat dieser Takt was mit dem Takt vom Sensor zu tun?
Wird der Sensor auch mit diesen 40MHz versorgt?

> während die anderen Pixel schon im PC sind.
In welchem PC? Der ist neu hier...

> dann habe ich ja das Problem, das der letzte Pixel der aktuellen Zeile
> erst verzögert (also um die Pause des ADC-Trigg-Taktes) gesamplet wird,
> während die anderen Pixel schon im PC sind.
Überlegs dir mal: genau das ist kein Problem. Denn es juckt ja 
überhaupt nicht, wenn du im "PC" 3 Pixel Offset hast. Das kannst du da 
leicht korrigieren, das ist nur Software....

von fwc (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Lothar,

also die 40MHz ist sowohl die GCK des CPLD als auch der Masterclock für 
den Sensor.

Der Pixeloutput beträgt allerdings nur 5MHz.

hier noch einmal kurz eine schematische Darstellung (Anhang).

Die digitalisierten Daten sollen von einem FPGA aufgenommen und über 
Ethernet an einen Host-PC gesendet und verarbeitet werden (das ist bei 
dem Projekt dann allerdings nicht mehr mein Part).

Die Sache ist, der Sensor soll Materialien detektieren, welche 
kontinuierlich unter dem Chip hinweglaufen. Dazu muss eine Zeile immer 
komplett im PC vorhanden sein. Habe ich die Zeile erst komplett im PC 
wenn die nächste Zeile (also die nächste Detektierung) verarbeitet wird, 
kommt es zu Fehlern in der Erkennung.

Deswegen noch einmal die Frage: macht es Sinn und wie kompliziert ist es 
dem CPLD als Input die ADC-Trigg clock zu liefern und daraus CDSCLK2 und 
ADCCLK zu generieren?

von franke (Gast)


Lesenswert?

Hi

Ist die Schaltung fertig ?
Warum den CPLD, und nicht alles durch/vom den FPGA ?

Sensor, ADC und FPGA laufen doch Syncron zu den 40 MHz, dann kannst du 
auch einfach ne rising-edge detection auf das Trigger-Signal machen.
Dann hast du auch keine Problem beliebige extra Takte zu erzeugen, für 
einen FPGA ist das ein einfach Spiel...

Gruß

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

fwc schrieb:
> Die Sache ist, der Sensor soll Materialien detektieren, welche
> kontinuierlich unter dem Chip hinweglaufen. Dazu muss eine Zeile immer
> komplett im PC vorhanden sein.
Da ist ja zwischen dem ADC und dem PC noch ein FPGA. Dann ist das 
überhaupt kein Problem!

> Habe ich die Zeile erst komplett im PC wenn die nächste Zeile
> (also die nächste Detektierung) verarbeitet wird, kommt es zu Fehlern
> in der Erkennung.
Dann hast du noch irgendwo einen Fehler im System. Denn der PC merkt 
es überhaupt nicht (er kann es gar nicht merken!), wann der Sensor mit 
einer Zeile fertig ist. Und deshalb muss es egal sein, wann die 
Daten für die letzte Zeile kommen. Die paar ms dürfen da nichts 
ausmachen können, zumal sie sogar konstant sind.

Zeichne dir das Ganze einfach mal auf: immer nach dem 3. Impuls der 
aktuellen Zeile kannst du die letzte Zeile auf den Weg schicken. Das 
Timing bleibt insgesamt gleich, die Daten kommen nicht schneller, nur 
ein wenig später...

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.