Hallo zusammen, kann mich einer aufklären was es mit den drei verschiedenen Auswerteroutinen 1 step encoder, 2 step encoder und 4 step encoder auf sich hat, siehe Link? https://www.mikrocontroller.net/articles/Drehgeber Ich komme nicht dahinter was es hier für Unterschiede gibt? Mehr als simplen gray code von encodern mit A und B Signal kann ich nicht finden!
Manuel M. schrieb: > Ich komme nicht dahinter was es hier für Unterschiede gibt? Eine 1 Step Encoder Routine zählt bei gleichmäßigem während einer Periode des AB-Signals um vier weiter, ein 2 Step Encoder Routine um zwei und eine 4 Step Endoder Routine um eins.
Wolfgang schrieb: > Eine 1 Step Encoder Routine zählt bei gleichmäßigem während einer > Periode des AB-Signals um vier weiter, ein 2 Step Encoder Routine um > zwei und eine 4 Step Endoder Routine um eins. Völlig richtig. Man kann auch sagen, 1-Step reagiert auf jede vom Encoder gelieferte Flanke, 2 Step nur auf fallende Flanken und 4 Step nur auf komplette A-B Phasendurchgänge.
Manuel M. schrieb: > Ich komme nicht dahinter was es hier für Unterschiede gibt? Die Unterschiede liegen bei den Encodern. Bei einem Encodern auf einer Motorwelle will man normalerweise die best mögliche Winkelauflösung und die bekommt man natürlich indem man jede Flanke zählt. Das ist dann wohl 1step. Bei den Drehgeber die man mit der Hand dreht und die Rastpunkte haben, macht es keinen Sinn eine größere Auflösung zu haben, als die der Rastpunkte. Jetzt gibt es von diesen welche, die den Zustand zwischen den Rastpunkte umschalten. Die haben dann zwei Flanken oder eine pro Spur. -> 2 step. Dann gibt es auch welche, die zwischen den Rasten einen kurzen Impuls ausgeben. Das sind dann zwei Flanken pro Spur, also 4 insgesamt. -> 4 step
Manuel M. schrieb: > Ich komme nicht dahinter was es hier für Unterschiede gibt? Mehr als.. Also da wurde ja schon das Wesentliche gesagt. Was vielleicht die Sache etwas verwirrend macht, ist die Tatsache, dass der ominöse (nennen wir ihn Encodermode) nicht im Datenblatt steht. Da werden üblicherweise diesbezüglich 2 Kenngrößen angegeben: 1. Number of detent - Das sind die Anzahl der Raststellen pro Umdrehung 2. Number of pulses - Das ist die Anzahl der kompletten Graycode-Perioden pro Umdrehung (häufig auch resolution genannt). Innerhalb einer Graycode-Periode kann man 4 stati unterscheiden und somit zählen. Man kann somit auch sagen, ein pulse hat 4 counts (kein offizieller Encodertermini) Beispiel der ALPS EC11J0920404 hat 18 Number of detent und *9 Number of pulses* Will man nun eigentlich die Rasten statt der stati(counts) zählen, muss man wissen, wieviel counts denn innerhalb 2er Rasten anfallen. Und da ist klar, Wenn Number of detent = Number of pulses hab ich also eine komplette Periode also 4 counts innerhalb von 2 Rasten. Wenn Number of detent = 2 x Number of pulses kann ich also nur 2 counts zwischen 2 Rasten auswerten. Oder ganz allgemein:
Ok, was nützt das nun, einen Encodermode einzuführen? - man kann den Encodertyp unmittelbar vom Datenblatt ablesen - man kann die Ausleseroutine so formulieren, dass durch Angabe der Datenblatt-Kenngrößen detent/pulses sichergestellt ist, dass immer in Rasten gezählt wird. Ädert sich der Encodertyp, sind nur 2 #defines anzupassen, die dazu noch im Datenblatt stehen. Dazu muss z.B. die beliebte Ausleseroutine von Peter Dannegger nur geringfügig modifiziert werden:
1 | //(Codeauszug) |
2 | |
3 | #define NUMBER_OF_DETENT 18 //ALPS EC11 s.o. |
4 | #define NUMBER_OF_PULSES 9 // s.o |
5 | #define ENCODER_MODE (4 * NUMBER_OF_PULSES / NUMBER_OF_DETENT) |
6 | |
7 | //... |
8 | if (0 == slast % (1 << encoderMode){ // only the right state 0,1,2->1,2,4
|
9 | counterValue += (s & 2) - 1; |
10 | } |
11 | |
12 | //... |
Reiner
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.