Let's Make Robots! | RobotShop

Elechouse 32 Channel Servo Controller Problem

Hello everybody,

I have a hexapod that I bought that came with an elechouse 32 channel servo controller.  My goal is to get this thing going with a wireless PS2 controller and a arduino mega 2560 micro controller.  But so far I can't even get the legs to move properly.

I have searched on the internet about this controller and there is not much out there.  These are the links that I have found and the resources I have.

LetsMakeRobots Forums:

https://www.robotshop.com/letsmakerobots/node/30349

Elechouse Website:

http://www.elechouse.com/elechouse/index.php?main_page=product_info&cPath=100_146&products_id=1883

The forum post that I have put here has the pdf file controller manual for more information as well.

What I have attempted:

Wiring

I hooked up with a single wire, the TX/RX pins from the mega to the servo controller TX/RX pins.

I hooked up the RX/TX with both the grounds on the servo controller to the same ground as the mega.

I hooked the ground of the servo power input to the mega ground.

I hooked up the RX/TX 5V pins to the 5V pin on the mega.

Programming

As for programming, I have a very strong programming background.  Especially in C#.  But have dabbled many times with arduino language and C++.  So I am pretty sure I have this correct and I understand whats going on with my code.  And for the most part have used the code example from the LMR forum post I linked above.  I have tried many different versions with the example code trying to get the leg to move but nothing has worked.  I can get the legs to move, but its random legs with random rotations at random times.  Especially if I touch and untouch the grounds from the mega to the ground pins of either RX/TX pins of the servo controller.

Code

void setup() 

{

  Serial1.begin(9600);

}

void loop() 

{

  move(6, 950, 500);

  move(6, 750, 500);

}

void move(int servo, int pos, int time) 

{

  Serial1.print("#");

  Serial1.print(servo);

  Serial1.print("P");

  Serial1.print(pos);

  Serial1.print("S");

  Serial1.println(time);

  

  delay(500);

 

}

This is pretty much the example code from the LMR forum post.  I have tried setting the pin modes of the megas serial 1 TX/RX pins to input and output and that did not work either.  I am pretty new to robotics and not too experienced but know that I can get this if I just get a little help.  :D

Any help is appreciated.  I am to the point that I am thinking about just not using this servo controller board that came with this hexapod and replacing it with something else.  If it comes to that, any suggestions?

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.

How are you powering this?

The 

Serial1.println(time);

should probably be

Serial1.print(time);
Serial1.print('\n');
Serial1.print('\r');

I only suggest this because maybe the order of characters is important. The arduino reference site says println sends \r \n rather than \n \r. And, the servo control board manual says the string should end in \n \r.

I believe that once I had the code working I would proably use the map() and use it to convert degree requests to uS numbers that the servo board requires. Especially if you intend to get in to something like Inverse Kinematics to move your hexapod. 

Thanks birdmun.  I will definitaly try this today after work and keep you posted on if it works or not.  I have had a feeling that it has something to do with the data Im sending the servo board. Onearm has a good question.  For the servos I am sending power to the VS and GND terminals with a power supply that supplies the proper voltage.  As for the TX/RX pins where it says 5V and GND, I am unsure as to why those are even there are why they are needed if at all.  An explanation of what the TX/RX 5V and GND pins are for would be awesome.  I have read somewhere that tieing the grounds of the arduino mega and servo board together is something that is required.  I thought that maybe that is why it wasnt working but I tried that out and it didn't matter.  I think the solution is probably what birdmun just suggested.  

I re-read/scanned the manual pdf. They don't even talk about the 5v/Gnd pins by the serial input. They were very specific about 6-12(?)v input for the chip and 4.8-Servo vmax for the servo input. Yes, you must always(?) connect all grounds together.

If you use 7+ volts to drive your arduino, you can actually use the same leads to feed the chip on the board. Doing so will make sure your grounds are tied together. When you connect the power for your servos, the ground lead will connect to the same screw terminal. That problem will then be solved. Your grounds will be tied together.

Update

Hello, I tried what you suggested birdmun any my results are great!!  I am so excited.  

I powered the chip via USB, and the servos with a 4.5V 500mA power supply.  I tied the ground pin on the mega to the GND that is inbetween the VSS and VS terminals on the servo board and it works.  Only thing I have a question about is the ground situation.  I pulled the GND pin off of the mega servering the GND connection between the mega and servo board and the servo still runs.  Why is this?  I thought that all the grounds had to be tied together?  Also, what kind of amps am I looking at pulling here max with this hexapod?

Also, my plan is to have a LIPO battery power everything.  I was gonna by a BEC to drop the voltage to the proper amount for powering the mega and servo board chip.  Is this the best route to take?

 

Thanks for all the help so far!!!

I am using Torobot servos.  They are TR213.  Wow thats a lot of amps.  I didn't think it would be so much.  How abouts are you reading amps as that thing is walking?  Are you just taking voltage drop readings and already known watt values and calculated close as possible the amps that are being pulled?  I am interested in knowing how to go about taking amp readings besides hooking up a multimeter in series as it walks.  Specially since most common DMM's can only take 10A and pulling 20A makes the DMM unsuable for taking amp readings.

As for grounds, I am powering the chip with comp. USB and the mega with COMP usb and the servo board is powered with an AC/DC power supply.  I just cut off the end of the wire and stripped it for use to power the servo board.

By the way, awesome hexapod!!

Hi, I have very simillar problem, but I have another 32 channel servo controller. I have this: http://www.aliexpress.com/store/product/32-Channel-Servo-Motor-Control-Board-For-Robot-Spide-Compatible-PS2-Controller/512161_898891483.html

I can find even less information than about that from Elechouse, so I don't know, to control it or program it. Can anyone, who knows this type, provide more information?

Thanks

I asked the seller for a manual. The seller provided a link to a manual.

https://www.dropbox.com/sh/pl68y48szt811yg/1S0ErSkC1C/USB-SSC32_Command_Formatting.pdf

Let me know if the link works.

Yes, thanks. It is all working now. Are there any xml group files with some predefined movements? It is easier to edit the working programm thant to create the whole movement from ashes.