Gast
#1293413
Einfache Drehgeberauswertung. Hier mal eine einfaches Beispiel einer Drehgeberauswertung. Die Grundüberlegung ist dabei folgende: Die Richtung und der Zählimpuls wird erst als relevant gewertet wenn die vollständige Abfolge der Signale vorliegt. Beim Vorliegenden Codeschnipsel handelt es sich um die Auswertung zweier magnetischer PickUp's auf einer drehenden Welle. Wenn man von der Nullstellung ausgeht ( Beide Aufnehmer in Ruhe ) so ergibt sich folgende Kette. Vorwärts ( CW ) 00->10->11->01 Rückwärts (CCW) 01->11->10->00 Also werden die „sicheren“ Sensorsignale einfach in ein Schieberegister geladen. Irgendwann stellt sich einer der beiden Zustände ein. Also cw =0b00101101 oder ccw 0b01111000 Hier kann dann einfach ein Zähler inkrementiert oder dekrementiert werden. Der Schaltpunkt kann für mech Drehgeber mit Raste einfach angepasst werden. Ist ZB eine mechanische Raste bei Übergang 1011 vorhanden so kann der Schaltpunkt rechts oder links daneben gelegt werden. ZB 10_11_01_00 Zu beachten ist allerdings das beide Sequenzen zyklisch sein müssen sonst kann beim flattern zwischen 2 Werten eine Fehlstelle auftreten. Also auf 00011101 für CCW muss 01110100 CW als „Gegen“ Schlüssel folgen. Anfang und Ende sind jeweils Spiegelsymetrisch-Aber zyklisch tauschbar. Flattert zB die Erkennung zwischen 11 und 01 so entscheiden erst die nächsten beiden Doppelbits über die Richtung. Die Routine ist komplett im Timer Überlauf IRQ untergebracht – Das ist für Zeit kritische Anwendungen wohl nicht optimal aber leicht zu ändern. Da für eine prellfreie Erkennung jeder Pegel 4 mal Gleich und in Folge gelesen werden muss ist ein Tastverhältnis von 5x Nutzsignal wohl die theoretische Grenze. Da beide Sensor Signale in die Auswertung eingehen sollte das hoffentlich einigermaßen sicher sein. Praktisch kann man das aus dem Fehler PIN mit einem Oszi bestimmen. Allerdings sollte man auch mit der Abtastung nicht zu weit nach oben gehen. Die Möglichkeit im Prellen 4 gleiche Signale zu gewinnen ist genauso warscheinlich wie alle anderen Kombinationen. Erwartet man eine Prellzeit von 1ms sollte die Abtastung nicht viel kleiner ¼ ms sein. Das Nutzsignal sollte dann wohl mindestens 2ms haben. Zzgl werden noch folgende Sprünge von der Auswertung ausgeschlossen und als Fehler gemeldet. 00<->11 01<->10 ( Gray Code !) Diese Kombinationen kann man leicht dadurch erkennen da diese als Summe 3 ergeben. Das sollte eigentlich gar nicht vorkommen- Könnte aber durch Doppelprellen beider Sensoren oder durch Unterschreiten der Abtastfrequenz auftauchen. Meine Lösung ist zugegebenerweise nicht so augetüftelt, aber leicht verständlich und hoffentlich leicht nachvollziehbar. Also auch für Code-Grobmotoriker wie mich geeignet:-) Der case Block mutet komisch an war aber die kleinste Lösung. ( kann man auch im asm listing sehen ) Über goto zu Streiten ist müßig....Have Fun ! Phagsae