Hallo, ich beschäftige mich gerade mit Drehgebern und deren Auswertung mit einem µC. Ich bin allerdings gerade etwas verwirrt denn in verschiedenen Quellen (u. a. http://dse-faq.elektronik-kompendium.de/dse-faq.htm) las ich, daß ein solcher Drehgeber 4 Zustände annehmen kann, nämlich: 0: ab (Spur A LOW, Spur B LOW) 1: Ab (Spur A HIGH, Spur B LOW) 2: aB (Spur A LOW, Spur B HIGH) 3: AB (Spur A HIGH, Spur B HIGH) (Quelle: Link oben) Soweit gut, nur wenn ich mir mein hier liegendes Exemplar anschaue und durchmesse, dann nimmt der genau zwei Zustände an: 0: ab 1: AB Hab ich ein defektes Teil erwischt oder gibt es auch solche Typen? Wie kann ich jetzt die Drehrichtung ermittel, offenbar nur so, indem ich mir anschaue, welche Spur zuerst in den anderen Zustand wechselt. Ich sehe jetzt nur das Problem, daß beide Kontakte wohl prellen werden und der Wechsel der beiden Spuren erfolgt zeitlich sehr kurz hintereinander. Gibt es da einen sinnvollen Weg der sicheren Auswertung? Das Programm in der Codesammlung habe ich schon gesehen, ich möchte es allerdings zuerst gerne selbst probieren. Vielen Dank. Gruß Jens
hallo! die Zustände Ab sowie aB treten beim übergang von AB auf ab bzw ab auf AB auf. sie sind also zwischenzustände die man auswerten muss um die drehrichtung herauszubekommen. hias
Hi... Schau dir mal in diesem Beitrag http://www.mikrocontroller.net/forum/read-4-37992.html#87902 die Beschreibung des Algorithmus an. Ich habe mal versucht, das in ASM umzusetzen (Anhang), habe es aber noch nicht mit Hardware getestet. Es kann also noch buggy sein. ...
ups was vergessen: deiner is also ned kaputt. auswerten kannst du die Drehrichtung in dem du den sog Grey_Code auswertest. ich hab das so gemacht, dass ich alle ms den zustand der beiden pins abfrage. Wenn sich dabei was ändert. schau ich in einer .db Tabelle nach, wie sich der zähler verändert. Diese Tabelle hab ich nich mehr im Kopf. Is aber ganz einfach wenn du dir das hier anschaust. http://www.elektrik-trick.de/sminterf/sminterf.htm (erste zeichnung) Hias
Bei den Drehgebern die alle 2 Änderungen eine Rastung haben braucht man eigentlich nur einen der Kanäle "beobachten". Z. B. überwacht man nur Kanal A auf Pegeländerung. Ändert sich Kanal A von low auf high oder von high auf low prüft man den Zustand von Kanal B. Ist B = A wurde nach links gedreht. Ist B <> A wurde nach rechts gedreht. Bei einer Linksdrehung kann es dann ab oder AB sein bei einer Rechtsdrehung Ab oder aB. Hier das Verfahren: A² = letzter, gemerkter A-Zustand A = PinA B = PinB If A <> A² then A² = A If A = B then left else right Entprellen läßt sich das mit aktivierten Pullups und 10nF an den beiden Kanal-Pins oder man macht eine Zeitbasierte Entprell-Software mit 1ms vor der Drehgeberauswertung. Gruß Andi
Ok, ich habs jetzt auch hinbekommen. Nur habe ich folgenden Fehler gemacht. Im Datenblatt des Drehgebers (so einer von Alps) steht, daß die maximale Prellzeit 5ms beträgt. Also dachte ich mir, daß ich den Timer so einstelle, daß er alle 10ms den Drehgeber abfragt; ich glaubte so auf der sicheren Seite zu sein. Nur leider wird der Geber dann nur 100 mal pro Sekunde abgefragt und bei schnellem Drehen habe ich nicht alle Übergänge mitbekommen. Jetzt fragt der Timmer jede ms ab (wie auch Hias oben geschrieben) und es funktioniert wunderbar. Im Prinzip lese ich bei jedem Timerinterrupt den Drehgber ein und vergleiche dies mit dem vorherigen Wert. Über ein zweidimensionales Array hole ich mir dann +1 oder -1, so wie es in der DSE FAQ auch gemacht wurde. Interessant finde ich den zweiten Ansatz von Peter Dannegger ohne Tabelle. Das schaue ich mir bei Gelegenheit mal an. Jedenfalls vielen Dank für eure Antworten. Gruß Jens
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.