Forum: Mikrocontroller und Digitale Elektronik Drehencoder: Probleme mit STEC12E08 und Artikel verstehen


von Julian L. (Gast)


Lesenswert?

Hallo,

Ich habe ein Problem damit, meinen STEC12E08 Drehencoder auszuwerten. 
Ich habe ein ESP32 Board und Programmiere mit der Arduino IDE.

Ich habe schon einige Libraries ausprobiert, jedoch scheint keine 
richtig zu funktionieren. Die bisher am Vielversprechenste ist diese 
hier: https://github.com/igorantolic/ai-esp32-rotary-encoder
Jedoch wird bei mir immer nur zwischen zwei Werten gependelt, wenn ich 
das Beispielprogramm der Library auf das ESP32 lade.

Ich habe auch einen Blick in diesen Artikel zu Drehencodern geworfen: 
https://www.mikrocontroller.net/articles/Drehgeber
Hierbei ist mir nicht ganz klar wie beim letzten C-Code Beispiel die 
Tabelle zustande kommt.

Mit einem Blick in den Code der oben angegebenen Library habe ich 
festgestellt, dass auch diese mit einer Tabelle arbeitet. Der Versuch, 
die Tabelle nach dem Artikel umzuändern schlug jedoch fehl, auch nachdem 
ich alle 1 und -1 vertauschte.

Außerdem habe ich auch bereits (erfolglos) versucht, die Pins A und B 
beim initialisieren des Encoders zu vertauschen.

Wie könnte ich mein Problem lösen?

Mfg

von c-hater (Gast)


Lesenswert?

Julian L. schrieb:

> Ich habe ein Problem damit, meinen STEC12E08 Drehencoder auszuwerten.
> Ich habe ein ESP32 Board und Programmiere mit der Arduino IDE.

Alles klar. Hauptsache nicht selber denken müssen. Der Arduino-Schrott 
verspricht dir das, kann dieses Versprechen aber nicht wirklich halten.

Ist im Prinzip genau so, wie den Senioren versprochen wird, dass sie auf 
Kaffee-Fahrten nur gewinnen können...

> Wie könnte ich mein Problem lösen?

Lerne DENKEN, ersetze den Encoder. Oder passe zumindest die 
Konfiguration der Lib an die tatsächlichen Fähigkeiten des Encoders an. 
Beides führt letztlich zum Ziel.

Der Kernpunkt ist: SELBER DENKEN rules. Auch wenn immer wieder mal wer 
verspricht, dass es auch ohne dies geht. Immer genau dann sollte man 
sogar besonders vorsichtig werden... Erwachsenen, die noch nicht an 
Demenz leiden, sollte man sowas eigentlich auch nicht extra erklären 
müssen...

von Falk B. (falk)


Lesenswert?

Julian L. schrieb:

> Ich habe ein Problem damit, meinen STEC12E08 Drehencoder auszuwerten.
> Ich habe ein ESP32 Board und Programmiere mit der Arduino IDE.

Wie hast du ihn GENAU angeschlossen? Hast du externe oder interne 
Puul-Up widerstände drin?

> Jedoch wird bei mir immer nur zwischen zwei Werten gependelt, wenn ich
> das Beispielprogramm der Library auf das ESP32 lade.

Das könnte ein Fehler beim Anschluß sein. Entweder fehlende Pull-Up 
Widerstände oder du hast Masse (COM) mit einem der Kanäle A oder B 
vertauscht, dann gibt es so einen Effekt.

> Hierbei ist mir nicht ganz klar wie beim letzten C-Code Beispiel die
> Tabelle zustande kommt.

Durch die Auswertung der Codefolge beim Gray-Code.

> festgestellt, dass auch diese mit einer Tabelle arbeitet. Der Versuch,
> die Tabelle nach dem Artikel umzuändern schlug jedoch fehl, auch nachdem
> ich alle 1 und -1 vertauschte.

