sin/cos Inkremental-Dekoder mit 0,1µm Auflösung

zurück zur Übersicht

Die gezeigte Schaltung ist eine kostengünstige Lösung, 90°-phasenverschobene sin/cos-Signale von Inkrementalgebern µP-gerecht aufzubereiten. Die Eingangssignale können digital oder - wie hier gezeigt - sinusförmig sein. Bei Sinussignalen wird neben einer 4-fach Auswertung, die die Nulldurchgänge nutzt, zusätzlich eine Bewertung der Phasenlage mit 25-facher Auflösung gemacht, sodaß sich insgesamt eine 100-fach Auswertung bei Sinussignalen ergibt. Beispielsweise liefern Meßtaster MT12/MT25 der Fa. Heidenhain mit 10µm/Intervall eine Auflösung von 0,1µm. Beim ST1207 wird eine Auflösung von 0,2µm erreicht.

Für die Datenausgabe wird das IIC-Bus Interface des verwendeten Prozessors Atmel ATmega48 verwendet; durch variable IIC-Adressen können mehrere Kanäle an einem übergeordneten µP betrieben werden.

Die Eckdaten der Schaltung:

Hier ein Beispielprogramm für ein Meßlineal mit 40µm/Teilung und 10µm Auflösung mit 7-Segmentanzeige.

 

einfache Schaltung mit Demo-Programm für Rechtecksignale:

Als kleine kostengünstige Lösung für die Auswertung von Linear-, Rotations- oder Drehgebern bietet sich ein ATtiny25 an, da er nicht nur die Auswertung und Impulszählung erledigen kann, sondern zur Datenausgabe mit seinem USI auch eine IIC-Schnittstelle bedient. Bei der Beschaltung des Tiny25 sind PB0 (SDA) und PB2 (SCL) für die IIC-Schnittstelle fest vorgegeben. Die freien Pins PB4 (Phase-A) und PB4 (Phase-B) werden für den Anschluß des Inkrementalgebers verwendet; bei beiden Eingängen ist der interne Pullup-Widerstand aktiviert, sodaß auch passive Geber direkt angeschlossen werden können. Der verbleibende PB1 kann für optinales /Reset-Signal genutzt werden und hat ebenfalls den internen Pullup-Widerstand eingeschaltet. Sofern für SDA, SCL und /Reset noch zusätzliche Pullup-Widerstände im Schaltbild eingefügt sind, dienen diese der Erhöhung der Störsicherheit bzw. als Abschlußwiderstände für IIC, falls nicht an anderer Stelle der Schaltung bereits vorhanden.

Mit dem intern getakteten ATtiny werden Flankenänderungen bis ca. 350 kHz erkannt und mit einem 32 Bit Zähler gezählt. Dabei ist es unerheblich, ob prellende mechanische Kontakte angeschlossen werden, oder das Signal von optischen Encodern oder Hallsensoren stammt. Alle Signale werden mit 4-fach Flankenbewertung gezählt. Um bei mechanischen Drehgebern die unbrauchbaren Zwischenflanken zu unterdrücken, kann man bei der Datenausgabe auf 2-fach Auswertung 'umschalten', was nicht anderes bedeutet, als daß Zählerwert/2 ausgegeben wird. Die Datenausgabe per IIC ist minimal gehalten.
Folgende Befehle werden beachtet:

'A' Ausgabe des Zählerstandes
'B' Ausgabe des Zählerstandes/2 für Geber mit Zwischenflanken
'Z' Löschen des Zählers

Bei der Ausgabe wird das untere Byte zuerst gesendet. Daher ist es möglich, nur ein oder zwei Bytes auszulesen und die Übertragung abzukürzen. Werden mehr als vier Bytes gelesen, wiederholt sich die Ausgabe des 32 Bit Zählerstandes. Als IIC-Adresse gibt das Programm 0xB8 vor, die (hoffentlich) nicht mit anderen Busteilnehmern zur Kollision führt. Alternativ kann man eine eigene Adresse vorgeben, welche man ins interne EEPROM an Adresse 0x00 schreibt. Hier steht normalerweise ein 0xFF. Wird beim Programmstart ein Wert != 0xFF gefunden, wird dieser als neue, eigene Adresse verwendet. Bislang wurde die Software mit 100 kHz Busfrequenz und einem IIC-Master per Software getestet. Vielleicht testet jemand bei Bedarf unter anderen Bedingungen und kann seine Erfahrungen mitteilen. Soweit bleibt die Software daher eine Testversion.

Anfragen:

Seitenanfang zurück zur Übersicht