Forum: Mikrocontroller und Digitale Elektronik Datenauswertung Inkrementalgeber


von testuser (Gast)


Lesenswert?

Hallo,
folgendes Problem:

Ich habe einen Inkrementalgeber, der über ein Arduino Board mit einem 
ATMEL ATMEGA328 Impulse für eine Bewegung hoch bzw. runter zählt. Dabei 
sollen Hin- und Her- Bewegungen über die Zeit als Messdaten 
aufgezeichnet werden.
Als Zeitstempel wird der interne Wert des zur Zeit laufenden Prozessors 
verwendet.

Die Echtzeitausgabe der Werte über die serielle Schnittstelle ist 
anscheinend zu langsam, sodass die Abtastung nicht mehr schnell genug 
läuft und Signale verloren gehen.

Nun wäre es hilfreich, zum Beispiel 1000 Schritte in ein Array 
aufzunehmen, also in einer Art Aufzeichnungsphase, der Geber wird dabei 
bewegt, anschließend wäre die Aufzeichnungsphase vorbei und das Array 
wird dann über die seriellle Schnittstelle ausgegeben. Diese Lösung 
funktioniert bereits, allerdings begrenzt der Speicher des Mega328 das 
ganze erheblich, sodass nur 400 Werte gespeichert werden können 
innerhalb eines Arrays.
Hat jemand eine Idee, das ganze irgendwie anders zu machen, also die 
Werte irgendwie zu speichern oder ausgeben zu können, ohne die 
eigentliche Abtastung des SIgnals dabei zu stören?

Bin für jeden Tipp dankbar!

von Frank F. (Gast)


Lesenswert?

So richtig schlau werde ich aus Deinen Angaben nicht.

Möchtest Du jeden Impuls mit einem Zeitstempel versehen oder möchtest Du 
die jeweilige Position z.B. einmal pro Millisekunde ermitteln?

von testuser (Gast)


Lesenswert?

Habe mich präzise genug formuliert. Also an einem Rad wird per Hand 
gedreht, und zu jedem daraufhin erzeugten Impuls soll eine Zeit mit 
gepsiechert werden.
Beispiel:
Ich drehe 5 Schritte nach vorne, Zähler zählt 5 Schritte nach vorne, und 
speichert zu jedem Wert die jeweilge aktuelle Zeit. Diese entnehme ich 
einfach aus der Laufzeit des Mikrocontrollers seit Programmstart (dafür 
ausreichend). Es geht darum, die Daten anschließend als Kurve Schritte 
über der Zeit aufzutragen.

von testuser (Gast)


Lesenswert?

Ich meinte natürlich "Habe NICHT präzise genug formuliert" Sry ;)

von Frank F. (Gast)


Lesenswert?

Wenn Du mit der Standard-Baudrate 115,200 kBaud sendest, dann kannst Du 
ca. alle 0,1 Millisekunden ein Ereignis übertragen. Das sollte bei einer 
Handverstellung ausreichen.

von Falk B. (falk)


Lesenswert?

@  testuser (Gast)

>Die Echtzeitausgabe der Werte über die serielle Schnittstelle ist
>anscheinend zu langsam, sodass die Abtastung nicht mehr schnell genug
>läuft und Signale verloren gehen.

Kann passieren.

>Hat jemand eine Idee, das ganze irgendwie anders zu machen, also die
>Werte irgendwie zu speichern oder ausgeben zu können, ohne die
>eigentliche Abtastung des SIgnals dabei zu stören?

Mit einem FIFO, der muss nur kurze Burst von Daten puffern. 
Sinnvollerweise puffert man nur die kurzen Zeitstempel + 
Richtungsinformation, den String für den UART baut man hinter dem FIFO 
zusammen, das spart massiv Speicher.

MfG
Falk

von testuser (Gast)


Lesenswert?

Vielen Dank für eure Antworten.

Ich habe jetzt für die genaue Abtastung einen Timer - Interrupt 
verwendet und außerdem die Übertragung bei der Ausgabe auf 115,200 kBaud 
gestellt (habe es die ganze Zeit auf 9600 kBaud betrieben, einfach nicht 
daran gedacht) Danke hier an Frank F.

So scheint das ganze nun gut zu laufen, sodass ich mir den FIFO sparen 
kann. Aber danke für die Info darüber Falk.

Super wie schnell man hier Antworten erhält. Danke nochmal.

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.