A: How to interface UART servo? (LX-224HV)
Question How can Rpi4B talk to duplex BUS UART servo LX-224HV? Answer Part B – Rpi4B UART to LX-224HV Simplex Serial Ciruit 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 …Adrian Maire13.2kHello @tlfong01, thanks you for your great research 🙂 Looking at your oscilloscope output, it does not resemble to any of the message that I have in the documentation. My initial conclusion is that the protocol explained is either wrong or has been significantly changed. It would be interesting to have more samples of communication to reverse-engineer the protocol. The on of your picture is probably about querying the temperature/voltage or position. tlfong013977Ah, I see. But I am not surprised, because I am using the Win10 Bus Servo Terminal GUI command to turn the motor non stop so I can easily us a scope to display something. There are other things that cause trouble: (1) I am using BusLink version 2.6, but I read the AliExpress and Amazon are selling old versions. So there might be outdated commands. The other thing is that I found HiWonder keeps saying that they cannot help users to develop software, because HiWonder is asking LeWanSoul to develop the LeWanSoul simplex uart servo protocol. So LeWanSoul might not the have motor turning commands.Ah, supper time, so see you late this evening or tomorrow. Cheers. Adrian MaireIn your circuit, I suggest you to add the pull-up resistor and also some 0.5k in-serie resistor between the bus and the servo. This will avoid any error to burn to quickly your devices. tlfong013977Ah that is a good advice I carelessly forgot . I usually use 330R or 470R series resistor to limit the motor current. I am also using a very small 220VAc to 12VDC 1A (yes, 1A only) PSU then step down to LM2596 12V to 5V to supply the LX-224. So I think LX-224 should at most take 1A or a bit more, hopefully no to fry anything. And also that is why I am using the less expensive servo, not the most expensive one, just in case, … Cheers Adrian MaireI created this room (chat.stackexchange.com/rooms/112557/lx-224hv-uart-interface) so we don’t load this Q&A page too much with unrelated/unfinished content. At the end we can add the working result here just for future users. tlfong013977Thu 10:38Ah, a very good idea. Now I can be more casual thinking aloud, brainstorming crazy ideas that often later turned out wrong, because I am now trying out things in the area I have no experience at all. I only heard about the idea of “simplex” when playing with walkie talkie, and I never heard of the term UART/Bus Servo (As I confessed, all my life I have been playing only with toy PWM servos TowerPro MG995/6 and SG90) . 1 hour later… tlfong013977Thu 11:55update 2020sep03hkt1155Now I am assenbing a TXS0102 for experimenting with the LX-224HV simplex circuit. I actually have a couple of already assembled TXS/TXB01 02/03/06/08 in hand, but I want a semi permanent test bench version to keep a record.
As usual, comments are counter suggestions are always welcome, especially before I fry something. Ah, you remind me one good thing about chatting in the chat room is that I can easy insert pictures. 1 day later… Adrian Maire13.2kFri 17:02To be honest, it is also the first time for me playing with the UART servo. So experimenting too.Beautiful PCB! Is it a customized PCB that you designed/ordered?On my side, I still have to try reproduce the signal of your oscilloscope and see if the servo is going to answer or not. Also waiting for the little controller, but this will take some time. 5 hours later… tlfong013977Fri 22:24(1) HiWonder seems to have a 2020 cheaper model LX-20S. Did you see this when you ordered yours last time? This model has only one axis, but I think it is more affordable to fry, or for a project with many servos.The TXS0102 module is from a TaoBao shop. I remember that they delayed my small order of 20 pieces, because they need to make large quantities for Singapore. Singapore has a reputation of making high quality products (sometimes military grade). So I think they require good quality TXS0102 too. Before that I tried different cheap versions of TXS0102/04/06/08 but found them problematic. So this time I am wiring a new one on bread board to do a more rigorous test.I am thinking of testing LX-224 UART commands this weekend. I think I don’t need to use Rpi python. A lazy way is to use Win10 RealTerm terminal emulator to send and receive commands to LX-224. I hjave been searching for an updated version of LeWanSoul command list. But I could not find one. This might be bad news, becasue they might have abandoned the project during LX-16.Therefore not more updated command list. If my test this weekend is smooth, perhaps I can use python to create new commands such as turning 306 degrees. Ah bed time. See you over the weekend. Cheers. 18 hours later… Adrian Maire13.2kSat 16:26Hello 🙂
I have been making some tests and I have good news.Reading and testing about UART, it transmit 10bits for each (8bit) byte of data: First it transmit a “10” and then the data.
Also, it transmit first the less significant bits and after the most.
Example: x05 will be transmitted as 10-10100000With this in mind, the screenshot of your oscilloscope transmit following to the servo:
10-10101010 10-10101010 10-10000000 10-11000000 10-11011000 10-00000111
x55 x55 x01 x03 x1B xE0
0x55 0x55 (initial tag)
0x01: Servo ID (1)
0x03: Size of the data (by the doc, this includes from the size to the check-sum)
0x1B: Read Input voltage request
0xE0: checksum = ~(id+length+params) = ~(0x01+0x03+0x1B) = ~(0x1F) = 0xE0Then I tried to send those values through the RaspberryPi, and the oscilloscope give me the exact signal you shown.
However the servo is still not responding, so I am wondering the following issues:
– The servo has burn, due to any mistake during the test.
– The servo expect 12V signal (HV version). I expect the signal to be 5V even if the input voltage is 12V. Trying 12V bus imply burning the servo in case it expect 5V.
– Any other error in the electronic (?) 11 hours later… Adrian Maire13.2kyst 4:07When you have a moment, could I ask you try to connect higher voltage to the board?
1) Disconnect the servo (as it is not HV)
2) Connect a higher source to the board, e.g. 8V should not be a risk for the board
3) Send some signal (rotate or what-ever).
4) See if the signal is 5V or 8V? 19 hours later… tlfong013977yst 22:39Ah, the following three things you found out is very important, should save me a lot of time doing trials and errors: (1) Reading and testing about UART, it transmit 10bits for each (8bit) byte of data: (2) First it transmit a “10” and then the data.
(3) Also, it transmit first the less significant bits and after the most. But I don’t seem to find this protocol in the LewanSoul command user guide. I need to read the guide one more time and update my summary shown below。
I am also considering the test command strings I should try use first. I found you use of the broadcast address 0xfe a bit confusing. I need to think again to see 0xfe is a good address to test. I am studying the following to get to know more.
I think the simplest commands I might try first is 0x26, 0x27, and 0x28, (1) Read Temperature, (2) Read Vcc, and (3) Read Position (I can move the servo by hand and see if Position changes).For your suggestion on testing the offline tester board, let me make some comments first.(1) The BusLinker V2.4 is for old version LX-16A, so it says Vin = 6V ~ 8.4V, so there should be no problem if I set Vin to 8V and send a rotate commend. I will do that later, but as you have guessed, the logic output should be 5V. Anyway, I will try that and let you know if your guess if correct.You said my screen capture is “x55 x55 x01 x03 x1B xE0”. I need to read the command table to see what this means, but I will also try to use my terminal emulator Win10 RealTerm, or RpiCuteCom, or Rpi python to send this string, and also your decoded command “10-10101010 10-10101010 10-10000000 10-11000000 10-11011000 10-00000111” and see what happens. I will also try read temperature, Vin, and Pos as I suggested earlier.Ah, bed time. Call it a day. See you tomorrow. Cheers.You said perhaps the following: “The servo expect 12V signal (HV version)”. I think this is very unlikely, but I will, as you suggest, try Vin = 8V and see what happens. Anyway, will carry on tomorrow. Cheers. Adrian Maireyst 23:35I need to read the command table to see what this means,
I did that already, just read my previous comment, it explains each bytes 🙂 14 hours later… tlfong01397713:10Yes, I saw that you explained each byes of my bus link rotate motor screen capture. But I don’t understand why my “Rotate Motor” string becomes your “Read Voltage Input Request”?
Leave a Reply