PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Max. Frequenz zum Messen meherer analoger Spannungen?



squelver
19.08.2008, 10:50
Ich hab da sone Idee...

Auswertung meherer analoger Signale bzw. Spannungen an einem ADC-Kanal.

... und folgende Frage:

Bis zu welcher Frequenz ist es möglich, analoge Signale bzw. Spannungsauswertungen nacheinander an einem AVR z.B. Mega168 zu messen?

fhs
19.08.2008, 11:23
Hi,

bei den AVRs läuft der A/D-Wandler üblicherweise mit 50-200 kHz; eine 10 Bit-Wandlung benötigt 13 dieser Zyklen, also mindestens 65 μs. Wenn Du nur einen Kanal abfragst und (fälschlicherweise!) davon ausgehst, dass der AVR sonst gar nichts zu tun hat, entspricht das einer Abtastfrequenz von etwa 15kHz. Nach dem Nyquist-Shannon-Theorem kannst Du damit ein Signal von bis zu 7,5 kHz sinnvoll abtasten. Wie gesagt. das gilt für einen Kanal; wenn Du > 1 Kanal A/D-wandeln möchtest, reduziert sich die Bandbreite entsprechend. Wenn Du mit 8 Bits zufrieden bist, geht's etwas schneller.

Gruß

Fred

squelver
19.08.2008, 15:57
Naja, ich bin jetzt ja wieder am Lernen, was AVR angeht und denke, dass ich das auch schnell verstehe :)

Im Grunde hab ich mir gedacht:

- man nehme einen ATmega168 (Beispiel)
- hat 8 Potis
- da wäre noch 1x CD4017
- 10 Transistoren (Beispiel)

...das würde wie folgt aussehen:

- der Takt (Clock) für den CD4017 (Lauflicht-IC) kommt vom AVR
- der CD4017 sagt dem AVR, wann er durchgezählt hat (Pin12)
- 10 Ausgänge vom CD4017 schalten 10 Transistoren nacheinander durch und das mit einer sehr hohen Geschwindigkeit, diese geben jeweils die Spannung vom jeweiligen Poti zu dem einen ADC-PIN
- durch einen vorherigen Testdurchlauf, weiss der AVR, von welchem Poti bei welchem Takt die Spannung anliegt

Ist das verständlich?
Wäre das machbar?

fhs
19.08.2008, 16:09
Hallo,

klingt wie viel Hardware: alternativ könntest Du einen ATtiny26/261/461/861 nehmen (die haben 10 [wenn man den Reset-Pin umfunktioniert sogar 11 !] A/D-Kanäle) -- oder einen ATmega1280 (16 A/D-Kanäle!). Ich würde mit heutzutage lieber eine Lösung mit 2-3μC ausdenken als diskrete Logik... Hängt alles davon ab, wie Du die Informationen weiterverabeiten möchtest. Mit dem CD4017 könntest Du Dir die Transistoren vielleicht sogar sparen.

Gruß

Fred

squelver
19.08.2008, 16:17
Was das angeht, habe ich noch keine wirkliche Richtung, letzter Stand ist, dass ich nen ATmega168 für ein Skorpion-Bein mit 4 Potis verwende. Da ich aber gern noch Berührungssensoren und / oder Thermofühler dran hätte, würde das sehr knapp werden :-k

fhs
19.08.2008, 16:30
OK, bei der Mehrprozessor-Methode muss man sich eine Lösung für die Kommunikation zwischen den μCs überlegen; bei kurzen Abständen kann man den UART nehmen oder SPI oder I2C.

Gruß

Fred

squelver
19.08.2008, 16:33
OK, bei der Mehrprozessor-Methode muss man sich eine Lösung für die Kommunikation zwischen den μCs überlegen; bei kurzen Abständen kann man den UART nehmen oder SPI oder I2C.

Gruß

Fred

Daran habe ich tatsächlich mal gedacht und versucht Infos zu bekommen, aber das zu programmieren ist noch etwas hoch (Pakete senden und so) 8-[

Besserwessi
19.08.2008, 16:46
Der 4017 und Transistoren dazu ist relativ umständlich. Wenn man schon einen externen Multiplexer haben will, dann besser ein 4051 oder so. Für mechanisch betreiben Potis sollte das nicht Geschwindigkeitskritisch werden. Aber wenn doch, dann kann ein 2ter Controller schon etwas weiterhelfen.

squelver
19.08.2008, 16:48
Der 4017 und Transistoren dazu ist relativ umständlich. Wenn man schon einen externen Multiplexer haben will, dann besser ein 4051 oder so. Für mechanisch betreiben Potis sollte das nicht Geschwindigkeitskritisch werden. Aber wenn doch, dann kann ein 2ter Controller schon etwas weiterhelfen.

Ok, danke für die Infos, dann bleibe ich lieber bei der Variante mit den meheren Controllern O:)

fhs
19.08.2008, 16:56
Hi,

ist gar nicht so wild; z.B. könntest Du den 9-Bit-USART-Übertragungsmodus folgendermaßen verwenden: Wenn das höchstwertige Bit gesetzt ist, enthalten die übrigen Bits die Kanalnummer; auf ein Wort mit Kanalnummer folgen ein (für 8-Bit Werte) oder zwei Datenworte (für 9-16-Bit Werte) (höchstwertiges Bit=0), die den zugehörigen Messwert enthalten. So lassen sich die Daten empfängerseitig leicht wieder zusammensetzen, zuordnen und ein ein Array ablegen. Das wäre ein sehr einfaches aber effektives Protokoll, das man natürlich noch mehr vereinfachen könnte: Beim Übertragen des ersten Messwerts ist das höchstwertige Bit (von 9 Bits) gesetzt, alle anderen Werte folgen in einer festen Reihenfolge, und der Empfänger synchronisiert sich anhand des Wortes, bei dem das Bit 8 gesetzt ist.

Viele Grüße

Fred

squelver
19.08.2008, 17:12
Klingt einleuchtend, nur ist die Umsetzung für mich noch nicht denkbar.
Da komme ich dann drauf zurück, wenn ich alles vorbereitet habe, ok? :)

fhs
19.08.2008, 17:21
Klar, es muss in Dein Gesamtkonzept passen, und ich kann mir durchaus vorstellen, dass eine diskrete Lösung evtl. besser sein könnte.

Viel Erfolg!


Fred

squelver
19.08.2008, 17:28
Klar, es muss in Dein Gesamtkonzept passen, und ich kann mir durchaus vorstellen, dass eine diskrete Lösung evtl. besser sein könnte.

Viel Erfolg!


Fred

Vielen Dank \:D/