Wie wird ein UART-Servo angeschlossen? (LX-224HV)

Aug 29 2020

Ich versuche, einen RaspberryPi (2B) GPIO-UART mit diesem seriellen Servo (Hiwonder LX-224HV) zu verbinden, als ersten Schritt, bevor ich den Raspberry durch eine ARM-MCU (STM32F407ZE auf benutzerdefinierte Schaltung) schalte.

Das Servo soll einem einfachen Protokoll folgen, aber ich kann keine Antwort vom Servo verwalten (weder Bewegung noch UART-Antwort).

Die Dokumentation, die ich über das Servo gefunden habe, ist begrenzt (Beachten Sie, dass dies ein anderes Servomodell ist, aber laut Hersteller ist ihr Controller mit beiden kompatibel, daher gehe ich von einer gewissen Kompatibilität aus):

https://www.dropbox.com/sh/b3v81sb9nwir16q/AADXOwhdw7KLq5t5UM8ND3kwa/LX-15D%20Bus%20Servo?dl=0&subfolder_nav_tracking=1

Testsignal:

Zu Testzwecken sende ich die folgende Nachricht über die Befehlszeile:

#Some ports initialization here
echo "0" > /sys/class/gpio/gpio24/value # disable rx
echo "1" > /sys/class/gpio/gpio23/value # enable dx
echo -n -e "\x55\x55\xfe\x04\x0e\x01\xee" > /dev/ttyAMA0; sleep 0.001;
echo "0" > /sys/class/gpio/gpio23/value # enable dx
echo "1" > /sys/class/gpio/gpio24/value # disable rx

Die Nachricht besteht aus:

  • 0x55 0x55: Sendestart-Tag.
  • 0xFE: ID des Zielservos, 254 bedeutet Broadcast
  • 0x04: Länge des Blocks, einschließlich dieser Länge bis zur abschließenden Prüfsumme
  • 0x0E: 14 ist Read_ID und fragt den Servo nach seiner ID.
  • 0x01: Standard-ID (nicht verwendet?)
  • 0xEE: Prüfsumme ~(254+4+14+1) = ~(17) = 238

Die Schaltung ist wie folgt eingestellt:

Simulieren Sie diese Schaltung – Mit CircuitLab erstellter Schaltplan

Beachten Sie, dass ich einen Widerstand hinzugefügt habe, um das Verbrennen von Komponenten im Falle eines Kurzschlusses zu vermeiden. Er ermöglicht auch, Variationen im Signal zu sehen, wenn das Servo versucht, Daten zu senden.

Der Anschluss an das Servo erfolgt wie folgt:

  • 0-5V zum Signal, meistens hochohmig.
  • 12V an VDD
  • 0V gegen GND

Das Steckbrett sieht so aus:

Das Ergebnissignal:

Das resultierende Signal am Signalpin des Servomotors sieht wie folgt aus:

Danach gibt es kein signifikantes Signal, was ich so interpretiere, dass das Servo aus irgendeinem Grund nicht reagiert.

Die Frage:

Gibt es irgendein offensichtlich fehlendes Element in diesem Ansatz? oder letztendlich, wie man sich mit diesem Servo verbindet?

I found many others servos with similar interface, so I believe this could help further users..

Antworten

1 AdrianMaire Oct 05 2020 at 00:46

After some time researching the topic together @tlfong01 and me(@adrian_maire), we managed to get the servo working through the Raspberry Pi (from now: RPI) without the need of the driver board.

For this purpose, several problems has been solved:

  1. Converting voltage level from 3.3V (RPI) to 5V (servo bus)
  2. Implementing the different UART messages for the RPI
  3. Converting full-duplex UART to half-duplex UART

Converting voltage level from 3.3V to 5V

Even if this could be a sub-optimal solution, considering that the 74HC126D allows level conversion, two of them has been used to manage both problems: enabling and disabling of Tx/Rx and level conversion at the same time.

simulate this circuit – Schematic created using CircuitLab

Implementing the different UART messages for the RPI

A project has been created (GPL3) to any of you to use it.

https://github.com/Escain/HiwonderRPI

(The code is unfortunately too large to include here.)

Converting full-duplex UART to half-duplex UART

For the conversion of full-duplex to half-duplex UART, the servo relay on the enabling and disabling of the full-duplex TX (transmission) and RX (reception) line:

  • When RPI transmit, it enable TX and disable RX
  • When RPI don't transmit, it disable TX and enable RX so the servo can answer.

Der Servo beginnt mit der Beantwortung der UART-Anforderung etwa 0,1 ms nach dem Empfang, dies liegt unter der OS-Planungszeit eines modernen Betriebssystems, einschließlich Raspian. Infolgedessen war der erste Versuch, en-TX und en-RX per Software anzusteuern, völlig erfolglos.

Um dieses Problem zu lösen, wird der en-TX durch Hardware implementiert, durch einen retriggernden Monostate-555-Timer von etwa 0,1 ms. Das en-RX ist nur die Negation von en-TX.

Simulieren Sie diese Schaltung

Alle miteinander verbinden:

  1. Tx ist mit dem RPI GPIO 14 verbunden
  2. Rx ist mit dem RPI GPIO 15 verbunden
  3. enTx beider Kreise sind miteinander verbunden
  4. Servo S wird mit dem Signal des Servos verbunden
  5. Gnd und VCC (3,3 V, 5 V und 9 V) sind mit den Schaltkreisen und dem Servo verbunden. (Dieses Servo ist HV und unterstützt daher bis zu 12 V, aber andere Hiwonver-Servos können 12 V NICHT verwalten, seien Sie vorsichtig).

tlfong01 Sep 02 2020 at 11:32

Frage

Wie kann Rpi4B mit dem Duplex-BUS-UART-Servo LX-224HV kommunizieren?


Antworten

Teil B - Rpi4B UART zu LX-224HV Simplex Serial Circuit Design V0.1

Next step is to let Rpi to send commands to LX-224 and see if is replies back anything. The OP reports nothing comes back. So I will repeat his commands and see if I have better luck.

Das Op sendet die folgenden Befehle. Ich denke, ich lese besser das Servobefehlshandbuch, um sicherzustellen, dass die Befehle in Ordnung sind und das Servo nicht braten.

0x55 0x55: transmission start tag.

0xFE: Id of the target servo, 254 means broadcast

0x04: Length of the block, including this length to ending checksum

0x0E: 14 is Read_ID, asking the servo for it ID.

0x01: default Id (not used?)

0xEE: Checksum ~(254+4+14+1) = ~(17) = 238

Teil A – LX224HX Fehlerbehebung mit BusLink V2.4

Ich verwende den HiWonder Bus Linker V2.4, um die Sendeempfangssignale anzuzeigen, wenn das LX-224 UART/Bus-Servo auf Motormodus eingestellt ist und sich kontinuierlich mit etwa 700 U / min bewegt.






Verweise

(1) LewanSoul-Bus-Servo-Kommunikationsprotokoll

/ weitermachen, ...


Anhänge

Anhang A - Der Testaufbau des OP


Anhang B - HiWonder LX-224 BusServoController-Setup


Anhang C - HiWonder LX-224 BusLink V2.4 Setup



Anhang D - TSX0104 Level Shifter zur Implementierung der bidirektionalen LX224-Simplex-UART/BUS-Servosteuerung

/ weitermachen, ...


Noch nicht abgeschlossene Antwort. Bleiben Sie dran, ...