Forum: Mikrocontroller und Digitale Elektronik Idee gesucht: Quadratur-Decoder immer richtig initialisieren


von Torsten C. (torsten_c) Benutzerseite


Angehängte Dateien:

Lesenswert?

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?

von Sascha W. (sascha-w)


Lesenswert?

Hallo,

dann tausche A und B, wird A als Takt verwendet liegt in der 
Rastposition auch sicher ein stabiles Signal an.

Sascha

von Mike A. (Gast)


Lesenswert?

Torsten C. schrieb:
> Wie macht man das richtig?

Wenn die Rastungen auf den Flanken von B liegen, liefert dir also A die 
stabilen Werte.

von Torsten C. (torsten_c) Benutzerseite


Angehängte Dateien:

Lesenswert?

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.

von Uwe Bonnes (Gast)


Lesenswert?

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.

von Torsten C. (torsten_c) Benutzerseite


Lesenswert?

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.

von Torsten C. (torsten_c) Benutzerseite


Lesenswert?

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
Noch kein Account? Hier anmelden.