Hey guys, here's a little something I've been working on. It's a single-axis controller/driver based around the openmoco engine. A modified version of the timelapse engine runs on it, to allow for addressable motors, and one uC per motor for more advanced capabilities. (There are versions under development in SVN of the TLE, slim, and perl drivers - look in the branches for nanomoco.)
The entire board size is 1.5"x1.5" (3.8cm x 3.8cm).
The controller/driver has an ATmega328p chip and is compatible with the Arduino IDE - you can upload sketches using the TTL serial interface, or burn them directly with an ISP header. However, for long multi-node networks of devices, the board has built in RS-485 using the standard Arduino hardware serial libraries. (Well, you have to control the driver enable line when writing, but a simple wrapper function takes care of this.) A simple jumper will disable the RS-485 network to allow normal use of the TTL serial lines. You can use either type of communication with a computer using one of several inexpensive USB adapter cables.
Also on board is an A4983 bi-polar chopping stepper driver from Allegro. The CPU has control over the step, dir, each microstep, and enable lines on the driver. In theory, one could go up to 2A/coil but that would be unrealistic with a board this small, unless one had extensive cooling capabilities. Max use would be recommended at 1A/coil. Voltage input range is 8-16V, and an on-board regulator is provided for 5V needed to run the uC.
With the RS-485 network you can use as few as two wires (A+B) to communicate over several meters. Each node is fail-safe terminated for 16 node network over short runs of cable (a couple of meters), or 8 nodes at longer distances (several meters). The SN75176A buffer is used on each node. Or, some of the GPIO pins have been labeled specifically for interconnects between boards. These are designed to be shared real-time control lines for the devices to trigger actions among themselves during the execution of their programs. RJ-45 cabling will work well in a daisy-chain fashion between the nodes.
For camera control, there are two opto-isolated outputs, but I may consider adding another OK or two to make them switchable ins/outs via software.
There are 5 GPIO pins generally, or 8 if you don't use certain functions of the board, like the opto-isolated outputs or ISP programming. Two of these are connected hardware interrupt lines, and thus can be using for interrupt-driven signaling between nodes, or for encoder input for more accurate stepper control.
There are also pins marked to monitor the status of the exposure output (one of the isolated outs) and the driver enable line. The exposure watching line is from a transistor-switched control, and therefore can both drive the OK at correct current and a bright LED without damaging the 328's output pin. One input is conveniently placed next to a GND pin to allow for use as an (non-interrupt-driven) input. There are additional 12V and GND pins as well.
Everything has tested out well in this prototype, except for some resistor selection issues and a few bad routes. 0402-sized components make it a challenge to solder by hand, and is best reflowed in skillet or oven. I'm going to build another prototype soon correcting some of the component issues, a minor change to header arrangement, and adding some LEDs to the board to see status.
Any comments or feedback are much appreciated!