Ist Unsinn. Der Code funktioniert, der Fehler liegt in deinem Aufbau.

> Außerdem habe ich auch bereits (erfolglos) versucht, die Pins A und B
> beim initialisieren des Encoders zu vertauschen.
>
> Wie könnte ich mein Problem lösen?

Mit einer systematischen Fehlersuche. Gib mal den Zustand deiner 
beiden Eingänge auf zwei andere Ausgänge mit LEDs aus. Halte den Encoder 
mit den Fingern sehr fest und drehe langsam. Dann musst du das bekannte 
Muster auf den LEDs sehen, das jeder Cray-Code macht.

https://www.mikrocontroller.net/articles/Drehgeber#Funktion

Sprich

A geht auf HIGH
B geht auf HIGH
A geht auf LOW
B geht auf LOW

Und wieder von vorn. Oder das Ganze rückwärts. Wenn das nicht so ist, 
stimmt was mit der Verdrahtung nicht.

von Wolfgang (Gast)


Lesenswert?

Julian L. schrieb:
> Ich habe schon einige Libraries ausprobiert, jedoch scheint keine
> richtig zu funktionieren.

Trial & Error
Dir ist schon klar, dass die Rastung von dem Teil unspezifisch nahe bei 
den Flanken des B-Kanals liegt? Der Algorithmus muss dazu passen.

von Julian L. (Gast)


Lesenswert?

Falk B. schrieb:
> Wie hast du ihn GENAU angeschlossen? Hast du externe oder interne
> Pull-Up widerstände drin?

Ich habe externe Pull-Up Widerstände verwendet. Außerdem habe ich wie 
empfohlen noch einen Kondensator eingebaut um beim Entprellen zu helfen.

Falk B. schrieb:
> Das könnte ein Fehler beim Anschluß sein. Entweder fehlende Pull-Up
> Widerstände oder du hast Masse (COM) mit einem der Kanäle A oder B
> vertauscht, dann gibt es so einen Effekt.

Die Verdrahtung habe ich schon überprüft, daran scheint es nicht zu 
liegen.

Falk B. schrieb:
> Durch die Auswertung der Codefolge beim Gray-Code.

Ah, okay. Danke.

Falk B. schrieb:
> Ist Unsinn. Der Code funktioniert, der Fehler liegt in deinem Aufbau.

Hatte ich mir gedacht, wollte es dennoch nicht unprobiert lassen.

Falk B. schrieb:
> Gib mal den Zustand deiner
> beiden Eingänge auf zwei andere Ausgänge mit LEDs aus. Halte den Encoder
> mit den Fingern sehr fest und drehe langsam.

Ich schaue mal, ob ich kurz zwei LEDs auftreiben kann.

Danke für die Hilfe!

von Julian L. (Gast)


Lesenswert?

Falk B. schrieb:
> Gib mal den Zustand deiner
> beiden Eingänge auf zwei andere Ausgänge mit LEDs aus. Halte den Encoder
> mit den Fingern sehr fest und drehe langsam. Dann musst du das bekannte
> Muster auf den LEDs sehen, das jeder Cray-Code macht.

Ich habe mal zwei LEDs direkt angeschlossen und ein sehr unerwartetes 
Muster bekommen:

A HIGH; B LOW
Halfstep
A LOW; B LOW
Halfstep
A HIGH; B LOW
Halfstep
A LOW; B LOW

Muss wohl doch die Verdrahtung nochmal SEHR GENAU unter die Lupe nehmen.

von Johnny B. (johnnyb)


Lesenswert?

Julian L. schrieb:
> Falk B. schrieb:
>> Wie hast du ihn GENAU angeschlossen? Hast du externe oder interne
>> Pull-Up widerstände drin?
>
> Ich habe externe Pull-Up Widerstände verwendet. Außerdem habe ich wie
> empfohlen noch einen Kondensator eingebaut um beim Entprellen zu helfen.

