Aus RN-Wissen.de
Wechseln zu: Navigation, Suche
Laderegler Test Tueftler Seite

(Programmtechnische Umsetzung)
(Drehgeber-Auswertung)
Zeile 1: Zeile 1:
 
=Drehgeber-Auswertung=
 
=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.  
+
Es gibt in RN-Wissen schon einige (sehr gute) Artikel über Drehgeber und Auswertungsvarianten. Denen will ich hier keine Konkurrenz machen.<br/>
 +
Technisches findet man hier:
 +
[[Sensorarten#Incremental-Geber]]<br/>
 +
und Grundsätzliches über das Quadratur-Signal:<br/>
 +
[[Beispiel_Drehzahlmessung_mit_Drehgeber#Richtung.2C_Geschwindigkeit_und_Position_mit_Doppellichtschranke_ermitteln]]<br/>
 +
Programmierungs-Beispiele für Drehencoder:
 +
[[Drehencoder]]<br/>
 +
Ich möchte dem einige grundsätzliche Überlegungen zur Drehgeber-Auswertung hinzufügen, damit es einem Einsteiger leichter fällt, eine Auswahl für seine konkreten Anforderungen zu treffen.  
  
 
==Signalfolge==
 
==Signalfolge==
Zeile 21: Zeile 28:
  
 
=== Auswertung der Übergänge===
 
=== Auswertung der Übergänge===
Die genaueste Auswertung ist möglich, wenn man alle Übergänge steigend/fallend von beiden Kanälen (A u. B) bewertet. Das kann man ebenfalls mit ISR's machen, wenn man den µC so konfigurieren kann, dass er beide Flankenarten auslöst. Da dafür aber nur ein ISR-Vektor zur Verfügung steht, muss man in der Routine sowohl Kanal A als auch B abfragen und auch, ob fallend oder steigend.
+
Die genaueste Auswertung ist möglich, wenn man alle Übergänge steigend/fallend von beiden Kanälen (A u. B) bewertet. Das kann man ebenfalls mit ISR's machen, wenn man den µC so konfigurieren kann, dass er beide Flankenarten auslöst. Da dafür aber nur ein ISR-Vektor zur Verfügung steht, muss man in der Routine sowohl Kanal A als auch B abfragen und auch, ob fallend oder steigend.<br/>
 
+
Am einfachsten merkt man sich immer den Zustand von A u. B und vergleicht mit dem neuen Abtastergebnis.<br/>
Am einfachsten merkt man sich immer den Zustand von A u. B und vergleicht mit dem neuen Abtastergebnis.  
+
Im Grunde ist das dann dasselbe, als wenn man ohne ISR periodisch die Eingänge abtastet, was natürlich oft genug geschehen muss, damit nichts verlorengeht. Die Flanken selbst erkennt man an dem Unterschien AB / AB-alt.<br/>
 
+
Im Grunde ist das dann dasselbe, als wenn man ohne ISR periodisch die Eingänge abtastet, was natürlich oft genug geschehen muss, damit nichts verlorengeht. Die Flanken selbst erkennt man an dem Unterschien AB / AB-alt.  
+
 
+
 
In beiden Fällen erfolgt dann die Auswertung an den strichlierten senkrechten Linien.     
 
In beiden Fällen erfolgt dann die Auswertung an den strichlierten senkrechten Linien.     
 
[[Bild:quad_states.png|center]]
 
[[Bild:quad_states.png|center]]
Zeile 43: Zeile 47:
 
* 10  vorher: 11
 
* 10  vorher: 11
 
* usw
 
* usw
 
 
===Programmtechnische Umsetzung===
 
===Programmtechnische Umsetzung===
 
Da gibt es Varianten, die hier sehr schön beschrieben sind:
 
Da gibt es Varianten, die hier sehr schön beschrieben sind:

Version vom 19. Juli 2011, 09:48 Uhr

Drehgeber-Auswertung

Es gibt in RN-Wissen schon einige (sehr gute) Artikel über Drehgeber und Auswertungsvarianten. Denen will ich hier keine Konkurrenz machen.
Technisches findet man hier: Sensorarten#Incremental-Geber
und Grundsätzliches über das Quadratur-Signal:
Beispiel_Drehzahlmessung_mit_Drehgeber#Richtung.2C_Geschwindigkeit_und_Position_mit_Doppellichtschranke_ermitteln
Programmierungs-Beispiele für Drehencoder: Drehencoder
Ich möchte dem einige grundsätzliche Überlegungen zur Drehgeber-Auswertung hinzufügen, damit es einem Einsteiger leichter fällt, eine Auswahl für seine konkreten Anforderungen zu treffen.

Signalfolge

Zur Erinnerung:

Quad 0.png

Auswertung der Flanken

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.

Quad isr1.png

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.

Quad isr2.png

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.

Quad err.png

Unsere Logik zählt nun einen Impuls zweimal, obwohl der drehgeber sich immer noch am selben Platz befindet.

Auswertung der Übergänge

Die genaueste Auswertung ist möglich, wenn man alle Übergänge steigend/fallend von beiden Kanälen (A u. B) bewertet. Das kann man ebenfalls mit ISR's machen, wenn man den µC so konfigurieren kann, dass er beide Flankenarten auslöst. Da dafür aber nur ein ISR-Vektor zur Verfügung steht, muss man in der Routine sowohl Kanal A als auch B abfragen und auch, ob fallend oder steigend.
Am einfachsten merkt man sich immer den Zustand von A u. B und vergleicht mit dem neuen Abtastergebnis.
Im Grunde ist das dann dasselbe, als wenn man ohne ISR periodisch die Eingänge abtastet, was natürlich oft genug geschehen muss, damit nichts verlorengeht. Die Flanken selbst erkennt man an dem Unterschien AB / AB-alt.
In beiden Fällen erfolgt dann die Auswertung an den strichlierten senkrechten Linien.

Quad states.png

Vorwärts

Von dem Mitte nach rechts gelesen bekommt also an den bezeichneten Stellen die Werte

  • 00 vorher: 01
  • 10 vorher: 00
  • 11 vorher: 10
  • 01 vorher: 11
  • usw

Rückwärts

Von dem Mitte nach links gelesen bekommt dann an den bezeichneten Stellen die Werte

  • 00 vorher: 10
  • 01 vorher: 00
  • 11 vorher: 01
  • 10 vorher: 11
  • usw

Programmtechnische Umsetzung

Da gibt es Varianten, die hier sehr schön beschrieben sind:

Drehencoder

Autoren

Siehe auch


LiFePO4 Speicher Test