PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ADC's und Mikrocontroller



xanatos
23.01.2005, 14:16
hallo erstmal, schließlich bin ich neu...
mein problem/frage hat an sich nichts mit robotern zu tun aber da es sich rein technisch um das selbe handelt hoffe ich trotzdem hier hilfe zu finde.

es dreht sich eigentlich lediglich um das einlesen analoger werte und deren übertragung zum PC.
eigentlich...
das ding ist es sind drei werte die möglichst gleichzeitig gemessen werden müssen und das zweimal innerhalb der periode einer 1kHz frequenz. also zweimal in 1ms (?).

nun ja der gedanke war also einen mikokontroller zu nehmen daran drei 12bit ADC's zu hängen welche alle die selbe clock(takt) haben. Somit wäre das problem der gleichzeitigen mesung gelöst. was ich nun nicht weiß ist ob das mit der geschwindigkeit möglich ist. Die AD wandler sollten das ja ohne große probleme schaffen aber man muss ja noch die werte einlesen (seriell) und in den speicherschreiben.

wäre echt nett wenn mir jemand etwas weiterhelfen könnte.
sry fals das nicht ganu das richtige unterforum war.

x-ryder
23.01.2005, 14:44
doch doch ich denke das war das richtige forum ^^

ich denke du solltest nen µc nehmen und die eingebauten ADC's verwenden die sind meistens viel schneller....

müssen die unbedingt 12 bit haben oder reichen auch 10 bit?

Martin

PasstScho
23.01.2005, 14:48
Hi,
Ich denke wenn du einen passenden externen Wandler hast, der die Daten in der richtigen Geschwindigkeit zur verfügung stellt ist die Übertragung in einen µC leicht zu lösen. Mit 16Mhz sind also ~16Mio Befehle pro Sekunde möglich. Um den status eines Pins einzulesen braucht es einen Takt. Für den Microprozessor sollte es kein Problem sein, die 3*2*1000 einzulesen, nur ich bin mir nicht ganz sicher, ob die übrige Rechenzeit noch für eine Problemlose Datenübertragung über RS232 ausreicht. Theoretisch ist da schon noch ne Menge Rechenzeit über, aber wie genau ich das programmieren würde müsste ich mir noch überlegen. 3*12(also 16)Bit Werte, 1000x pro Sekunde, über die RS232 zu jagen ist schon recht heikel kann ich mir vorstellen. Der LPT-Port wäre da wohl eine Lösung.
Mal schauen was der Rest sagt ...
MfG Alex

23.01.2005, 15:05
@PasstScho: für die übertagung hab ich dann mehr zeit. das kann wegen mir den halben tag dauern...die wandler sollten das denke ich schaffen. ich hatte mir den ltc 1286 ausgekuckt, der hat 12bit und ca. 60µs conversion time. wobei die maximal clk Frequenz mit 250kHz angegeben ist.

@x-ryder: ich hab nur noch nicht rausgefunden ob ich das wandeln im µC für mehrere wandler gleichzeitig "anschalten" kann. der amtel hat doch lediglich nen analog mux und einen wandler!? gibts da was passenders für mein prob

xanatos
23.01.2005, 15:06
lol. da war ich wohl nicht angemeldet...

Kjion
23.01.2005, 17:31
Wieviele Werte willst du denn speichern ??

Bei 12-Bit brauchst du aber schon einen ganz guten Aufbau, ansonsten sind dir die untersten Bit zu sehr verrauscht. Im Normalfall reichen eigentlich 8 bis 10-Bit aus.

Du hast schon recht, im AVR sitzt nur ein AD Wandler mit einer entsprechenden Multiplexerschaltung davor. Das heißt man kann auch immer nur einen Kanal auf einmal auslesen...
Es es unbedingt genau gleichzeitig sein muss braucht man dann schon mehrere parallel AD-Wandler.

@x-ryder
Die eingebauten ADCs sind nicht unbedint viel schneller. Die Zeit für eine Wandlung ist mit 65 bis 250 µSekunden angegeben. Das ist nicht so superschnell ( für ne GBCam reicht es nicht wenn man sie mit voller Geschwindigkeit auslesen will )...

MfG Kjion

xanatos
23.01.2005, 18:10
@Kjion:
12 bit wären schon nicht schlecht. dafür würde ich auch so einiges in den aufbau investieren, im endeffekt ist das auch egal da die meisten schnellen wandler eh 10bit+ wandeln.
ich will nicht viele werte speichern, eigentlich reicht ein messdurchlauf also 2 mal alle drei wandler auslesen, damit komm ich auf 12 Byte ich denke die sollten platz finden. oder?

