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!
Naja, wenn Du mit 67 kHz Interrupts auslöst, dann darf in Deiner Interruptroutine nicht viel passieren, denn Du hast nur noch knapp 15 µsec Zeit zwischen zwei Interrupts.
@ 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.
Wenn die Drehrichtung bekannt ist, oder anderweitig ermittelt werden kann würde ich einen kanal des Encoders auf den Takteingang eines 16bit-Zählers legen und damit weiter arbeiten...
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...
Die Geber von Maxon Motors haben eigentlich alle einen Index-Ausgang, der liefert einen Impuls pro Umdrehung.
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
Einen DC-Motor kannst Du eh nicht genau positionieren. Und die Drehrichtung weißt Du ja durch die Polarität der Steuerspannung. Es reicht also völlig die Pulsanzahl zu zählen. 67kHz Interrupt ist beim AVR illusorisch, Du mußt also einen Timer zählen lassen.
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!
normalerweise ändert sich die drehrichtugn eiens motors nicht von + auf - in null zeit. bei geringen geschwindigkeiten nimmst du den encoder, ab XXX umdrehungen schaltest du um und nimmst nur noch den ref impuls. wenn die drehzahl wieder sinkt dann eben wieder encoder.
buell24 schrieb: > da die > Drehrichtung des Motors schnell ändert Sowas macht man ja auch nicht, den DC-Motor bei voller Drehzahl umpolen. Setze ihn erst auf 0V und pole dann um, wenn er steht.
@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!
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?
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.