A tale of two controllers

When I ordered the mechanics of the hexapod from Lynxmotion I knew I wanted a fairly powerful microcontroller that could handle at least 18 servos. The servopod(tm) from New Micros Inc looked very interesting - it can control up to 26 servos, has 22 GPIO lines, 2 x 8-channel 12-bit A/D converters.

(JPG)
ServoPod(tm)
Photo (c) New Micros Inc

Another intriguing aspect of the ServoPod was the fact that it’s native language is a dialect of Forth designed to handle parallelism. It’d been a long time since I’d written anything in Forth (not since my 8-bit home computer days in the mid to late 1980s in fact) and I hadn’t planned to start again but IsoMax sounded like it could be a good way to handle tasks such as getting the robot to move and still be able to sense it’s environment without requiring a processor capable of running multiple threads or rolling my own pseudo threaded controller code.

However, when the ServoPod arrived there was disappointment in store. Lynxmotion had recommened their SSC-32 controller to me but I wanted the I/O capabilties of the ServoPod and so I went against their advice. Firstly, the documentation was very incomplete and at least half the sections didn’t appear to have any content. Instead it seemed to be expected to use the forums to work out how to use the thing for any real tasks. When I came to revisit the project after over a year’s hiatus the documentation had improved but the information revealed only served to deepen my dissatisfaction. For example:

- Why, for a device called "ServoPod" was it necessary to run in "slow" mode in order to control servos reliably? One reason for buying the controller was to have a reasonably powerful processor so why have throw that advantage away in order to control servos? Surely, given the name of the controller it would have been optimised for controlling servos without having to run at half speed? To be fair there were hints outside the documentation that it might be possible to control servos at full speed, but I didn’t see a definitive answer.
- Why was there not a decent tutorial on actually connecting and controlling a servo in the manual without having to trawl through the forums?
- There were comments (in the forums I think) about having to attach separate power supplies to actually power the servos, but again there was a lack of documentation.

I’m sure I could have progressed further but I didn’t have a lot of spare time and I just wasn’t feeling in the mood to mess about with something that had already disappointed me. I decided instead to try the SSC-32

(JPG)
SSC-32 Servo controller
Photo (c) Lynxmotion

The SSC-32 is a dedicated servo controller and so it doesn’t have the I/O options of the ServoPod (it only has 4 inputs), but it does have some nice features:
- ability to control up to 32 servos
- each bank of 16 servos can either share a single power supply or have one each in addition to a separate supply for the logic (this is also true of the ServoPod)
- dead easy to control via a serial port
- ability to handle group moves

If possible I’d rather have a single powerful processor running most of the code so having a relatively dumb controller that just controls the servos is not such a bad prospect. I still need to sort out something to handle input, but I might end up using the Servopod for that. I’ve also just got my hands on an arduino so that’s a possible candidate, but I’ll likely use that for experimenting with other stuff.