Sunday, January 16, 2005

How do you carry signals and power in a multi-plane robot chassis?

I'm converting Cylon over from a simple single-level robot to a multiple level robot, as stated in a previous entry. I'm doing this to give me more room to mount sensors, get more distance between sensors and logic (to help deal with electromagnetic interference), and to help protect the components better from damage.

This introduces a new problem though. How do I carry signals between levels? I need to carry power and various IO signals like USB, I2C, RS-232, PWM, etc. I could just run a new cable between levels for each signal -- if I need to carry USB from the motherboard (logic level) down to the Evolution ER-1 controller (drivetrain level), just drop a USB cable through the polycarbonate via drilling a hole. But now I need to carry an RS-232 cable from the motherboard to the Brainstem (sensor level), etc.

In looking at all the various types of IO signals I need to carry a pattern emerges. All of the ones I'm currently using are Gnd/+5V/Signal 1/Signal 2 or just Gnd/+5V/Signal. For instance TTL RS-232 (as used to control the Brainstem) is Gnd/+5V/TX/RX. USB is Gnd/+5V/Diff1/Diff2. PWM is Gnd/+5V/PWM. So, what if I could use a ribbon cable to carry any of these types of signals? Alright, this is the challenge I've set out to solve, and here's a CAD drawing of my first attempt:

The concept is simple -- use a 26 pin ribbon cable to carry Gnd, +5v, and 12 signal pairs. Supplement this with a Molex 0.156" three prong connector to carry heavy current loads where needed (from say batteries to PC power converter). Create a PCB that breaks the signals out from the ribbon cable into 12 sets of Gnd/+5v/Sig1/Sig2 that are connected to 4 x 0.100" header pins so that you have a standard connection to the IO board. And, uh, don't worry about interference for now since the distances traveled are short and, well, you have to start somewhere :-)

A short order from ExpressPCB.Com later, and you have three PCBs, each of which contains two of these boards (they have to be cut apart, I use a Dremel with a Carbide Cutting Wheel) for a total of six PCBs ready to build for $59 total. A few parts from Jameco, and some soldering (about 15 minutes or so) and voila:

Note: There are two sets of holes for a USB-A header that attaches to the IO1 lines. I couldn't tell from documentation which side was ground and which side was +5v, so I ordered a board with both configurations. After a little experimentation, I'll update the board to have only one set of holes with the proper power orientation. If you'd like to play with the PCB now, download the PCB software from ExpressPCB.Com and load this file.

- jcb

I've received some feedback in email from Larry Barello, a gent who helps out quite a bit at the Seattle Robotics Society. He recommends that I add a supply capacitor and perhaps even a power regulator to each board to minimize interference over the longer wires that a bus like this implies. Since I already have my boards in hand, I'm going to give them a shot as is, but be forewarned to those of you thinking of ordering a couple of your own that you may want to alter the design per his feedback.

- jcb