Pololu Micro Serial Servo Controller

The Pololu Micro Serial Servo Controller is a compact servo controller that can control up to 8 servos. Communication with the servo controller takes place over a TTL serial line. The controller is capable of controlling both continuously rotating or standard servos.

= Communication Protocol =

The communication protocol is detailed in their online guide. Please note that there are two protocol versions. Choose the one that best fits your need.

The SSC protocol in the guide is a simple and basic protocol for setting the position of each of the 8 individual servos. It requires a dedicated serial line to the controller, but is much less complex.

The Pololu serial protocol is the second protocol outlined in the users guide. This protocol is unique in that you may control several different serial and/or motor controllers over a single serial line. Each device has a unique and seperate device ID and only acts on commands addressed to it. The Pololu protocol also allows the user to set minimum, maximum, and neutral positions for each servo channel.

= Connecting to the Arduino =

Logic Power and Signals
At the bare minimum you need to connect only 3 wires to the Arduino: VIN, GND, and the Logic-Level Serial Input. These three pins are all next to each other. GND should be connected to the Arduino's Ground, VIN should be connected to the Arduino's +5V port, and the Serial Input should be connected to a Digital Output pin (Pin 4 when using the sketch below). These pins will provide logic power to the board, and allow you to communicate with it. Optionally, you can wire the Logic-Level Serial Output pin to a Digital Input (Pin 3 Below), but the Servo Controller only uses it to mirror back what it receives. That makes it a good tool for debugging your serial connection, but not much else.

DO NOT connect the RS-232 Level serial pins to the Arduino. These are for communicating directly with a computer's 9-pin serial port, which operates at RS-232 voltage levels (between 0 and 12 volts or so). The Arduino uses Logic Level, or TTL voltages in all of its communications, which is 5v for logic high, and 0v for logic low. Trying to drive the RS-232 at such low voltages is only asking for problems.

Servo Power
The Servo controller uses a separate power input for servos than it does for the logic power. Generally, it is a good idea to use a separate power source to power servos. You can hook it up to the Arduino's GND and 5v power pins in a pinch, but the Arduino's on-board 5v power regulator is only capable of safely providing about 500mA of current to external devices. One or two servos under load can quickly eat up that much current, and cause your Arduino to overheat or brown-out and reset. Using an external power source like 4 AA batteries is a good solution. When powering servos with an external source, always connect the external ground to the Arduino's ground. This prevents any signal issues or ground loops.

= Sample Arduino Code =

Pololu Protocol
The below code does not make use of the minimum and maximum position features, and only sets an absolute position for each servo. Because of this, the code may try to move a standard servo past its physical limits. Exercise care in setting values near 0 or 5000, making sure you are not trying to move the servo farther than it is capable of moving. The protocol select jumper should be OFF to use this code.

SSC Protocol
The SSC protocol is much easier to deal with, but does not provide great resolution for servo movement. The below is a sample of the simpler protocol. The protocol selection jumper should be ON for this code to work.