Keszoox
PCA9685 16-Channel 12-Bit PWM Servo Driver — I²C, Arduino, Raspberry Pi, Robot Arm
PCA9685 16-Channel 12-Bit PWM Servo Driver I²C, Arduino, Raspberry Pi, Robot Arm
Couldn't load pickup availability
PCA9685 16-Channel 12-Bit PWM Servo Driver — I²C, Arduino / Raspberry Pi
The PCA9685 module provides 16 independent PWM output channels with 12-bit resolution (4096 steps) via a single I²C interface. It offloads all PWM timing from the MCU, freeing up GPIO pins and CPU cycles. Up to 62 modules can be chained on one I²C bus (via address jumpers), enabling control of up to 992 servo channels from a single Arduino or Raspberry Pi.
Key Specifications
| Parameter | Value |
|---|---|
| Driver IC | PCA9685 (NXP) |
| PWM Channels | 16 independent |
| PWM Resolution | 12-bit (4096 steps per cycle) |
| PWM Frequency | 24Hz – 1526Hz (programmable) |
| Interface | I²C (address 0x40–0x7F, 62 addresses) |
| Logic Supply (VCC) | 3.3V – 5V DC |
| Servo Power (V+) | Separate terminal (5V–6V for servos) |
| Output Current (per channel) | 25mA (LED drive) / external driver for servos |
| Operating Temperature | −40°C to +85°C |
| Chainable Modules | Up to 62 (992 total channels) |
Why Choose PCA9685?
- 16 Channels, 2 Wires — Controls 16 servos using only SDA + SCL from the MCU
- 12-Bit Resolution — 4096 steps per PWM cycle for smooth, precise servo positioning
- Chainable — 62 modules on one bus = 992 servo channels for large robot arms
- Separate Servo Power — V+ terminal powers servos independently from logic supply
- Adafruit Library — Full Arduino and Python (Raspberry Pi) library support
Typical Applications
- Robot arm with 6–16 servo joints (Arduino/Raspberry Pi)
- Pan-tilt camera gimbal (2–3 servos)
- Hexapod robot leg control (18 servos)
- RC vehicle steering and throttle servo control
- 16-channel LED PWM dimmer (R/G/B LED arrays)
- Animatronic face and puppet control
Arduino Library & Setup
Install Adafruit PWM Servo Driver Library. Connect SDA→A4, SCL→A5, VCC→3.3V/5V, GND→GND. Power servos via V+ terminal (separate 5V/6V supply).pwm.begin(); pwm.setPWMFreq(50); // 50Hz for servospwm.setPWM(channel, 0, pulseLength); // Set servo position
Servo Pulse Calculation
At 50Hz: pulse range = 150 (0°) to 600 (180°) in 12-bit counts.
Formula: pulseLength = map(angle, 0, 180, 150, 600);
FAQ
Q: Can PCA9685 power servos directly?
A: The onboard regulator powers the IC logic only. Servos must be powered via the V+ screw terminal from an external 5V–6V supply capable of the required current (typically 500mA–1A per servo).
Q: How do I change the I²C address?
A: Solder the A0–A5 address jumper pads on the board. Each combination sets a unique address from 0x40 to 0x7F.
Package Contents
- 1× PCA9685 16-Channel 12-Bit PWM Servo Driver Module
