Circuit Lake

Electronic Project and Circuit Collection

32-Channel Digital R/C Servo Controller

01/12/2010 Category: AVR, Control, Digital, FPGA, Microcontroller, Project

This project will show you how to build single digital controller to drive 32 channel R/C servo. The main component in this project is AVR ATmega8515L and Xilinx Spartan IIE FPGA. The combination between FPGA and an ATmega8515L microcontroller make this project powerful solution for robotics applications, especially multi-legged walking robot project.


Eric Gagnon, project designer, explains that an array of 32 parallel channels of 16-bit accuracy, 12-bit resolution PWM generation units were implemented inside an FPGA. An Atmel ATMega8515L was used at the heart of the system. It’s external memory bus was put to good use in interfacing with the memory-mapped array of 64 PWM registers (i.e. 32 x 16 bits) inside the FPGA. The many roles of the MCU include initializing the FPGA registers with user-configurable servo startup positions stored in the 8515L’s internal EEPROM.

Also, the 8515L runs the serial communications protocol (compatible with Mini SSC-II protocol) and updates servo positions accordingly. In addition, the 8515L performs real-time velocity control computations on all channels with configurable velocity settings. Finally, the 8515L also checks all outgoing servo commands against user-defined min/max position values. In response to an external interrupt occurring at every PWM cycle, all current servo position values are refreshed in the FPGA’s memory mapped PWM registers. This is done as a simple memory-to-memory transfer

32 Channel Servo Controller
Download Project Documentation (zip)