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!
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.
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?
> 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.
> 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?
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.
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?
Felix K. schrieb: > Nochmal die blöde Frage: Ich soll also einfach nur A mit B tauschen? zumindest kannst du damit nichts kaputt machen.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.