Feste Abtastrate bei AD-Wandlung?

#899562
Lesenswert?

Moin,

ich möchte gerne ein Signal am Eingang des AD-Wandlers auf eine Frequenz 
testen. Dafür möchte ich 128 AD-Messungen durchführen, und diese in 
einem Array speichern, um hinterher in Ruhe die Analyse durchzuführen. 
Die Abtastrate soll dabei ca. 60kHz betragen.
Meine Frage nun an Euch: wie würdet Ihr das umsetzen??? Ich dachte 
zuerst an einen Timer, der Singe-Conversions anstößt. Wenn die Wandlung 
fertig ist, geht es in den ADC-Interrupt, wo die Daten im Array 
gespeichert werden. Würdet Ihr das auch so machen?

Dabei stelle ich aber gerade fest, dass ich wohl mit dem Atmega keine 
Abtastrate von 60khz erreichen werde... Wenn ich eine CLK von 14.7456Mhz 
habe, und den Prescaler auf 128, also max setzte, habe ich einen 
ADC-Takt von 115.2Khz. Im Single-Conversion Mode braucht er aber 25 
Takte. Wären also 217us, wobei ich eigentlich alle ca. 17us ein Ergebnis 
bräuchte...

Selbst, wenn ich einen OSC von 11.0592Mhz nehme, und den Prescaler auf 
64 setze, dann habe ich eine Geschwindigkeit von 172.8Khz. Und selbst im 
Freerun-Modus mit nur 12 Takten komme ich noch auf ca. 70us.

Also was machen? Externen ADC mit höherer Rate, und über SPI 
anschließen, um die Geschwindigkeit hinzubekommen? Könnte das was 
helfen?

MfG, und vielen Dank, Ozzy
#899572
Lesenswert?

Christoph O. wrote:
> Im Single-Conversion Mode braucht er aber 25
> Takte. Wären also 217us, wobei ich eigentlich alle ca. 17us ein Ergebnis
> bräuchte...
Nö, der braucht 13 Takte, nur für die jeweils erste Wandlung nach dem 
Einschalten (setzen von ADEN) bzw. nach einem Kanalwechsel braucht er 
25. Und das Ergebnis dieser ersten Wandlung sollte man sowieso 
wegschmeißen. Wenn man das ADEN gesetzt lässt und nur auf einem Kanal 
misst, dann sind es 13 Takte.

Und je nachdem, was für einen "ATMega" Du hast, kann der ADC auch 
Auto-Trigger, wobei der ADC hardwaremäßig z.B. von einem Timer 
"angestoßen" werden kann.

Und ja, 60 kS/s sind bei voller Auflösung mit einem AVR-ADC nicht 
erreichbar (was aber auch im Datenblatt ganz vorne steht: max. 15 kS/s 
bei 10 Bit). Wenn Du nur 8 Bit Auflösung brauchst, kannst Du aber i.d.R. 
mit der Taktrate höher gehen.
#899574
Lesenswert?

Christoph O. wrote:
> Also was machen? Externen ADC mit höherer Rate, und über SPI
> anschließen, um die Geschwindigkeit hinzubekommen? Könnte das was
> helfen?
Wenn der externe ADC schnell genug beim Wandeln ist und Dein AVR schnell 
genug bei der Verarbeitung der Ergebnisse, dann könnte das gehen... 
Allerdings ist eine serielle Übertragung per SPI da auch wieder eher 
hinderlich (60 kS/s und bei jedem Sample 16 Bit Daten schieben macht 
eine erforderliche mindest-Datenrate von 1 MBit/s, und das ohne 
großartige Totzeiten...)
#899673
Lesenswert?

Hi,

danke für Eure Antworten.

@Jochen Müller: ich will Daten aufnehmen, und die anschließend auf 2 
Frequenzen überprüfen. Die Frequenz mit dem höheren Wert hat gewonnen, 
der Rest interessiert mich nicht...

Danke für den Tip für den AD-Wandler. I2C kommt ja nicht in Frage wegen 
der geringen CLK.

@Johannes M.: Wenn ich nur 8 Bit nehme, und die rechts ausrichten will 
(ich erwarte nur kleine Werte am Eingang): auf wieviel khz könnte man 
dann maximal gehen???

MfG, und vielen Dank noch einmal, Ozzy
#899677
Lesenswert?

Christoph O. wrote:
> @Johannes M.: Wenn ich nur 8 Bit nehme, und die rechts ausrichten will
> (ich erwarte nur kleine Werte am Eingang): auf wieviel khz könnte man
> dann maximal gehen???
Schau doch einfach mal ins Datenblatt Deines immer noch nicht näher 
spezifizierten AVR unter "ADC Characteristics". Da steht eine Tabelle 
mit den Eckdaten des ADC, u.a. mit der "absolute accuracy" für 
unterschiedliche Taktfrequenzen...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren