Forum: Mikrocontroller und Digitale Elektronik max. Geschwindigkeit des ADC


von GerritW (Gast)


Lesenswert?

Hallo

Ich hoffe nicht, dass dieses Thema so schon existiert. Gefunden habe
ich es nämlich nicht.

Ich bin auf der Suche nach einer Möglichkeit, Analogsignale eines
Beschleunigungssensors zu erfassen und via USB zum PC zu schieben. Dazu
sollen 10000 Messwerte pro Sekunde (!) mit mindestens 10 bit Auflösung
erfasst werden. Meiner Meinung würde sich der Mega8 mit dem internen
10bit ADC anbieten. Die Messwerte würde ich auf dem internen EEPROM
abspeichern und nach Beendigung der Messung (etwa 5sec.) wieder
auslesen. Die Weiterverarbeitung zur USB-Schnittstelle soll hier
erstmal nicht das Problem darstellen.

Meine Frage ist, ob es wohl möglich ist, diese hohe Abtastrate zu
realisieren. Schließlich müssen hier doch eine Menge Signale abgefragt
und auf dem Speicher abgelegt werden.

Andere Möglichkeiten, wie mit dem JoyWarrior20 A10-8 von Code
Mercenaries (www.codemercs.com), der die Daten in "Echtzeit"
rüberschicken soll, werden vom Hersteller als "um Größenordnungen zu
langsam" beschrieben. Find ich schon seltsam, schließlich sind laut
Datenblatt Übertragungsraten von 1,5 MBit/s möglich.

Ich hoffe, jemand kann mit helfen.

von Santa Klaus (Gast)


Lesenswert?

>10000 Messwerte pro Sekunde (!) mit mindestens 10 bit Auflösung
>erfasst werden.
>...
>Die Messwerte würde ich auf dem internen EEPROM abspeichern und nach
>Beendigung der Messung (etwa 5sec.) wieder auslesen.

Um die Machbarkeit dieses Vorhabens zu klären, ist es notwendig, die
benötigte Speicherkapazität und Geschwindigkeit des EEPROMS
auszurechnen und mit der verfügbaren zu vergleichen.

Zur Speicherkapazität: 10000 Meßwerte 5 Sekunden lang macht (Vorsicht:
es folgt eine sehr komplizierte Rechnung!) 5 * 10000 = 50000 Meßwerte.
Wenn jeder Meßwert 1 Byte benötigen würde, müßte das EEPROM mindestens
50000 Bytes Kapazität bieten.  Wie ein Blick in das Datenblatt des
ATmega8 verrät, hat dieser Controller aber leider nur 512 Bytes
EEPROM.

Zur Geschwindigkeit: 10000 Meßwerte pro Sekunde bedeutet, daß der
Speichervorgang eines Meßwertes höchstens 1/10000 s = 0.1 ms benötigen
dürfte.  Das Beschreiben einer EEPROM-Zelle dauert aber typischerweise
ca. 8 ms (Richtwert).

Fazit: Dein Vorhaben ist "leicht" oversized.

von GerritW (Gast)


Lesenswert?

>Fazit: Dein Vorhaben ist "leicht" oversized.

Wenn die Betonung auf "leicht" liegt, will ich dir recht geben :-)

Jetzt mal im ernst: Mein Fehler war, dass ich den internen EEPROM nicht
als 0,5kB sondern als 512kB interpretiert habe.... (bitte dazu keine
weiteren Kommentare!)

Es muss aber doch Möglichkeiten geben, Analogsignale in dieser
Geschwindigkeit erfassen zu können. Grundsätzlich bin ich frei in der
Entscheidung der technischen Realisierung. Es muss also kein µC sein.

von Rolf Magnus (Gast)


Lesenswert?

Mir ist nicht ganz klar, warum die Daten im EEPROM gespeichert werden
müssen. Das RAM wäre um Größenordnungen schneller und außerdem nicht so
begrenzt, was die maximale Anzahl an Schreibvorgängen angeht.
Die Größe bleibt natürlich problematisch. Es gibt m.W. weder
AVR-Controller mit genügend EEPROM, noch solche mit genug RAM. Man
könnte allerdings per SPI einen ausreichend großen externen Speicher
anschließen.

> Wenn jeder Meßwert 1 Byte benötigen würde, müßte das EEPROM
> mindestens 50000 Bytes Kapazität bieten.

Dummerweise sollen aber 10bit erfasst werden, also wird das nichts mit
den 50000 Bytes. Entweder macht man es sich einfach und verschwendet 6
Bytes pro Messwert, indem man einfach jeweils 16bit abspeichert, dann
braucht man 100000 Bytes Speicher, oder man spart, indem man per
umständlichem Bithantieren die Daten packt. Es bleibt dann noch ein
Speicherverbrauch von mindestens 62500 Bytes übrig, was immerhin noch
unter 64kByte liegt.

Der ADC dürfte für diesen Fall noch schnell genug sein. Er schafft
meines Wissens so um die 15000 S/s.

von Rolf Magnus (Gast)


Lesenswert?

> Es muss aber doch Möglichkeiten geben, Analogsignale in dieser
> Geschwindigkeit erfassen zu können.

Soll's geben. Jede Soundkarte macht sowas.

> Grundsätzlich bin ich frei in der Entscheidung der technischen
> Realisierung. Es muss also kein µC sein.

Falls das Eingangssignal keine zu niedrige Frequenz hat, wäre eine
Soundkarte vielleicht wirklich eine Alternative. Die kann sogar 16bit.

PS: Warum willst du denn eigentlich 5 Sekunden warten, bevor du die
Daten überträgst? Wenn du vorher anfängst, brauchst du keinen so großen
Speicher.

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Andere Frage: gibt´s da nicht auch G-Sensoren mit digitaler
Schnittstelle? Dann braucht man nur noch ein schnelles großes
(serielles oder paralleles) externes SRAM und der Controller muß dann
(erstmal) nur Bytes schaufeln. Wenn analoger Sensor, dann halt A/D auf
volle Pulle und ebenfalls externes SRAM füttern...

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Wenn als Controller ein Mega128 verwendet wird, dann kann an den
externes SRAM angeschlossen werden, was dann auch für 10k
16*-Bit-Samples/Sekunde ausreicht. Dazu ist nur ein 8-Bit-Latch für den
gemultiplexten Adress/Datenbus erforderlich.
Je nach Größe des SRAMs passen da ziemlich viele Messwerte 'rein.

Würde der AVR über eine ausreichend schnelle Schnittstelle (USB) an
einen PC angeschlossen, könnte man allerdings auf das Zwischenspeichern
der Messwerte annähernd vollständig verzichten.
Für 10k Samples/sec bei 16* Bit Samplegröße sind nur 20 kByte/sec zu
übertragen, und das ist mit USB problemlos möglich, beispielsweise mit
einem der beliebten FTDI-Chips.


*) sofern man nicht "packen" will, die kleinste Speichermenge, die
10-Bit-Samples belegen

von Kupfer Michi (Gast)


Lesenswert?

Hab gerade einen ähnlichen Logger mit einem Mega16 gebaut.
Datenspeicherung erfolgt in einem 32KB(oder grösser) SRAM.

Einen Mega mit ext. Speicherinterface (Mega128,Mega8515 etc) braucht
man nicht unbedingt da die Daten ja nicht random gelesen/geschrieben
werden und es ja nicht auf Geschwindigkeit ankommt.

Einfach einen externen Counter (muss nicht mal ein sync. Counter sein)
für die Speicheraddr. der durch ein Portbit getaktet wird. Ebenso /OE ,
/WE und CounterClr, man hat ja zwischen den Wandlungen noch bannig
Zeit.

Die Daten schieb ich dann über einen USB/FT232BM mit 1.152MB zum PC.

Gleichzeitig Wandeln und Senden (ohne Puffer) wollte ich nicht da man
sich bei den Geschwindigkeiten nie sicher sein kann dass der PC die
Daten immer rechzeitig abnimmt.

von klaus (Gast)


Lesenswert?

Hi,

hat eigentlich schon mal jemand versucht wie schnell die max. 
geschwindigkeit des atmel-adc ist ?
Angenommen ich brauche nur 2 oder 3 bits, kann ich da mit der 
vollen/halben quarzfequenz samplen oder kommt da nur müll raus ?

(tastatur ist in ordnung, ich bin nur faul)
(und: ja ich weiß, der thread ist von 2005)

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.