One QuadServo board being used to control 3 custom servo motors

Hardware

For a robotics project I needed a way of controlling at least 12 motors with analogue feedback to turn then in to servo-motors. I needed a separate board for each of the 4 ‘legs’ of the robot which have 3 motors each.

I designed a small PCB (36mm x 33mm) around the Atmel ATXMega32 and 2 x TB6612FNG dual motor drivers. This allows each board to fully control 4 x DC motors and with analogue feedback turn then into servo motors. I added access to the spare pins which were later used to control 8 x RC servos using the standard PWM servo protocol (https://en.wikipedia.org/wiki/Servo_control).

I had 8 PCB’s manufactured with PCB-POOL (https://www.pcb-pool.com/), it cost €93. They are certainly not the cheapest but the quality is excellent and I got the boards in a week.

Hardware features

ATXMega32 @ 32MHZ

USB for programming or debug UART

ISP connector for programming and debugging

2 x dual DC motor drivers

2.5v reference for analogue feed back



Design

PCB was designed in Eagle, it fits with the free version limitation.

Software

The software is written in C using Atmel Studio. The diagram above shows a simple representation: Commands come in through the UART and are buffered in a fifo, the main loop just looks into the fifo and decodes the commands as they come in. The DC servo motor control is done in a timer interrupt, it reads the ADC and performs a PID control of the 4 motors. Another timer is used to generate the RC servo outputs.

Software features

PID control of 4 x DC motors with analogue feedback

Control of 8 x RC servos on the spare 8 output

..or use spare I/O for GPIO control

Use USB as debug or comms serial port



Files

Hardware and software files are here:

https://github.com/emileb/QuadServo