(→Auswertung mit ISR) |
|||
Zeile 6: | Zeile 6: | ||
[[Bild:quad_0.png|center]] | [[Bild:quad_0.png|center]] | ||
===Auswertung mit ISR=== | ===Auswertung mit ISR=== | ||
+ | Gerade bei den AVR's bietet es sich an, das A-Signal an einen "Externen Interrupt" anzuschliessen. | ||
+ | Da man meist auch zwei Drehgeber hat (für links u. rechts), kommt man da wunderbar mit INT0 u. INT1 aus. | ||
====Vorwärts==== | ====Vorwärts==== | ||
+ | Bei einer Konfiguration "steigende Flanke" wird bei den dicken Pfeilen der Interrupt ausgelöst. Liest man in der ISR den B-Kanal, kann man daraus direkt die Richtung entnehmen (im Beispiel ist das ebenfalls "1") und auf den Schrittzähler 1 addieren. | ||
[[Bild:quad_isr1.png|center]] | [[Bild:quad_isr1.png|center]] | ||
====Richtungsumkehr==== | ====Richtungsumkehr==== | ||
+ | Wird nun die Drehrichtung geändert, wird die bis dahin fallende Flanke von A zur steigenden Flanke, und B ist zu diesem Zeitpunkt dann "0". Die Sache ist eindeutig, man kann nun von Schrittzähler eins abziehen. | ||
[[Bild:quad_isr2.png|center]] | [[Bild:quad_isr2.png|center]] | ||
+ | Dabei tritt aber natürlich eine Verschiebung auf. Wenn die Impulsfolge im Verhältnis zum zurückgelegten Weg gross ist, kann man das ignorieren, es geht ja letztlich meistens nur um ein paar Millimeter, und wo genau sich ein Drehgeber zwischen zwei Impulsen befindet, kann man ohnehin nie sagen. | ||
====Möglicher Fehler==== | ====Möglicher Fehler==== | ||
+ | Es gibt aber auch Situationen, wo es zu Fehlern kommt. Hier wird der zweite Interrupt noch ausgelöst und (richtig) als Schritt vorwärts gezählt. Dann bewegt sich der Geber etwas zurück, kommt aber nicht bis zu nächsten steigenden Flanke, sondern bewegt sich wieder nach vorne. | ||
[[Bild:quad_err.png|center]] | [[Bild:quad_err.png|center]] | ||
+ | Unsere Logik zählt nun einen Impuls zweimal, obwohl der drehgeber sich immer noch am selben Platz befindet. | ||
+ | |||
=== Auswertung der Übergänge=== | === Auswertung der Übergänge=== | ||
[[Bild:quad_states.png|center]] | [[Bild:quad_states.png|center]] |
Version vom 18. Juli 2011, 14:23 Uhr
Inhaltsverzeichnis
Drehgeber-Auswertung
Es gibt in RN-Wissen schon einige (sehr gute) Artikel über Drehgeber und Auswertungsvarianten. Denen will ich hier keine Konkurrenz machen. Ich möchte nur einige grundsätzliche Überlegungen zur Drehgeber-Auswertung anstellen, damit es einem Einsteiger leichter fällt, eine Auswahl für seine konkreten Anforderungen zu treffen.
Signalfolge
Zur Erinnerung:
Auswertung mit ISR
Gerade bei den AVR's bietet es sich an, das A-Signal an einen "Externen Interrupt" anzuschliessen. Da man meist auch zwei Drehgeber hat (für links u. rechts), kommt man da wunderbar mit INT0 u. INT1 aus.
Vorwärts
Bei einer Konfiguration "steigende Flanke" wird bei den dicken Pfeilen der Interrupt ausgelöst. Liest man in der ISR den B-Kanal, kann man daraus direkt die Richtung entnehmen (im Beispiel ist das ebenfalls "1") und auf den Schrittzähler 1 addieren.
Richtungsumkehr
Wird nun die Drehrichtung geändert, wird die bis dahin fallende Flanke von A zur steigenden Flanke, und B ist zu diesem Zeitpunkt dann "0". Die Sache ist eindeutig, man kann nun von Schrittzähler eins abziehen.
Dabei tritt aber natürlich eine Verschiebung auf. Wenn die Impulsfolge im Verhältnis zum zurückgelegten Weg gross ist, kann man das ignorieren, es geht ja letztlich meistens nur um ein paar Millimeter, und wo genau sich ein Drehgeber zwischen zwei Impulsen befindet, kann man ohnehin nie sagen.
Möglicher Fehler
Es gibt aber auch Situationen, wo es zu Fehlern kommt. Hier wird der zweite Interrupt noch ausgelöst und (richtig) als Schritt vorwärts gezählt. Dann bewegt sich der Geber etwas zurück, kommt aber nicht bis zu nächsten steigenden Flanke, sondern bewegt sich wieder nach vorne.
Unsere Logik zählt nun einen Impuls zweimal, obwohl der drehgeber sich immer noch am selben Platz befindet.
Auswertung der Übergänge
ÜbergangsTabelle
A-B | 00 | 00 | 10 | 10 | 11 | 11 | 01 | 01 |
Vorher | 01 | 10 | 00 | 11 | 10 | 01 | 11 | 00 |
Richtung | vorwärts | rückwarts | vorwärts | rückwarts | vorwärts | rückwarts | vorwärts | rückwarts |