Using 22 servos, connected from channels 0-21, and issuing a group command, there is a lag between the first servo’s and the last servo’s movement using the SSC-32. The command is supposed to make each servo move begin and end at the same time. The first channels begin their moves much earlier than the last channels. This looks like a cascade as each servo begins slightly after the channel before it has begun its own move.
I am powering the logic and the servos separately so there should be enough power.
Just sending simple group move commands, i.e. #0p1800#1p1800… #22p1800, etc. I usually try and send them to the same position, from the same position, and look at when they start and finish motion. Problems occur when I’m sending group move commands for groups larger than about 11 servos at once. I’ve tried sending the commands with LynxTerm and Labview, and I get the same result.
Nope, everything clear in this respect.
Using an AC/DC adapter that provides about 8.3 VDC to the logic power. I have the VS = VL jumper removed and I’m powering the servos separately using a parallel circuit connected to a Kepco box power supply which provides about 6 VDC to each servo (all voltages have been checked using a meter).
Hope this gives you a better idea of what’s happening, thanks again for the help!
Are you using a T or S modifier, please complete the thought without an etc. Etc makes me assume you are doing something you may not be doing. Can you post a video? This is like fall down simple. It’s the CORE of what sets the SSC-32 apart from lesser controllers. Besides power problems there has never been a single proven report of a problem of this sort. Can you post an image of the wiring? You are dismissing the potential power problems pretty quickly. I would like to verify this myself.
Do you have a CR after every command? Like this:
#0P1800 CR #1P1800 CR
or do you have one CR command at the end:
#0P1800 #1P1800 CR
I think if you have a CR after every command, then you may get a cascade effect you were talking about. If you put a single CR at the end, then the SSC-32 should move all the servos at the same time.
But in order to make it a group move you would add a T or S modifier.
To prove there’s nothing crazy, an example command I have sent is:
#0p1600#1p1600#2p1600#3p1600#4p1600#5p1600#6p1600#7p1600#8p1600#9p1600#10p1600#11p1600#12p1600#13p1600#14p1600#15p1600#16p1600#17p1600#18p1600#19p1600#20p1600#21p1600 t 100
So I am using the time modifier set to 100 ms. I have also tried the same command without the time modifier at all.
The other question I have is how fast can the card receive commands? (i.e. how many of these commands can I send a second to the SSC-32 and expect it to be able to keep up?)
I forgot to put it in the last post, but there is after the entire command, not between each channel.
That is:
#0p1600#1p1600#2p1600#3p1600#4p1600#5p1600#6p1600#7p1600#8p1600#9p1600#10p1600#11p1600#12p1600#13p1600#14p1600#15p1600#16p1600#17p1600#18p1600#19p1600#20p1600#21p1600 t 100
Well, 1/10th of a second is a little tight to expect the servos to comply. Perhaps you could increase the T value to 1000 (one second) to see them all start and stop at the same time. I think your servos may not be fast enough to do what you are asking them to do. You can send commands to the SSC-32 at 115.2kbaud in rapid succession and it will not miss a command. I’m not good with detailing the time it takes to send ascii at a given baud rate, but you may be missing the point. The SSC-32 does not act on any command until it receives the CR. It then acts upon the entire command at once. There is NO sequential processing of commands.
Sending the command without the T modifier is telling the servos to move as fast as they physically can to the destination position. In this case the SSC-32 provides no move synchronization whatsoever.
Also keep in mind that you can’t use the S or T commands if that is the first action you are doing with the SSC-32. The SSC-32 needs to know where all the servos are in order to calculate the speed of each servo. When you first turn the SSC-32 on, it doesn’t know where any servos are, so you need to initialize first (all=1500 or something like.)
115.2K baud rate should give you around 10K byte rate. Also, the USART in the PC (or whatever) will limit the max char rate; the TX ready bit will prevent you from over-running the TX buffer. And you have an overrun flag if you did overrun the xmit rate.
The application and OS might further limit your xmit speed.
I just bumped in to this topic and the first thing that came up to my mind was power. How many amps can your power supply give? I’ve got the feeling that you’re power supply can’t deliver enough current to give all servo’s the starting boost. This shouldn’t be to hard to test.
You’re saying that there is a small delay from one servo to the next starting with the one on ch #0. This means that the biggest delay is between the first and last channel. Can you remove all servos and connect only channel #0 and channel #22 (last?). Then run the test again. If the start and stop at the same time, you probably need a bigger power supply. If not… well lets test this first
I have been following this topic and my first thought was power as well.
I know that this is a long shot, but I thought I would throw it out as well. The other thing I wondered was how much of a delay. Are you saying that it is something you can see by the naked eye or by some recording? If it is by some high speed recording, then it might be by design.
I believe that at most 4 servos can start at the same instant as the 32 servos are broken down to 4 banks of 8 servos on the SSC-32 and only one servo in a bank can be controlled at once. This is probably a good thing as this probably spreads the startup surge out. But we are probably talking microseconds here. I know that this is probably a red herring, but…
Yeah I was going to mention that, but didn’t want to muddy up the water as the delays are imperceptible to a human. Here is what Mike Dvorsky posted on the subject of delays.
For the fun of it I used my spare SSC-32 and plugged it into my PC and used the SSC terminal program to type in the command above, except I did put mine as T500… I also hooked up my 8 channel logic analyzer to some of the IO pins on the SSC-32 (0,1,2,4,8,16,20,21) and did a capture as I hit the CR to process the above command. The result was: http://i416.photobucket.com/albums/pp245/Kurts_Robots/SSCDelay.png
Disregard the channel lables, that is for when I am working on SPI type communications for the PS2…
From this it looks like pin 0(channel 1) starts about 5.2ms before pin 21 (channel 8 ).