Forum: Mikrocontroller und Digitale Elektronik Incrementalgeber RS422


von Andreas (Gast)


Lesenswert?

Hallo zusammen

Versuche gerade die Pulse aus einem Incrementalgeber über eine RS422 
Schnittstelle reinzukriegen.
Ich verwende zur Zeit eine KIH50 vond er Firma Kübler. Der sollte mir 
2000 Pulse pro Umdrehung ausgeben:
https://www.kuebler.com/k2016/pdf/?KIS50-KIH50_de.pdf

Nun da ich zuvor noch nie mit einer RS422 (nur mit RS232) gearbeitet 
habe kommen nun wohl ein paar Anfänger Fragen.
Ich habe nun PIN 1,2,3,4 an die RS422 Schnittstelle angeschlossen und 
PIN 2 mit 5V versorgt.
Wenn ich nun mit dem Hterm auf die Schnittstelle zugreife und den Geber 
drehe bekommen ich (meine Vermutung) für jeden Step eine HEX 0 oder in 
ASCII "/n".
Kann ich nun so zählen wie viele steps der Drehgeber gemacht hat und bei 
2000 => volle Umdrehung???

Gruss
Andi

von m.n. (Gast)


Lesenswert?

Andreas schrieb:
> Wenn ich nun mit dem Hterm auf die Schnittstelle zugreife und den Geber
> drehe bekommen ich (meine Vermutung) für jeden Step eine HEX 0 oder in
> ASCII "/n".

Nur freitags oder am 1. April ;-)
Suche mal nach "Quadraturdekoder".

von Jens W. (jensw)


Lesenswert?

Das kann man wohl vergessen.
RS422 ist eine Schnittstelle für differentielle Signale. Sie zeichnet 
sich dadurch aus, dass sie besonders störfest ist.

RS232 ist eine serielle Datenschnittstelle.

Diese beiden Systeme sind nicht kompatibel.
Da HTerm Daten am COM Port erwartet wirst du wohl gar nichts sehen, wenn 
du deinen Geber mit RS422 da anschließt, da dies keine serielle 
Datenübertragung ist.

Du brauchst einen kleinen Controller, der dir die Geberspuren A, B, 
Index einließt und die dann auf RS232 wandelt.
Den Controller kannst du dann an den PC anschließen und über HTerm die 
Geschichte verfolgen was passiert.

Wie viele Pule zu einer Umdrehung gehören kann der Controller auch 
gleich bestimmen. Dazu muss der die Pulse zählen, die zwischen dem 
Indexsignal kommen.

Gruß, Jens

von Andreas (Gast)


Lesenswert?

danke euch aber warum ist dann dieser Drehgeber für RS422 ausgelegt? 
(siehe PDF link 1. post)
Das verstehe ich nicht...

Gruss
Andi

von Sascha W. (sascha-w)


Lesenswert?

Andreas schrieb:
> danke euch aber warum ist dann dieser Drehgeber für RS422 ausgelegt?
> (siehe PDF link 1. post)
> Das verstehe ich nicht...
Das Teil sieht mehr nach Industrieeinsatz aus und da muss eine gewisse 
Störsicherheit gegeben sein. Das Teil ist halt dazu gedacht mit mehreren 
Metern Kabel an eine Steuerung angeschlossen zu werden.

Sascha

: Bearbeitet durch User
von Clemens L. (c_l)


Lesenswert?

Andreas schrieb:
> Versuche gerade die Pulse aus einem Incrementalgeber über eine RS422
> Schnittstelle reinzukriegen.

Was für eine RS422-Schnittstelle? (Die RS-422-Spezifikation definiert 
nicht alles.)

> Ich verwende zur Zeit eine KIH50

"KIH50" ist nur ein Teil der vollständigen Nummer.

> Ich habe nun PIN 1,2,3,4 an die RS422 Schnittstelle angeschlossen und
> PIN 2 mit 5V versorgt.

Laut PDF sind diese Pin-Nummern nicht korrekt.

> Wenn ich nun mit dem Hterm auf die Schnittstelle zugreife

RS-422 und RS-232 sind elektrische Spezifikationen; nur weil über RS-232 
oft ein UART-Protokoll gefahren wird, heißt nicht, dass dieses Gerät 
auch so etwas liefert.

RS-422 ist unempfindlicher gegen Störungen (und erlaubt deshalb längere 
Leitungen). Das ist aber der einzige Unterschied gegenüber den 
Gegentakt-/Open-Collector-Versionen.

von Andreas (Gast)


Lesenswert?

ok gut also brauche ich zusätzlich einen "Zähler" damit ich die steps 
auswerten kann.

Der Motor wo dieser Geber dran ist macht etwa 1 Umdrehung pro Sekunden 
(maximal) sprich 2000 steps.

Habe nun folgendes gefunden:
https://nodna.de/Phidget-Encoder-High-Speed-USB-Rev-2

Das sollte gehen oder?

PS: Die Komplette Part Nr: 8.KIH50.2942.2000

Gruss
Andi

