Hallo oberallgeier,
ich weiß, es geht ein wenig an Deiner eigentlichen Frage vorbei ...
Dein Encoder gibt doch ganz offensichtlich ein normales Quadratursignal aus, warum wertest Du das nicht so aus, "wie man es normalerweise macht". Also Zustand der beiden Signalsbits zum Zeitpunkt t-1 merken, mit Zustand zum Zeitpunkt t0 vergleichen und daraus dann Schritt und Schrittrichtung bestimmen. Dann kommst Du auf die vollen 64 Schritte Auflösung.Die verkaufsfördernde Formulierung 64 CPR (count per revolution) hab ich notgedrungen geschluckt. Bei ner Drehrichtungserkennung sinds ja eher nur 32, eigentlich nur 16 : wenn ich das per Interrupt einlesen will nehme ich nämlich ne steigende Flanke an einem Kanal und schaue nach, welchen Pegel der andere Kanal hat. Nutze ich beide Flanken, muss ich in der ISR ne Fallunterscheidung für die Flankenform machen um die Drehrichtung zu erkennen ... und Zeit ist ISR-Pfiffigkeit. Und nutze ich alle Flanken - weil 64 CPR - dann sollte mir jemand garantieren, dass Spur A gegen Spur B um GENAU 1/4 Phase verschoben ist. Bei einer anderen Phasenverschiebung gäbe es nämlich mehr oder weniger leichte Regelungsunsauberkeiten.
Gruß
Malte
Geändert von malthy (14.01.2014 um 21:52 Uhr) Grund: typo entfernt
Danke Malte für den Hinweis. Warum ... nicht: ich hab den Code schnell hingeschrieben und trotz der Warnung bei mikrocontroller-net momentan an den externen Interrupt gehängt. Damit habe ich vorerst gute Ergebnisse bei der Sprungantwort. Das Beispiel bei mikrocontroller-net habe ich überflogen aber (noch) nicht verstanden *gg*. Kommt noch, ich bin meist lernfähig. Trotzdem habe ich erstmal das Gefühl, dass die volle Auflösung nicht darauf bauen kann, dass alle Flanken gleiche Abstände haben - - - das ist ja auch EIN Grund für einschrittige Codes. Wie genau/reproduzierbar der Sensor bzw. die einzelnen Teilstücke wirklich ist/sind, kann ich auch noch nicht sagen.... warum wertest Du das nicht so aus, "wie man es normalerweise macht" ...
Ein vorrangiges Thema war für mich die Unklarheit bei der Untersetzung.
Ciao sagt der JoeamBerg
Ich habe bisher nur mit magnetischen Encodern gearbeitet (die allerdings viel höhere Auflösungen haben) und für die ist es so wie Du sagst: das Quadratursignal ist z. T. erheblich asymmetrisch, also die Phasenverschiebung zwischen den Teilsignalen ist durchaus nicht konstant 90° sondern variiert. Aber Dein Argument (soweit ich Dich richtig verstanden habe) sehe ich trotzdem nicht ganz ein. Du verzichtest auf eine vierfach höhere Auflösung, weil Du bei dem (dann viermal kleineren!) Inkrement einen gewissen Fehler erwartest?
Das Problem bei der Auswertung mit PCINTs ist ja nur, dass das potentielle Prellen des Encoders den µC ausbremsen kann. Bei den o. g. magnetischen Encodern habe ich Prellen nie beobachtet, insofern hat die Auswertung über pin change interrupts auch immer gut funktioniert (aus Ehrfurcht vor den mc.net Profis mache ich es trotzdem meist über einen Timer Interrupt). Ich könnte mir vorstellen, dass insb. mechanische Encoder zum Prellen neigen, der an deinem Motor wird eher ein optischer sein, oder? Da würde man ja auch eine gewisse Signalnachbereitung erwarten, die zu eine Hysterese führt ... Just my two cents.
Gruß
Malte
P.S.: wie gesagt, ich weiß dass das nicht Dein vorrangiges Problem war, mir fiel es nur auf ...
Malthe, GENAU DAS ist ja das Gute hier im Forum, dass manchmal auch ein Beitrag kommt nach dem Motto "... mir fiel es nur auf".
Im Übrigen:
a) erstmal keine höhere Auflösung weil ich NACH Vorliegen der Sprungantworten
....die Dynamik des Systems besser kenne und erst danach
....die für mich optimale Auflösung wählen kann -
....- im Rahmen der Möglichkeiten.
b) siehe weiter unten (Antiprell..)
c) meine Bussole meint das es ein magnetischer Encoder ist
d) Prellen kenne ich in meinen Projekten praktisch garnicht,
....weder bei Tasten, auch nicht hier,
....habe trotzdem ne kleine Prell-Abwehr eingebaut, siehe unten und b)
Anyway, a lot of know how *gg*... Just my two cents ...
Mein Antiprelludin:
Code:ISR(INT0_vect) // INT0 triggert auf RISING edge => { // if (tmrE0 <= 2 ) return; // Bei zu kurzen Zeiten gleich return Iz_diff0 = tmrE0; // Abspeichern Zeit seit dem letzten ISR-Aufruf
Na ja, dem "Our manufacturer ... changed the specifications" ist ja kaum mehr zuzufügen als - Eingangskontrolle >on site< kann vor Problemen bewahren. Und wenn schon nicht Eingangskontrolle, dann zumindest ein gutes Arbeitsheft ...PHP-Code:
Von Derrill Hartley Mi, 15.Jan.2014 um 1:26
Re: What´s wrong with my pololu 29:1 Metal Gearmotor
Hello.
Thank you for your interest in our gearmotors. Our manufacturer for those motors changed the specifications without telling us about it. We are aware of the problem and are currently testing the motors and updating the website. We have also arranged with our supplier to inform us of any future changes.
For that motor we have confirmed that it is a 30:1 gear ratio as you figured out. We are sorry for any confusion this might have caused.
Please let me know if you have any additional questions.
Sincerely,
Derrill Hartley
(702) 262-6648
www.Pololu.com
..............................
Pololu Corporation
920 Pilot Rd.
Las Vegas, NV 89119
USA
- - - - - - - - - - - - - - - - - x - - - - - - - - - - - - - - -
What´s wrong with my pololu 29:1 Metal Gearmotor Di, 14.Jan.2014 um 15:20
... So, for my new project I bought two of your
29:1 Metal Gearmotor 37Dx52L mm with 64 CPR Encoder, item #: 1443
from your german associate EXP Tech Meerwiesertalweg 23 D-66123 Saarbrücken. The high torque, speed sensor etc - fits really good with my target specifications.
The question (and not really problem for me) is the reduction gear ratio from this part. You specify 29:1 - - but, please check it, maybe it´s different.
My test installation (after some trouble - because the measured speed did´nt suit with my calculations based of the 29:1-value, so neiter the closed loop system nor the odometry will run exactly) :
- white line (marker) on the encoder wheel
- line on the mounting hub (item #: 1083) on the gearbox output shaft
... and then softly turning the encoder wheel. After 30 (!!) revolutions of the encoder wheel the line on the mounting hub on the gearbox output shaft reaches the exact position then bevor. 30 revolutions - not 29!
Ciao sagt der JoeamBerg
Wir haben mal ein Präzisionsgetriebe 1:10 (um die Impulse eines Inkrementalgebers zu vervielfachen für eine Synchronregelung)
aus dem Lager gewechselt und anschließend lief die Maschine nicht mehr venünftig.
Nach dem Zerlegen und analysieren stellte sich heraus das ein Träumer beim Montieren ein falsches Zahnradpaar eingesetzt hat.
Das Getriebe hatte dann glaube ich eine Übersetzung von 1:9,85312 oder so ähnlich (lt. Typenschild aber 1:10).
Ein weiteres passte dann wieder.
....so ist das halt in der hoch technisierten modernen Welt............
mfG
Willi
Hmmm. 1,5% Fehler bei der Übersetzung!? Mit einem falschen Zahnradpaar - das müsste auch den richtigen, passenden Achsabstand gehabt haben . . . hmmmmm.... Präzisionsgetriebe 1:10 ... ein falsches Zahnradpaar eingesetzt ... 1:9,85312 ...
Ciao sagt der JoeamBerg
Lesezeichen