Forum: Mikrocontroller und Digitale Elektronik RS485 Arduino & RX24F Servo


von Felix K. (felix133711)



Lesenswert?

Hey,
Ich versuche aktuell einen Servo mit der Bezeichnung RX28F mit einem 
Arduino Nano anzusteuern. Das Datenblatt des Servos wurde von meiner 
Seite gelesen und befindet sich hier:
http://www.crustcrawler.com/motors/RX28/docs/RX28_Manual.pdf
Dieser Servo wird über RS485 angesteuert. Zum Einsatz kommt hier 
zunächst ein USB-TO-RS485-Konverter (zum Beispiel: 
http://www.ebay.de/itm/like/201597312274?lpid=106&chn=ps&ul_noapp=true).

Die Eingänge A/D+ und B/D- verbinde ich jeweils mit Servo und Konverter. 
Der Servo wird hier mit 12V betrieben. (circuit-USB_to_RS485.jpg). 
Nachdem alles verbunden ist nutze ich "Hterm" (Baudrate 57600), um 
sogenannte "Instruction Packets" dem Servo mitzuteilen. In diesem 
Beispiel schalte ich auf dem Servo eine LED an "FF FF 01 04 03 19 01 
DD". Das funktioniert auch alles prima - die LED geht an und ich war 
glücklich. Zur Sicherheit habe ich das Signal, was übertragen wird, 
überprüft. Ich muss sagen, ich war sehr irritiert - sieht für mich als 
Leihe sehr merkwürdig aus (habe auf dem anderen Kanal einen 
invertierenden Pegel erwartet). Zu sehen ist das im Bild 
"RS485-USB_to_RS485.jpg".
Funktioniert hat das ganze allerdings trotzdem prima!

Jetzt wollte ich das Ganze automatisieren und dafür zunächst mit einem 
Arduino Nano den Servo ansteuern. Ich habe mir kurzer Hand einen MAX485 
organisiert, welcher auch auf dem USB->RS485-Konverter verbaut ist, 
besorgt. Das Datenblatt des genannten Servos gibt sogar einen Schaltplan 
für einen selbstgebauten Controller vor - super! Dieser Schaltplan ist 
im Datenblatt aufzufinden und auch hier in diesem Post angehängt - 
"circuit-datasheet.jpg". Das Ganze habe ich dann für den Arduino 
angepasst herausgekommen ist dann Schaltung "circuit-UART_to_RS485.jpg". 
Es gibt im Netz diverse Videos und Blogeinträge, die ebenfalls auf 
diesen Schalplan referenzieren und diesen auch erfolgreich realisiert 
haben.
Die Software gibt es im Netz: 
https://sourceforge.net/projects/dynamixelforarduino/files/?source=navbar
Habe mir die Befehlssequenzen dieser Lib testweise über UART ausgeben 
lassen, diese dann kopiert und dann mit meinem funktionierenden 
USB->RS485-Konverter an den Servo geschickt - funktioniert super!
In der Bibliothek müssen lediglich einige Enable-Zeiten angepasst werden 
(Weil ich standartmäßig nicht 1Mbit als Baudrate verwende, sondern die 
erwähnten 57600Bit). Die Enable-Zeit für RE/DE wurde mit dem Oszi auch 
geprüft. Solange Daten gesendet werden ist DE auf High und geht direkt 
danach wieder auf den Low-Pegel, um Daten vom Servo zu empfangen.

Nach Aufbau der Schaltung "circuit-UART_to_RS485.jpg" lasse ich mich das 
Signal auf Osi anzeigen - herausgekommen ist "RS485-UART_to_RS485.jpg" 
das sieht doch recht vernünftig aus... ist aber natürlich mit dem 
"RS485-USB_to_RS485.jpg" nicht identisch. Jedenfalls funktioniert die 
Kommunikation mit dem Arduino -> RX24F nicht. Was ist an dem Durchlauf 
mit dem Arduino falsch? Mache ich einen groben Fehler? Kann mir ein 
Experte die Ursache der Unterschiedlichen RS485-Signale erläutern?


Ich danke jetzt schon vielmals!

von rs485 (Gast)


Lesenswert?

RS485-USB_to_RS485.jpg

Bei diesem Bild sieht es nach einem Schluß zwischen dem Anschluß 1 
(blau) und GND aus. Deshalb das asymmetrische Signal.

RS485-UART_to_RS485.jpg

Wenn 1 und 2 gleich wie im ersten Versuch angeschlossen sind, so ist das 
Signal invertiert zum ersten. Das gibt natürlich keine vernünftige 
Datenübertragung.

von Felix K. (felix133711)


Lesenswert?

rs485 schrieb:
> RS485-USB_to_RS485.jpg
>
> Bei diesem Bild sieht es nach einem Schluß zwischen dem Anschluß 1
> (blau) und GND aus. Deshalb das asymmetrische Signal.


Ist das denn normal? Wieso funktioniert die Ansteuerung trotzdem?

von rs485 (Gast)


Lesenswert?

> Ist das denn normal? Wieso funktioniert die Ansteuerung trotzdem?

RS422 oder RS485 funktionieren durch Erkennung des Differenzpegels 
zwischen A und B oder 1 und 2 oder x und y, wie immer sie genannt 
werden.
Bei einem Schluß nach GND entstehen in den seltensten Fällen 0 Volt. Auf 
Deinem Plott auch nicht. Je nach Empfänger IC kann es bei solch einem 
Kurzschluß einer Leitung gegen GND noch funktionieren.

Kümmer Dich lieber um die verdrehten Leitungen oder die invertierte 
Ansteuerung des Treibers im 1. Plott. Da liegt der Fehler.

Nebenbei den MAX485 hast Du falsch gezeichnet. Der Eingang muß /R/E 
(kann man hier nicht besser schreiben) heißen, sonst würde die Schaltung 
gar nicht funktionieren.

von Felix K. (felix133711)


Lesenswert?

> Kümmer Dich lieber um die verdrehten Leitungen oder die invertierte
> Ansteuerung des Treibers im 1. Plott. Da liegt der Fehler.

Also einfach die Leitungen tauschen?


Wie verhält es sich eigentlich mit der EN-Leitung - solange diese HIGH 
ist kann der Empfänger lesen bzw. ließt die übertragenen Daten. Woher 
weiß der Empfänger, das er wieder antworten darf?
Ist bei einem Empfänger (in diesem Fall) einfach ein DELAY hinterlegt?

von rs485 (Gast)


Lesenswert?

Was ist bei Dir die "EN"-Leitung ?

/R/E ?


Da bei rs485 nur immer ein Teilnehmer am Bus senden darf, kann es kein 
delay oder sonstiges geben. Es sei denn es gibt nur einen Master und 
einen Slave, dann ist aber rs485 nicht die richtge Wahl, besser wäre da 
rs422.

Im Übertragungsprotokoll, in den Telegrammen, die ausgetauscht werden, 
ist enthalten, wer senden darf. Normal natürlich der Master, der kann 
aber Daten abfragen und dem Slave das Senden erlauben. Der schaltet dann 
driver enable, der Master receive enable und schon wird vom Slave an den 
Master gesendet. Ist die Übertragung beendet, so schaltert der Slave 
wieder auf receive enable und hört die Leitung ab.

Das wars im Groben, Details sind wie immer etwas komplizierter. Aber 
nicht unlösbar.

von Felix K. (felix133711)


Lesenswert?

Danke für Deine Erklärung!
Ja, Meine Erste Wahl war RS485 auch nicht... leider MUSS ich es nutzen.

Nochmal die blöde Frage: Ich soll also einfach nur A mit B tauschen?

von bing bing bing (Gast)


Lesenswert?

Felix K. schrieb:
> Nochmal die blöde Frage: Ich soll also einfach nur A mit B tauschen?

zumindest kannst du damit nichts kaputt machen.

von Felix K. (felix133711)


Lesenswert?

Leider hat auch das tauschen der Leitungen nicht den gewünschten Erfolg 
gebracht. Hat sonst noch jemand eine Idee?

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.