von Georg (Gast)


Lesenswert?

Andreas schrieb:
> Das sollte gehen oder?

Kostet viel und hat keine RS422-Schnittstelle. Das sollte gehen, wenn 
man nur 1 von 2 Differenz-Datenleitungen anschliesst. Aber keine 
Garantie.

Nebenbei: es gibt wohl keine Nullpunkterkennung. Den Nullpunkt braucht 
man aber für eine absolute Position.

Georg

von Thorsten Legat (Gast)


Lesenswert?

Jens W. schrieb:
> Das kann man wohl vergessen.
> RS422 ist eine Schnittstelle für differentielle Signale. Sie zeichnet
> sich dadurch aus, dass sie besonders störfest ist.
>
Naja, genaugenommen ist es eine Festlegung, wie Signale elektrisch 
übertragen werden, nämlich differentiell und über getrennte Adernpaare.
Das können Quadraturdaten sein, aber genauso gut Serielle Daten wie vom 
UART geliefert.

> RS232 ist eine serielle Datenschnittstelle.
>
Siehe oben, nur mit anderen Pegeln und GND referenziert.

> Diese beiden Systeme sind nicht kompatibel.
> Da HTerm Daten am COM Port erwartet wirst du wohl gar nichts sehen, wenn
> du deinen Geber mit RS422 da anschließt, da dies keine serielle
> Datenübertragung ist.
Klar kommen da "serielle Daten", allerdings wird da bestenfalls 
Datenmüll angezeit werden.

>
> Du brauchst einen kleinen Controller, der dir die Geberspuren A, B,
> Index einließt und die dann auf RS232 wandelt.
> Den Controller kannst du dann an den PC anschließen und über HTerm die
> Geschichte verfolgen was passiert.

Röchtöch!
>
> Wie viele Pule zu einer Umdrehung gehören kann der Controller auch
> gleich bestimmen. Dazu muss der die Pulse zählen, die zwischen dem
> Indexsignal kommen.

Kommt ganz auf den Geber an...

Andreas schrieb:
> Habe nun folgendes gefunden:
> https://nodna.de/Phidget-Encoder-High-Speed-USB-Rev-2
>
> Das sollte gehen oder?

Damit bist du zumindest schon nah dran, fehlt noch die Pegelumsetzung 
RS422 nach TTL, such nach "dual rs422 receiver" oder benutze zwei Stück 
MAX485. Nein, MAX422 geht leider nicht ;)

Alternativ könnte man versuchen nur jeweils das positive Signal gegen 
GND auszuwerten, das kann gehen, ist aber nicht sauber und geht nicht 
immer.

Viel Spaß noch, du bist auf dem richtig Weg...

von Andreas (Gast)


Angehängte Dateien:

Lesenswert?

danke dir laut Datenblatt ist die Schnittstelle TTL kompatibel sprich 
dann sollte es doch auch ohne MAX485 gehen...

Gruss
Andi

von Thorsten Legat (Gast)


Lesenswert?

Andreas schrieb:
> dann sollte es doch auch ohne MAX485 gehen...

sollte != muss

Das bedeutet nur, dass die Ausgangspegel für TTL 
(Transistor-Transitor-Logic) geeignet sind, die gibt es auch mit 1.8V, 
3.3V, 5V, sonstwas.

Wenn ich mir die Daten von dem Phidget Dings angucke steht da:
Maximale Niederspannung (Encoder-Eingang): 800 mV (Gleichstrom)
Minimale Hochspannung (Encoder-Eingang): 3,6 V (Gleichstrom)

In deinem DB steht:
low = max 0.5V -> OK
high = min 2.5V -> Ungewiss! Kannst aber messen, was da rauskommt.
Aber da geht es los: Wo misst du bei RS422? Zwischen A und B oder A und 
GND? B und GND? Und was sagt der verbaute Sender dazu?

Wenn du schon 65€ für so ein Platinchen hinlegt solltest du dir auch 
noch einen entsprechenden Pegelwandler gönnen. Gibts sicher auch als 
"Break-Out-Board", wenn einem DIP Gehäuse nicht zusagen.

Ooooder du kaufst dir einen Arduino nano irgendwas mit USB-Seriell 
Wandler drauf, einen Pegelwandler und machst das ganze mal an nem 
Wochenende selbst für <10€.

Kommt ganz auf Dringlichkeit und Anwendungszweck an. Privat? Uni? 
Beruflich?

von Andreas (Gast)


Lesenswert?

Danke dir!

ja werde wohl den Arduino Ansatz mal versuchen da ich ein paar rumliegen 
hab :)
Sollte eigentlich mit dem DigitalRead Befehlen gehen...

PS: Ist für den Privaten Gebrauch um eine Maschine zu überwachen ob sie 
wirklich z.B. 400steps fährt etc.

Gruss
Andi

von Thorsten Legat (Gast)


Lesenswert?

Andreas schrieb:
> Sollte eigentlich mit dem DigitalRead Befehlen gehen...

