Forum: Mikrocontroller und Digitale Elektronik Geschwindigkeit ADC


von Frank L. (franklink)


Lesenswert?

Hallo Zusammen,
ich bin zur Zeit dabei mich mit dem ADC des ATMEGA88/168 zu 
beschäftigen.

Jetzt bin ich bei der Berechnung der Frequenz mit der ich die Daten von 
ADC abholen kann, ins schleudern gekommen.

Folgende Grundvoraussetzung:

ATMEGA88/168 -> interne 8 MHz
8 Bit ADC Ergebnis

Die ADC-Frequenz muss ich anhand der Daten möglichst nahe an die 
möglichen 200KHz heranbringen.

D.h. ausgehen von 8 MHz verwende ich den Vorteile 64 und komme damit auf 
125KHz.

Die ADC-Wandlung kann ich entweder freerunning oder getriggert z.B. 
durch "Timer/Counter0/1 Compare Match A" oder "Timer/Counter0/1 
Overflow" auslösen.

Die Messung eines einzelnen Wertes dauert ca. 13 Zyklen.

Wenn ich also mit einer Frequenz von ca. 20KHz messen möchte, würde das 
bedeuten, das ich den Triggerimpuls alle 1/260KHz auslösen muss.

Ist das so richtig, oder habe ich das Datenblatt komplett 
missverstanden.

Gruß
Frank

von Falk B. (falk)


Lesenswert?

@  Frank Link (franklink)

>D.h. ausgehen von 8 MHz verwende ich den Vorteile 64 und komme damit auf
>125KHz.

Macht aber nur 125/13 = 9,6kHz Abtastrate. Man kann den ADC auch ein 
wenig höher takten, wenn man nicht die volle Auflösung und Genauigkeit 
benötigt. Als Vorteiler /32 oder /16.

>Die ADC-Wandlung kann ich entweder freerunning oder getriggert z.B.
>durch "Timer/Counter0/1 Compare Match A" oder "Timer/Counter0/1
>Overflow" auslösen.

Ja.

>Wenn ich also mit einer Frequenz von ca. 20KHz messen möchte, würde das
>bedeuten, das ich den Triggerimpuls alle 1/260KHz auslösen muss.

Ja. Und hier bietet sich der free running mode an, da spart man den 
extra Timer.

MFG
Falk

von Floh (Gast)


Lesenswert?

Kannst du so machen.
Wenn du nicht die vollen 10bit brauchst, kann man den ADC auch schneller 
takten, bis ca 1MHz maximal.

Für schnelle Analogsignale ist der ADC sowieso nicht geeignet, da die 
Eingangsbandbreite des ADC bei ca 37 kHz liegt. (->DB unter Eletrical 
Charakteristics).
:-)

von Mike J. (emjey)


Lesenswert?

Du betreibst den ADC mit 125KHz und der ADC braucht beim 
freeRunning-Modus 13 Takte um den Wert zu ermitteln, also kann der ADC 
125k/13=9615 Werte pro Sekunde ermitteln.

Wenn du den ADC immer neu startest dauert es 25 Takte und es können nur 
5000 Werte ermittelt werden.

von Gerhard (Gast)


Lesenswert?

Frank Link schrieb:
> Die Messung eines einzelnen Wertes dauert ca. 13 Zyklen.
>
> Wenn ich also mit einer Frequenz von ca. 20KHz messen möchte, würde das
> bedeuten, das ich den Triggerimpuls alle 1/260KHz auslösen muss.

Wat is los ? Ich komme nicht aus dem ATMEL-Lager, darum kenne ich die 
Feinheiten nicht. Aber wenn die Messung 13 Zyklen dauert und du 
arbeitest am ADC mit 125kHz: 1/125000 * 13 = 0.000104s = 104us. Das 
ergibt deutlich was anderes als 1/260000.

Gruß
Gerhard

von spess53 (Gast)


Lesenswert?

Hi

>Wenn ich also mit einer Frequenz von ca. 20KHz messen möchte, würde das
>bedeuten, das ich den Triggerimpuls alle 1/260KHz auslösen muss.

Das geht aber so nicht. Bei 8MHz und Vorteiler 64 dauert eine 
AD-Wandlung 104,000 µs. Das macht maximal: 9615 Wandlungen/s.

Da du aber nur 8 Bit benötigst kannst du auch einen ADC-Takt>200kHz 
benutzen. Mit Vorteiler 32 kommst du dann auf 19,230 kS/s.

MfG Spess

von MWS (Gast)


Lesenswert?

Falk Brunner schrieb:
>>Wenn ich also mit einer Frequenz von ca. 20KHz messen möchte, würde das
>>bedeuten, das ich den Triggerimpuls alle 1/260KHz auslösen muss.
>
> Ja.

Das stimmt so nicht, es muss nicht mit 260kHz getriggert werden, sondern 
mit der Frequenz, mit der gemessen werden soll. Der ADC-Prescaler muss 
dagegen so eingestellt werden, daß er in einer Messperiode die 
benötigten 13 Takte erzeugt.

Beispiel: µC-Clock 8MHz
          Trigger 20kHz
          ADC-Prescaler 16 = 500kHz ADC-Clock

Damit kann mit bis zu 38.4kHz getriggert werden.

von Frank L. (franklink)


Lesenswert?

Danke erstmal für die Antworten.
Ich bin da glaube ich von einem Missverständnis ausgegangen. Mein 
Verständnis war, dass ich mit 8000KHz durch Prescale nur den Takt des 
ADC einstelle.

