PCA9685-Controller

image

Overview

Driving servo motors with the Arduino Servo library is pretty easy, but each one consumes a precious pin - not to mention some Arduino processing power.

The Adafruit 16-Channel 12-bit PWM/Servo Driver will drive up to 16 servos over I2C with only 2 pins.

The on-board PWM controller will drive all 16 channels simultaneously with no additional Arduino processing overhead.

What's more, you can chain up to 62 of them to control up to 992 servos - all with the same 2 pins!

The Adafruit PWM/Servo Driver is the perfect solution for any project that requires a lot of servos.

Pinouts

image

There are two sets of control input pins on either side. Both sides of the pins are identical! Use whichever side you like,

you can also easily chain by connecting up two side-by-side

Power Pins

GND - This is the power and signal ground pin, must be connected VCC - This is the logic power pin, connect this to the logic level you want to use for the PCA9685 output, should be 3 - 5V max! It's also used for the 10K pullups on SCL/SDA so unless you have your own pullups, have it match the microcontroller's logic level too! V+ - This is an optional power pin that will supply distributed power to the servos. If you are not using for servos you can leave disconnected. It is not used at all by the chip. You can also inject power from the 2-pin terminal block at the top of the board. You should provide 5-6VDC if you are using servos. If you have to, you can go higher to 12VDC, but if you mess up and connect VCC to V+ you could damage your board!

Control Pins

SCL - I2C clock pin, connect to your microcontrollers I2C clock line. Can use 3V or 5V logic, and has a weak pullup to VCC SDA - I2C data pin, connect to your microcontrollers I2C data line. Can use 3V or 5V logic, and has a weak pullup to VCC OE - Output enable. Can be used to quickly disable all outputs. When this pin is low all pins are enabled. When the pin is high the outputs are disabled. Pulled low by default so it's an optional pin!

Output Ports

There are 16 output ports. Each port has 3 pins: V+, GND and the PWM output. Each PWM runs completely independently but they must all have the same PWM frequency. That is, for LEDs you probably want 1.0 KHz but servos need 60 Hz - so you cannot use half for LEDs @ 1.0 KHz and half @ 60 Hz.

They're set up for servos but you can use them for LEDs! Max current per pin is 25mA.

There are 220 ohm resistors in series with all PWM Pins and the output logic is the same as VCC so keep that in mind if using LEDs.

Assembly

image

Install the Servo Headers Install 4 3x4 pin male headers into the marked positions along the edge of the board.

image

Add Headers for Control A strip of male header is included. Where you want to install headers and on what side depends a little on use: For breadboard use, install headers on the bottom of the board. For use with jumper wires, install the headers on top of the board. For use with our 6-pin cable, install the headers on top of the board. If you are chaining multiple driver boards, you will want headers on both ends.

Install Power Terminals If you are chaining multiple driver boards, you only need a power terminal on the first one.

Hooking it Up

Connecting to the Arduino The PWM/Servo Driver uses I2C so it take only 4 wires to connect to your Arduino:

"Classic" Arduino wiring: +5v -> VCC (this is power for the BREAKOUT only, NOT the servo power!) GND -> GND Analog 4 -> SDA Analog 5 -> SCL Older Mega wiring: +5v -> VCC (this is power for the BREAKOUT only, NOT the servo power!) GND -> GND Digital 20 -> SDA Digital 21 -> SCL R3 and later Arduino wiring (Uno, Mega & Leonardo): (These boards have dedicated SDA & SCL pins on the header nearest the USB connector) +5v -> VCC (this is power for the BREAKOUT only, NOT the servo power!) GND -> GND SDA -> SDA SCL -> SCL

image

Up to 16 servos can be attached to one board. If you need to control more than 16 servos, additional boards can be chained We have...

Read more »