Ich kenne mich mit dem Arduino-Zeugs kaum aus, allerdings wirst du 
hierbei entweder einen externen (pin) Interrupt benutzen müssen und 
stumpf die Aufrufe zählen, oder aber lernen vernünftig mit einem Timer 
umzugehen, den Zählereingang zu nutze etc.

Ich bin aber absolut sicher dass es massig Beispiele zum Thema 
Quadraturencoder am Arduino geben wird.

Zumindest für BASCOM gab es hier rgelrechte Glaubenskriege wie es denn 
nun richtig zu machen ist, aber auch ein paar wirklich sehr effiziente 
und zuverlässige Methoden.

Einfach hier im Forum kramen...

von m.n. (Gast)


Lesenswert?

Andreas schrieb:
> ok gut also brauche ich zusätzlich einen "Zähler" damit ich die steps
> auswerten kann.

Dazu gäbe es als einfache, kostengünstige Nachbau-Lösung mit 4-stell. 
LC-Anzeige dies: 
http://mino-elektronik.de/7-Segment-Variationen/LCD.htm#lcd4
Weiter unten dann mit 6-stell. LED-Anzeige das: 
http://mino-elektronik.de/7-Segment-Variationen/LCD.htm#led3
Das Programm ist für einen ATMega328 geschrieben und läuft deshalb auch 
auf einem Arduino UNO, wenn die Taktfrequenz angepaßt wird.

Oder als kleine µC-Lösung (ATTiny25) mit IIC-Datenabfrage jenes:
2. Abschnitt von http://mino-elektronik.de/mt12_iic/mt12_iic.htm

Die RS422-Signale kannst Du vermutlich direkt an einen mit 5 V 
versorgten µC anschließen: je Kanal nur einen Ausgang A oder /A und B 
oder /B.
Die oben aufgeführten '1' Pegel von TTL-Signalen sind min. Angaben unter 
Last. Mit einem Pullup-Widerstand (1 kOhm) werden auch knapp 5 V für '1' 
ausgegeben, sofern die RS422-Treiber nicht sowieso schon deutlich 
höheren Pegel liefern.
Bei AVRs liegt die Schaltschwelle am Eingang bei rund Vcc/2, was man bei 
aufmerksamer Lektüre (Typical Characteristics) auch im Datenblatt 
findet.

von Bernhard S. (b_spitzer)


Lesenswert?

Georg schrieb:
> Nebenbei: es gibt wohl keine Nullpunkterkennung. Den Nullpunkt braucht
> man aber für eine absolute Position.

Laut Datenblatt gibt es eine 3. Spur 0, /0 für die Referenz.

Man kann die einzelnen Signale mit einem TTL-kompatiblen Eingang 
auswerten. Für industrielle Anwendungen nimmt man aber die passenden 
RS422-Sender bzw. Empfängerbausteine. z.B. AM26C32 (4 Empfänger) oder 
AM26C31 (4 differntielle Sender) bzw. für einzelne 
Kommniktationsleitungen den DS3695 (1 Sender, 1 Empfänger).
Ansonsten ist der Drehgeber genauso auszuwerten, wie Drehimpulsgeber 
("Digitales Poti"). Schwieriger wäre es mit einem SSI-Geber...

: Bearbeitet durch User
von Wolfgang (Gast)


Lesenswert?

Andreas schrieb:
> Sollte eigentlich mit dem DigitalRead Befehlen gehen...
>
> PS: Ist für den Privaten Gebrauch um eine Maschine zu überwachen ob sie
> wirklich z.B. 400steps fährt etc.

Dann solltest du auch die maximale Drehzahl in deine Überlegungen mit 
einbeziehen. Bei 8000 Flanken pro Umdrehung und DigitalRead() ist nicht 
unendlich viel Luft.

von Georg (Gast)


Lesenswert?

Bernhard S. schrieb:
> Laut Datenblatt gibt es eine 3. Spur 0, /0 für die Referenz.

Am Encoder schon, aber nicht an dem Zähler, den er sich ausgesucht hat. 
Aber nach seiner Beschreibung interessiert ihn die absolute Position 
garnicht. Muss er selber wissen.

Georg

von Andreas (Gast)


Lesenswert?

Ich danke euch für all eure Input folgendes hat sich nun ereignet.

habe mir ein Arduino UNO geschnappt dort die teensy Encoder Libary 
draufgeladen:
https://www.pjrc.com/teensy/td_libs_Encoder.html

Habe nun A und B des Gebers an interupt PIN 2 und 3 angeschlossen und 
siehe da ich kann alle Steps perfekt zählen lassen!

Perfekt!
Nun habe ich das Programm ein bisschen abgeändert so dass das Arduino 
detektierte wenn der Stepper Motor angehalten hat und dann die Anzahl 
steps ausgibt und diese wieder auf 0 setzt sobald der Motor wieder 
anfängt zu laufen.

Danke euch allen nochmals ihr habt mir super geholfen echt ein tolles 
Forum hier!!!!

Gruss
Andi

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
Noch kein Account? Hier anmelden.