Hallo,
eines meiner Arduino Software/Firmware Projekte war der Anschluß eines Inkremental Drehgebers mit 2 Kanal Quadratur Ausgang an den Arduino. So ein inkrementeller Encoder ist vermutlich einer der meist gebräuchlichsten Encoder schlechthin. Damit lassen sich schöne und billige Digitalanzeigen für Drehbank, Fräsmaschine, Drehtisch etc. realisieren. Einfache Encoder sind neu ab ca. 20 Euro am Markt erhältlich. Übrigens: Auch Lineargeber (in Längsrichtung verschiebbarer Schlitten) haben einen Quadratur Ausgang. Anstelle von Drehgebern kann man auch die nehmen.
Auf folgendem Bild sieht man, wie die erfaßte Position in mm auf einem Lcd Display angezeigt wird. Das Lcd Display ist leider nicht hinterleuchtet bzw. nicht beleuchtet. Für Tests ist das ok, aber für eine richtige Digitalanzeige sollte das Display unbedingt beleuchtet sein.
Die Eckdaten (Details weiter unten):
* Firmware erlaubt Betrieb von max. 4 Encodern. Am Arduino können jedoch 'nur' max. 3 Encoder angeschlossen werden, da 2 der 8 Arduino Pins am Port D für die USB Verbindung zum PC benötigt werden und damit für den 4. Encoder nicht mehr zur Verfügung stehen.
* Die Encoder können 1-fach, 2-fach und 4-fach ausgewertet werden. Bei einem Encoder mit z. B. einer 500er Scheibe kann bei 4-fach Auswertung die Auflösung vom 500 auf 4 x 500, also 2000 Impulse pro Umdrehung, erhöht werden.
* Anschluß von 2-zeiligen und 4-zeiligen Lcd Displays
* Umschaltbar Mm und Inch. Übersetzung kann konfiguriert werden, damit je nach Mechanik bzw. mechanischer Übersetzung die richtigen mm Werte am Display angezeigt werden. Angabe auch in Grad (0..360) möglich.
Die Bilder zeigen einen ziemlichen Drahtverhau. Den ignorieren Sie bitte, da es lediglich ein experimenteller Aufbau ist. Für eine brauchbare Digitalanzeige sollte man, wie oben gesagt, auf jeden Fall ein beleuchtbares Lcd Display nehmen, da das Ablesen damit wesentlich leichter fällt. Beim Drehgeber ist es egal, welchen Hersteller oder welche Type man wählt, solange der Drehgeber ein 2 Kanal Quadratursignal ausgibt, also sowas hier:
- Code: Select all
___ ___ ___ ___
A ___| |___| |___| |___|
___ ___ ___ ___
B ___| |___| |___| |___|
Man sollte beim Encoder Kauf gut auf die Auflösung achten, die auf die zu überwachende Mechanik abgestimmt sein sollte. Wer denkt 'je höher die Auflösung desto besser' der irrt. Ich verwende in meinen Tests einen 500er Encoder, den ich mittels Software (Firmware) 4-fach auswerte und so eine 2000er Auflösung erhalte. Ich bin ferner einmal von 400 Inkrementen pro mm ausgegangen (einstellbar), was somit pro Umdrehung als 5.00 mm am Lcd Display angezeigt wird.
Als Fausregel würde ich sagen, der Encoder sollte im Bereich von ca. 100 bis ca. 500 Impulsen pro Umdrehung liegen. Damit lassen sich eigentlich alle üblichen Anwendungsgebiete abdecken. Bei einer Neuanschaffung würde ich mich für einen 500er bzw. 512er Encoder entscheiden. Wenn schon Encoder vorhanden sind, dann die nehmen, die da sind.
Für Sonderfälle kann auch ein Encoder mit z. B. 1024er oder 2048er Scheibe vorteilhaft sein. Ich denke z. B. an einen Drehtisch (Teilapparat, Rundschalttisch) bei dem die Tischposition direkt oder mit nur geringer Untersetzung vom Encoder ermittelt wird. Bei 4-fach Auswertung käme man dann auf eine Auflösung von 4 x 1024 = 4096 bzw. 4 x 2048 = 8192 Impulsen pro Umdrehung.
1-fach, 2-fach, 4-fach Auswertung
- Code: Select all
___ ___ ___ ___
A ___| |___| |___| |___|
___ ___ ___ ___
B ___| |___| |___| |___|
Bei 1-fach Auswertung wird nur die steigende Flanke von Phase A ausgewertet. Bei 2-fach Auswertung wird zusätzlich die fallende Flanke von Phase A ausgewertet. Bei 4-fach Auswertung werden zusätzlich die steigende und fallende Flanke von Phase B ausgewertet. Die 4-fach Auswertung stellt das Maximum an Informationsgehalt dar, das man einem Quadratursignal entnehmen kann.
Achtung: Es gibt auch inkrementelle Drehgeber, die statt des Rechteck Signals ein Sinus/Cosinus Signal, also ein wellenförmiges Signal ausgeben, meist 1 Volt SS. Grundsätzlich sind die Drehgeber mit Sinus/Cosinus Ausgang besser, da das sinoidale Signal einen größeren Informationsgehalt aufweist, weshalb solche Drehgeber besonders bei Anwendungen mit geringen Umdrehungen/min (Langsamläufer) eingesetzt werden. Der Nachteil besteht nur darin, daß wir Sinus/Cosinus Drehgeber ohne Sinus/Cosinus => Rechteck Wandler nicht am Arduino betreiben können.
Stichwort 'Wandler': Einfache 2 Kanal Quadratur Encoder haben nur einen A B Ausgang. So einen Encoder habe ich verwendet und Sie können das graue Ding auf den Bildern sehen. Die Phase A wechselt beim Drehen des Encoders immer zwischen 0 Volt und 5 Volt. Gleiches gilt für die Phase B, die nur um 90 Grad versetzt ist. 0 Volt und 5 Volt, das sind klassische TTL Pegel und deshalb können wir diesen Drehgeber direkt an 2 Arduino Pins anklemmen.
Der Nachteil ist, daß diese TTL Pegel sehr störempfindlich sind, wenn die Leitung zwischen Encoder und Arduino mal etwas länger wird, sagen wir mal geschätzt z. B. über 0,5 Meter. Bewährt hat sich dafür die sogenannte differentielle Signalübertragung. Bei Phase A nimmt man eine weitere Leitung und zur Unterscheidung nennt man die beiden dann A+ (oder einfach nur A) und A-.
Differentielle Signalübertragung
Bei TTL gilt:
* Low Pegel: A ist 0 Volt
* High Pegel: A ist +5 Volt
Bei differentieller Übertragung gilt z. B.:
* Low Pegel: A+ ist -5 Volt, A- ist +5 Volt,
* High Pegel: A+ ist +5 Volt, A- ist -5 Volt.
(Spannungen können auch anders sein)
Gleiches Schema gilt für die Phase B. Bei differentieller Übertragung ist es wichtig, daß die 2 Drähte für A+ und A- miteinander verdrillt sind, man spricht hier von 'paarig verdrillt'. Ich bin kein Elektroniker aber die Verdrillung scheint wichtig zu sein. Der Trick an der differentiellen Übertragung besteht nun darin, daß sich Störungen quasi gleichmäßig auf A+ und A- auswirken. Auch wenn sich durch Störeinflüsse (Kompressor springt an, Plasmabrenner zündet etc.) die Spannung von
* High Pegel: A+ ist +5 Volt, A- ist -5 Volt.
auf z. B.
* High Pegel: A+ ist +1,9 Volt, A- ist -2,2 Volt.
verringert, dann schadet das nicht, denn der High Pegel wird trotzdem sicher erkannt, da A+ gegenüber A- positiv ist.
Wie gesagt, ich bin kein Elektroniker, aber so habe ich die differentielle Signalübertragung verstanden. Differentielle A+ A- B+ B- Ausgänge sind also technisch erheblich besser als einfache A B Ausgänge.
Was ist mit dem Z Ausgang bzw. Z+ Z-?
Manche Encoder stellen noch eine Art Tacho Signal bereit, jedesmal wenn der Encoder eine ganze Umdrehung ausgeführt hat. Dieses 'Z Signal' genannte Signal kann als einfaches Signal oder als differentielles Signal ausgegeben werden (kommt auf den Encoder an), dann steht Z+ Z- irgendwo im Schaltbild. Da wir nicht die Geschwindigkeit eines Autos ermitteln wollen (ein Impuls pro Radumdrehung), können wir Z bzw. Z+ Z- ignorieren. Der Encoder, den ich für meine Tests nutze, besitzt (vermutlich) kein Z Signal. Ich sagte 'vermutlich', weil ich für meinen Encoder kein Datenblatt habe. Am Encoder Pin 2 dieser Encoder liegt entweder ein Z Signal an oder der Pin 2 ist ohne Funktion. Da das Z Signal für unsere Positionsanzeige aber ohne Bedeutung ist, habe ich mir nicht die Mühe gemacht nachzusehen, ob an Pin 2 nun etwas anliegt oder nicht.
Was bedeutet das nun alles in der Encoder Praxis?
1. Encoder mit A B Ausgang
Wenn Sie einen Encoder mit A B Ausgang haben, dann können Sie die A B Leitungen direkt am Arduino anklemmen. ACHTUNG: Ich unterstelle, daß A B sog. +5 Volt TTL Pegel sind! Andernfalls ist ein Pegelwandler erforderlich! Wenn Sie zu Ihrem A B Encoder ein längeres Kabel verlegen wollen, dann sollten Sie den Encoder unbedingt auf differentielle Signalübertragung umbauen. Das geht relativ einfach mit folgenden Chips.
26LS31 Quadruple Differential Line Driver <= Sender
26LS32 Quadruple Differential Line Receivers <= Receiver
Beim Encoder brauchen Sie einen 26LS31, der A nach A+ A- wandelt und B nach B+ B- wandelt. Beim Arduino brauchen Sie einen 26LS32, der A+ A- wieder nach A zurück wandelt und B+ B- wieder nach B zurück wandelt. Beachten Sie, daß es sich beim 26LS32 um ein 'Quadruple ...' handelt. Der hat also 4 Wandler drin. Da Sie pro Encoder nur 2 Wandler brauchen, können Sie am 26LS32 also 2 Encoder anschließen.
Auch am Sender 26LS31 könnten wir 2 Encoder anschließen, praktisch tun wir das aber nicht, da der 26LS31 räumlich so nahe wie möglich am Encoder sein soll. Da so ein Chip nur ca. 0,50 Euro kostet, ist das finanziell kein Problem. Die Übertragung sieht dann so aus:
- Code: Select all
26LS31 26LS32
/ A+ ---------------------- A+ \
Encoder A - - A Arduino
\ A- ---------------------- A- /
/ B+ ---------------------- B+ \
Encoder B - - B Arduino
\ B- ---------------------- B- /
Das A B Signal wird also in ein differentielles Signal gewandelt, über die Leitung geschickt und beim Arduino mittels 26LS32 wieder in A B zurück gewandelt. Natürlich können Sie auch andere als die hier genannten Chips verwenden, wenn Sie damit das gleiche Ergebnis erziehlen.
2. Encoder mit A+ A- B+ B- Ausgang
Hier brauchen Sie einen 26LS32 Chip, der das differentielle Signal auf TTL Pegel wandelt.
- Code: Select all
26LS32
A+ ---------------------------- A+ \
Encoder - A Arduino
A- ---------------------------- A- /
B+ ---------------------------- B+ \
Encoder - B Arduino
B- ---------------------------- B- /
Ein Encoder mit A+ A- B+ B- Ausgang hat quasi einen 26LS31 schon eingebaut. Bestimmt hat der Hersteller da jetzt nicht so einen großen Chip in den Encoder eingebaut, aber prinzipiell / funktionell kann man sich die Sache so vorstellen. Ich möchte Ihnen ja nur ein paar Informationen geben, falls Ihnen Encoder bisher nicht so geläufig waren.
Zusammenfassung
Zusammenfassend kann man sagen, daß Encoder eine klasse Sache sind, um z. B. Digitalanzeigen damit aufzubauen für die Drehbank, die Fräsmaschine, den Rundtisch usw. Beim (Gebraucht-) Kauf muß man aufpassen, daß der Encoder einen Rechteck Ausgang hat. Falls er einen Sinus/Cosinus Ausgang hat, ist ein Konverter erforderlich. Zu beachten ist auch, ob der Encoder einen A B oder einen A+ A- B+ B- Ausgang hat. Ein Encoder mit A B Ausgang ist zwar sehr leicht am Arduino anzuschließen, der Nachteil ist jedoch, daß man bei etwas längeren Leitungen und in einer rauhen (Stör-)Umgebung damit rechnen muß, daß sich der Encoder 'verzählt'. Der CncPlayer würde also dann eine falsche mm Position anzeigen. Sie sollten also mit differentiellen Signalen arbeiten, wenn Sie Wert auf einen stabilen Betrieb legen. Einen Encoder mit A+ A- B+ B- Ausgang müssen Sie also mit einem Chip nach A B konvertieren. Wenn Sie einen Encoder mit A B Ausgang haben, dann müssen Sie erst nach A+ A- B+ B- konvertieren und dann wieder zurück nach A B konvertieren.
Sie können einen A B Encoder natürlich auch einfach mal am Arduino anschließen und schauen ob er zuverlässig läuft. Ist dies der Fall, dann können Sie sich die
A B ==> A+ A- B+ B- ==> A B
Konversion sparen. Probieren geht über Studieren.
MfG, Walter
