Schnelles auslesen von Encoder Daten

Gast #3070384
Lesenswert?

Liebe Gemeinde

Wie es der Titel bereits beschreibt, suche ich nach einer Möglichkeit, 
Encoderdaten auszuwerten. Ich würde gerne mit einem Arduino Due 
gekoppelt mit zwei Motor-Shields, zwei Maxon DC-Motoren regeln. Geregelt 
wird die Geschwindigkeit, Messgrösse sind die Encoderimpulse. Nun habe 
ich die A und B Leitungen der Encoder auf Interrupteingänge des Arduinos 
gelegt. Im unteren Drehzahlbereich funktioniert die Regelung sehr gut, 
sobald ich die Drehzahl jedoch erhöhe ist der Arduino zu langsam und 
verpasst Impulse der Encoder. Die Encoder liefern 500 Impulse pro 
Umdrehung, dies entspricht bei einer Drehzahl von 8'000 min^-1: 67'000 
Impulse/s.

Vielen Dank für eure Hilfe!
#3070498
Lesenswert?

@  buell24 (Gast)

>ich die A und B Leitungen der Encoder auf Interrupteingänge des Arduinos
>gelegt.

Macht man so nicht. Deutlich besser ist eine Abtastung in einem 
regelmässigen zeitintervall, siehe Drehgeber.

> Im unteren Drehzahlbereich funktioniert die Regelung sehr gut,
>sobald ich die Drehzahl jedoch erhöhe ist der Arduino zu langsam und
>verpasst Impulse der Encoder. Die Encoder liefern 500 Impulse pro
>Umdrehung, dies entspricht bei einer Drehzahl von 8'000 min^-1: 67'000
>Impulse/s.

Für eine Drehzahlregleung bei 8000 U/min nimmt man keinen Encoder, 
sondern einen einfachen Geber, der EINEN Impuls / U liefert. Wenn du den 
nicht hast, solltest du einen der beiden Kanäle A oder B an einen 
Timereingang legen und mittel Timer die Frequenz teilen. Dann bekommt 
man auch eine vernünftige Signalrate, die dein AVR verarbeiten kann.
Gast #3070514
Lesenswert?

buell24 schrieb:
> Die Encoder liefern 500 Impulse pro
> Umdrehung, dies entspricht bei einer Drehzahl von 8'000 min^-1: 67'000
> Impulse/s.

Ich gaube da machst du einen fehler. Ich denke mal dein Encoder hat 
500Striche und erzeugt daraus an jeder der Leitungen A und B 500 Pulse, 
in summe also 1000. Und da jeder Puls 2 Flanken hat, die Pulse 90° 
Phasenverschoben sind und du vermutlich die Flanken auswertest, hast du 
in summe 4000 Flanken zum Auswerten die jeweils einen Interrupt 
generieren. Damit hast du dann 8000*4000/60 = 533 kHz...
Gast #3070552
Lesenswert?

Hallo,

man könnte mit Logik up/down signale generieren. Diese gibt man auf 
Counter Eingänge der CPU.

Ich habe mal eine Logik in einem Xilinx pld implementiert. Die 
Zählerstände wurden dann über SPI ausgelesen. Mit 2 16Bit Zählwerken 
passte alles in ein XC36 144

Grüße
Gast #3070667
Lesenswert?

Beim Encoder handelt es sich um folgenden Maxon-Encoder:
http://www.maxonmotor.ch/medias/sys_master/8801130971166/12_278_279_280_de.pdf

Typ: 110514
Impulszahl pro Umdrehung: 500
Max. Impulsfrequenz: 100 kHz
Anzahl Kanäle: 3

Die Index-Impulse zu zählen, kommt für mich nicht in Frage, da die 
Drehrichtung des Motors schnell ändert und ich diese ebemfalls 
messtechnisch erfassen muss. Gibt es nicht eine Art Vorsteuerung über 
ein MC-Board, welche ich dann seriell oder über i2c den Arduino 
anschliessen könnte? Oder wie würded Ihr das machen?

Vielen Dank für eure Hilfe!
#3070710
Lesenswert?

@buell24 (Gast)

>Die Index-Impulse zu zählen, kommt für mich nicht in Frage, da die
>Drehrichtung des Motors schnell ändert und ich diese ebemfalls
>messtechnisch erfassen muss.

Bitte? DU steuerst den Motor, damit weißt du immer, in welche Richtung 
er dreht!
Gast #3070716
Lesenswert?

Zur Erklährung der Anwendung muss ich vielleicht noch erklähren, dass es 
sich um ein inverses Pendel auf Rädern handelt. Darum wird zur Regelung 
die Drehrichtung schnell geändern.

Im Datenblatt von Maxon steht, man solle einer der folgendet IC's 
verwenden:
- MC 3486
- SN 75175
- AM 26 LS 32

Kennt sich jemand damit aus? Lassen sie diese einfach an den Arduino 
anbinden?
#3070829
Lesenswert?

dein rotzemotor kann nur wenige 1000rad/sec² beschleunigung=> genügend 
zeit sich in der Umkehrphase vom refpuls wieder auf encoder Modus zu 
synchronisieren.

deine ICs sind unpassend. die sind nur signalaufbereitung, nehmen dir 
das zählen aber auch nicht ab.

wenn du schon mit dem hammer auf dein problem losgehen willst dann such 
dir einen spi decoder.

http://www.lsicsi.com/pdfs/Data_Sheets/LS7366R.pdf

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren