New SSC-32 user… moderately new to robotics/microcontrollers, but a pretty good computer background, from assembly, system programming in C, to UI stuff. The setup:
VL = 5.0V from USB
VL = VS1 (also from USB*)
Rx/Tx from a FTDI USB-serial bridge
VS1, servo 0: HiTec HS-56HB mini servo (tried 3)
The problem: On power up: solid green LED, serial communication works fine at 115kbps, even managed to upgrade the firmware to 1.06 without a problem… but when a servo command is given like “#0 P750” the servo jerks a little CCW, and stops after about 1/8". Give the command again, and the servo jerks a little more. After about 5 commands, the servo has settled at about 60deg CCW from center, and repeats of the command do nothing. “#0 P2250 T10000” give one jerk CW and stops. I have to keep repeating the command to get the servo to edge toward the endpoint. “Q” returns “.” immediately after the first and only jerk.
I know these mini/micro servos won’t move a significant amount on a single pulse. They expect a pulse train at 50Hz, constantly repeating the position until they’ve reached their destination. I thought the SSC-32 manages all this for me, so that I can give an absolute position, and even a speed or duration, and the pulse train will be generated to get it there. Wrong assumptions? Wrong “mode” or something on the controller? Or faulty controller?
I know that powering my servos off the relatively weak 5.0V USB is not ideal. I’m going to pick up a 9V tonight and try that on VL, combined with a 4cell NiCd pack for VS1… but I’m doubting this is an issue, because the controller doesn’t appear to be resetting or browning out, and it is only driving one mini servo. Still, I’ll post an update if the behavior changes with this more robust setup.
I’m guessing it’s a power problem. Running a ‘relatively’ high-current inductive load from a USB port sounds sketchy to me.
However, try putting a good-sized electrolytic cap across the power connections.
You’re correct that a single command such as “#5 P1200” should move the servo directly to the 1200 position in one shot. After giving such a command, the SSC-32 outputs a continuous pulse train until you tell it to do something else.
Each time you send a command, does the green LED blink and then stay off? It should. If it comes back on solid, then the SSC is resetting.
I had a very similar problem with my hexapod. It was indeed solved with a better power system. I initially tried to use a 5.0 v 1A wall transformer, and it did exactly what you are describing. I then tried a 6.5 v 1.5A transformer, and it was a little better, but not really workable. My current solution is the bottom half of a 7.2 V cordless drill. I just went do Home Depot and purchased the cheapest, lowest voltage drill they had, and hacked it apart with a Dremel tool. Works OK for now. I will be replacing it in the next wek or so with a LiPo power supply of my own design, but my cheap drill battery has worked well for debugging and initial construction.
Thank you saipan59 and Qwindelzorf! I came home with a 9V battery from 7-11 and hooked it up… problem solved. The 9V battery goes to VL, but when I measured the voltage at the VL=VS1 jumper, it was the full 9V. I fully expected the LM2937 to be providing 5V not only for the Atmel, but for the servos as well. So I patched VS1 over to the USB/Breadboard and gave it a whirl… worked as expected.
So right now I’m still running the 1 servo off USB, but getting the Atmel its own power supply fixed the jerkiness. I won’t be testing this rig any further until I have a separate 5V source just for VS1 & VS2. Definitely surprised at the behavior of all this though.
Something else that surprised me: When I powered the SSC-32 with 9V, my breadboard lit up… but the only thing connecting the SSC-32 to the breadboard was the TTL Rx/Tx/GND. (The breadboard is just a FTDI USB<>Serial bridge, and supporting components) Vcc<>GND on the board measured 3.5V. It wasn’t negative voltage, so I wasn’t too worried about it, but I was amazed that somehow my breadboard was being powered via the Rx/Tx, through the FTDI chip, and into Vcc/Gnd. Eh, none of the magic blue smoke got out, so I figure all’s well, right?
Thank you again for the rapid responses. My project is less AI/robotics than it is animatronic aesthetics… but I’ll be back with updates, and maybe some code contributions for accessing the EEPROM.
VS1 and VS2 are just terminals to allow connecting power to the servos. The LM2937 is only a 500mA regulator, and because it’s not on a heatsick at all we derate it to 250mA. This regulator would never be able to supply enough current for a handfull of servos, let alone 32 servos. Ther SSC-32 is properly designed, but your interpretation of how it should work is wrong.
Powering any servo from a USB port is a bad idea. Even a little bitty micro servo can draw an amp if 1) it’s under enough of a load, or 2) it’s moved very rapidly from one position to another.
This is quite common.
Let us know when you have things moving. We would love to see it! Thanks…