A while back I wrote about a project called OpenServo which basically replaces the guts of normal RC servos with higher performance electronics. I thought this project was really cool, mainly because you could pump a series of position values to the servo and it would fit a Bezier curve to the points for you. The main problem was that the project was setup for analog feedback only - encoders were not supported - which means it would be hard to adapt this project to normal servo motors. It turns out that adding encoder support would be hard because the microcontroller (the ubiquitous ATmega168) was basically tapped in terms of processing power.
I really wanted to add encoder support so that decent motion control could be added to projects for not much cash (hopefully less than $25 per board). So I have taken a first stab at a solution. I’ve picked the LS7366 to handle encoder reading duties. This chip decodes the two encoder phases and updates a 32 bit position value, which is then pumped out over an SPI bus to the ATmega168. This should be a fairly straightforward code change, but I still need to calculate or experiment to see if the SPI comms are as fast or faster than the analog reading they are replacing.
The original OpenServo uses a 50 milliohm shunt to measure motor current. I have replaced that shunt with the ACS712 hall effect current sensor. The reason for this change was two fold. The first reason is to allow currents greater than 2 amps to be measured (the power rating of the 50 mOhm resistor means only 2 amps can safely pass through the resistor). The second reason is just to improve the efficiency of the board, even if only slightly, by not burning any power in a shunt.
So anyway… above you can see my version of the OpenServo. It is almost ready to be sent for manufacturing. Updates will follow. Oh by the way, shipping was $13 from US Digital for 3 LS7366 chips… ouch.