Wenn Du die Signale A und B regelmässig pollst so im Bereich 1...2ms und 
in einer kleinen State-Maschine die Signale auswertest, dann braucht es 
keine Entprellung in Hardware und funktioniert einwandfrei.
Eine Library kannst Du Dir sparen, da wir hier von einem Code in der 
Grössenordnung von ca. 5...10 Zeilen reden.

von Falk B. (falk)


Lesenswert?

Julian L. schrieb:
> Falk B. schrieb:
>> Wie hast du ihn GENAU angeschlossen? Hast du externe oder interne
>> Pull-Up widerstände drin?
>
> Ich habe externe Pull-Up Widerstände verwendet. Außerdem habe ich wie
> empfohlen noch einen Kondensator eingebaut um beim Entprellen zu helfen.

FALSCH! Denn damit schließen deine Kontakte im Drehgeber immer die voll 
geladenen Kondensatoren kurz, das erzeugt sinnlosen Verschleiß. Wenn 
schon Entprellen, dann richtig! Da muß ein Längswiderstand rein, so wie 
hier.

https://www.mikrocontroller.net/articles/Entprellung#Einfacher_Taster

Das ist aber bei einem Drehgeber meistens nicht nötig, der Gray-Dekoder 
macht das automatisch. Nur in ganz schweren Fällen ist das nötig, dann 
ist aber meist der Drehgeber Schrott.

von Julian L. (Gast)


Lesenswert?

Falk B. schrieb:
> Da muß ein Längswiderstand rein, so wie
> hier.

Genau so habe ich das auch angeschlossen, tut mir Leid wenn ich mich 
ungenau ausgedrückt habe.

Ich habe auch nochmal die Verdrahtung unter die Lupe genommen, und es 
scheint hier keine Probleme zu geben.

Falk B. schrieb:
> Das ist aber bei einem Drehgeber meistens nicht nötig, der Gray-Dekoder
> macht das automatisch. Nur in ganz schweren Fällen ist das nötig, dann
> ist aber meist der Drehgeber Schrott.

Also sollte ich es mal ohne Kondensator probieren? Im Datenblatt des 
Drehgebers sind Kondensatoren empfohlen, daher hatte ich sie mit dran 
gemacht.

von Falk B. (falk)


Lesenswert?

Julian L. schrieb:
> Ich habe auch nochmal die Verdrahtung unter die Lupe genommen, und es
> scheint hier keine Probleme zu geben.

Aber deine Codefolge stimmt nicht.

> Also sollte ich es mal ohne Kondensator probieren?

Nein, das ist schon OK. Wie groß sind denn deine Kondensatoren?
Möglicherweise ist dein Drehgeber kaputt.

von Julian L. (Gast)


Lesenswert?

Falk B. schrieb:
> Wie groß sind denn deine Kondensatoren?

0.01µF

Falk B. schrieb:
> Möglicherweise ist dein Drehgeber kaputt.

Wäre nicht das erste Mal, dass ich kaputte Bauteile bekommen habe

Falk B. schrieb:
> Aber deine Codefolge stimmt nicht.

Du meinst die Beobachtete oder die ich im tatsächlichen Code stehen 
habe?
So oder so muss ich dir zustimmen. Die im Code werde ich aber noch 
beheben bevor ich den wieder nutze.

von Falk B. (falk)


Lesenswert?

Julian L. schrieb:
> Falk B. schrieb:
>> Wie groß sind denn deine Kondensatoren?
>
> 0.01µF

Aka 10nF, ist OK, wenn gleich sehr klein.

>> Möglicherweise ist dein Drehgeber kaputt.
>
> Wäre nicht das erste Mal, dass ich kaputte Bauteile bekommen habe

In welchem Ramschladen kaufst du denn?

> Du meinst die Beobachtete

Diese.

>oder die ich im tatsächlichen Code stehen
> habe?

Woher soll ich das wissen, ich kenne die ja nicht.

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.