Für den Freerunning Mode ist mir das auch soweit klar.

Wenn ich das ganze aber in Verbindung mit einem Trigger verwende könnte 
ich deutlich schneller messen. Unabhängig davon, ob die Wandlung 13 oder 
25 Zyklen dauert.

Gehe ich jetztmal davon aus, dass ich 8MHz habe und die Wandlung 25 
Zyklen dauert, kann ich theoretisch mit 320 KHz messen. Ist das soweit 
korrekt?

Meine Anforderung ist allerdings weit geringer. Ich möchte mit 20KHz 
abtasten, weil ich Frequenzen mit bis zu 10KHz in einer FFT 128 
betrachten möchte. Um die einzelnen Frequenzbänder in der FFT berechnen 
zu können, benötige ich aber die Abtastrate so genau wie möglich.

Bin ich jetzt vollständig auf dem Holzweg?

Gruß
Frank

von Purzel H. (hacky)


Lesenswert?

Die Frequenzbaender haben eh krumme Werte, daher muss man auch nicht mit 
einer geraden Frequenz beginnen.

von MWS (Gast)


Lesenswert?

Frank Link schrieb:
> Wenn ich das ganze aber in Verbindung mit einem Trigger verwende könnte
> ich deutlich schneller messen. Unabhängig davon, ob die Wandlung 13 oder
> 25 Zyklen dauert.

Nein, kannst Du nicht. Wie schon gesagt rennt der ADC immer mit dem per 
ADC-Clock, d.h. µC-Clock : ADC-Prescaler : 13 = maximale Sampelrate.
Über die kommst Du auch mit externer Triggerung nicht weg.

Frank Link schrieb:
> Gehe ich jetztmal davon aus, dass ich 8MHz habe und die Wandlung 25
> Zyklen dauert, kann ich theoretisch mit 320 KHz messen. Ist das soweit
> korrekt?

Nein, Du verwechselst den Trigger mit dem was nach dem triggern abläuft.

von spess53 (Gast)


Lesenswert?

Hi

>Ich bin da glaube ich von einem Missverständnis ausgegangen. Mein
>Verständnis war, dass ich mit 8000KHz durch Prescale nur den Takt des
>ADC einstelle.

Das ist auch so richtig.

>Wenn ich das ganze aber in Verbindung mit einem Trigger verwende könnte
>ich deutlich schneller messen. Unabhängig davon, ob die Wandlung 13 oder
>25 Zyklen dauert.

Du kannst nicht schneller messen wie der ADC wandelt. Die 13 Takte sind 
ADC-Takte also das 13x64 Cpu-Takte.

MfG Spess

von Frank L. (franklink)


Lesenswert?

Ok, jetzt, habe ich es glaube ich verstanden.

Bei 8MHz würde sich dabei eine Samplingrate von ca. 9,6 KHz einstellen. 
Bei 20MHz ca. 24KHz. Dies gilt sowohl im Freerunningmode als auch in den 
getriggerten Modis. Ausgehend von einem Prescale von 64.

Stoße ich die Wandlung manuell an, muss ich nicht 13*64 rechnen, sondern 
25*64 weil die Wandlung mehr Takte benötigt. Die 64 ist wieder der 
Prescaler des ADC.

Gruß
Frank

von spess53 (Gast)


Lesenswert?

Hi

>Stoße ich die Wandlung manuell an, muss ich nicht 13*64 rechnen, sondern
>25*64 weil die Wandlung mehr Takte benötigt.

Nein. Die 25 Takte gelten nur für die erste Wandlung nach Setzen von 
ADEN

Datenblatt:

The first conversion after the ADC is switched on (ADEN in ADCSRA is 
set) takes 25 ADC clock cycles in order to initialize the analog 
circuitry.

MfG Spess

von Mike J. (emjey)


Lesenswert?

spess53 schrieb:
> Nein. Die 25 Takte gelten nur für die erste Wandlung

Oh, das hat er von mir.

normal:
1.5 Takte für Sample and Hold + 11.5 Takte für die Wandlung = 13 Takte

erste Wandlung / nach Kanalwechsel:
 13.5 takte für Sample and Hold + 11.5 Takte für die Wandlung = 25 Takte

Im Datenblatt steht:
"If a lower resolution than 10 bits is needed, the
input clock frequency to the ADC can be higher than 200 kHz to get a 
higher sample rate."

20kHz*13 Takte=260000Hz
8MHz/260000=30.77

Da du mehr als 20 Samples pro Sekunde brauchst müsstest du den Prescaler 
auf 16 stellen, das ergibt dann einen ADC-Takt von 500kHz.

Ob die Genauigkeit dann noch bei 8 Bit liegt kann ich nicht sagen, am 
besten du testest es einmal aus.

Wenn es unbefriedigend ist kannst du immer noch einen externen ADC 
nutzen.

von spess53 (Gast)


Lesenswert?

Hi

>erste Wandlung / nach Kanalwechsel:
> 13.5 takte für Sample and Hold + 11.5 Takte für die Wandlung = 25 Takte

Nein. Nur für erste Wandlung. Generell sind die ersten 1,5 Takte für 
MUX und REFS Update. Nur bei der ersten Wandlung werden danach bis zum 
Sample&Hold noch 12 Takte eingeschoben. Nicht bei Kanalwechsel.

MfG Spess

von Frank L. (franklink)


Lesenswert?

Hallo,
danke für alle Infos, den Rest werde ich in den nächsten Tagen mal 
ausprobieren und testen, mal sehen was dabei rauskommt.

Gruss
Frank

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.