Der Alps Rotary Encoder wackelt manchmal auf der B-Leitung, auch in der "Detent stability position" (siehe Bild). An einem Quadratur-Decoder z.B. an einem STM32 wackelt der Zähler-Wert also manchmal zwischen "1 und 2" oder "2 und 3" usw., je nachdem wie das Signal beim Initialisieren war. Aber da ich das Signal "B" nicht "einfrieren" kann, kann ich beim Initialisieren keinen deterministischen Zustand herstellen, wo beim "shift right", also ">>=1" immer eine "nicht wackelne Zahl" heraus kommt. Bei "zwischen 2 und 3" gibt ein ">>=1" einen stabilen Wert, aber bei "zwischen 1 und 2" liefert ">>=1" mal 0 und mal 1. Klar, kann ich den Wert von B abfragen und den Decoder entsprechend initialisieren. Aber wenn sich "B" zwischen "abfragen" und "initialisieren" ändert, wackelt's nach ">>=1" trotzdem noch. Wie macht man das richtig?
Hallo, dann tausche A und B, wird A als Takt verwendet liegt in der Rastposition auch sicher ein stabiles Signal an. Sascha
Torsten C. schrieb: > Wie macht man das richtig? Wenn die Rastungen auf den Flanken von B liegen, liefert dir also A die stabilen Werte.
Entweder ich stehe auf dem Schlauch oder das Problem ist noch unklar: Der Quadratur-Decoder an einem STM32 liefert einen Zähler-Wert. Der Zähler zählt rauf und runter, je nach Drehrichtung. Wenn ich am Quadratur-Decoder (das ist Hardware!) die Eingänge tausche, habe ich manchmal trotzdem noch Wackeln im LSBit. Ich weiss also nie ob das linke oder das rechte Bild gilt.
Der STM Decoder kann Flanken auf beiden Signale oder nur einer Flanke auswerten. Schau die mal das Referenzmanual "Encoder interface mode" an. Z.b. bei F411 Seite 330 und Table 52.
Uwe Bonnes schrieb: > Der Decoder kann Flanken auf beiden Signalen oder nur einer Flanke > auswerten. Für einen Quadratur-Decoder ist das ja korrekt initialisiert, also mit beiden Signalen und beiden Flanken. Das Problem ist: Ich weiss nach der Initialisierung nicht, ob das linke oder das rechte Bild (s.o.) gilt, also 1 2 3 4 5 … oder 0 1 2 3 4 … Mit "TIM_GetCounter(TIM1) >> 1" möchte ich aber ein stabiles Signal haben und nicht mal einen mehr oder einen weniger.
Uwe Bonnes schrieb: > oder nur einer Flanke auswerten. Ach du meinst zählen, nicht auswerten. Trotzdem danke.
1 | TIM_EncoderInterfaceConfig(TIM1, TIM_EncoderMode_TI2, TIM_ICPolarity_Falling, TIM_ICPolarity_Rising); |
Damit geht´s. Also: Auswerten: Beide Flanken, Zählen: Nur eine Flanke. Ich wusste bis eben nicht, dass da noch ein Unterschied ist. :-)
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.