Kjion
23.01.2005, 22:12
ich will nicht viele werte speichern, eigentlich reicht ein messdurchlauf also 2 mal alle drei wandler auslesen, damit komm ich auf 12 Byte ich denke die sollten platz finden. oder?

Doch doch, die sollten Platz finden ;-) Schwierig wirds erst wenn du 1000 Messwerte oder so speichern willst.
Was wird denn das für ein Gerät das du da bauen willst ??

MfG Kjion

xanatos
24.01.2005, 06:53
jo das gerät soll eigentlich nur messen, drei größen gleichzeitig in kurzer zeit. naja und die drei größen sind characteristisch für einen vierpol. naja und den berechnen wir dann aus diesen viergrößen. so zumindest die theorie. *g*
und wir schreiben eine seminarfacharbeit drüber.

engineer
24.01.2005, 11:02
Ändert sich denn der 4-Pol so rascht? Ich würde das mehrfach auslesen (3 x Dreiergruppe und dann einen Wert interpolieren). Damit lässt sich die Zeit eliminieren - eine gewisse Monotonie der Werteänderung vorrausgesetzt.

xanatos
24.01.2005, 12:48
das ding ist da wir davon ausgehen das der 4P nicht nur normale R's sondern komplexe enthält. heißt wir messen mit wechselspannung.... bis ca. 1kHz was die oben erwähnte geschwindigkeit nötig macht. aber ich habs mal durchgerechnet mit dem was ich denke was man an befehlen braucht bin ich eher für den ADC zu schnell *g*... gibts für die ATmega so ne art sleep oder wird das via timer bzw. schleife geregelt?

stegr
25.01.2005, 07:50
Wenn du ein Signal von 1kHz messen willst, musst du mit mindestens 2,001kHz abtasten. Das Abtasttheorm besagt, dass du die Bedingung fa>2*f erfüllen musst, wenn du mit dem Ergebnis was anfangen willst. Wenn man das Abtasttheorem nicht einhält, kommen so lustige Effekte zustande, dass man eine deutlich niederfrequente Schwebung auf dem Signal sieht. Das siehst du manchmal in Filmen, wenn ein fahrendes Auto gefilmt wird und sich die Reifen rückwärts drehen... da wurde dann zu niedrig abgetastet.

Les dir einfach mal die kleine Einführung auf Wikipedia durch, dann wird dir vieles klar werden...
Link (http://de.wikipedia.org/wiki/Abtasttheorem)

MfG
Stefan

xanatos
25.01.2005, 08:36
jo das shannonsche Abtasttheorem. THX aufjedenfall für den Tipp aber den teil der theorie haben wir schon durchgekaut *g*.
und es hat eine dicke rinde.
schon mal probiert das ganze mit 3 bzw. nur 2 messewerten zu machen?
a1=â*sin(w*t1+p)
a2=â*sin(w*t2+p)
...
das ist verdammt haarig.
vorallem weil nirgendwo steht wie es geht, nur dass es geht...

ich hatte mir das prog ungefähr so vorgestellt (kenn die genauen assembler befehle noch nicht, sry):

Clk -> 1
SHL WertLow1
WertLow1 AND Port1
SHL WertLow2
Wert2 AND Port2
SHL WertLow3
WertLow3 AND Port3
Clk ->0

das ganze dann 8x und dann noch 4x mit nem HighByte

dann der zweite durchgang des ganzen und schluss endlich die übergabe an den PC.

stegr
25.01.2005, 18:47
Du hast kein Problem, so lange du ein periodisches Signal (das ist ja die Vorraussetzung für das Theorem) unendlich lange abtastest.
Wenn du das nicht tust, musst du natürlich oversamplen, um ein sinnvolles Ergebnis zu erhalten... Daher hab ich dir ja auch den Wikipedia-Link reingeschrieben, weil ich meinte, dass ich das dann nicht schreiben muss (Faulheit)...

Zu deinem Code:
Du schiebst nach Links, das ist soweit ok, aber warum verUNDest du dann?
Ich denke du meinst da verODERn...

Was du noch machen musst, das sind Wartezyklen. Wenn du in Assembler programmierst, machst du das typischerweise über Schleifen mit einer Zählvariable, und in der Schleife die entsprechende Anzahl an NOPs, so dass die Zeit genau passt.

MfG
Stefan

xanatos
25.01.2005, 19:17
Ja stimmt muss "verODERn" sein.
was sind NOP's?

x-ryder
25.01.2005, 19:40
NOP issn assemblerausdruck und heißt übersetzt: "No Operation" d.h. das in diesem TAKTZYCLUS nicht ausgeführt wird, wird oft verwendet wenn man eine sehr sehr kleine wartezeit braucht

Martin