Component · Driver
PCA9685 Servo Driver
The PCA9685 drives 16 servos or PWM outputs over I²C from two pins—the standard way to run a robot arm or many servos without hogging the microcontroller.
What it is
The PCA9685 is a servo multiplier. A microcontroller has only a handful of hardware PWM channels, so driving a robot arm’s six servos—let alone a hexapod’s eighteen—quickly runs it out of pins and timers. This little board takes that job over: it generates 16 independent PWM signals in hardware, and you command all of them over two I²C wires. It’s the board behind most multi-servo robots.
How it works
You talk to the PCA9685 over I²C—the same two pins (SCL/SDA) can also carry other sensors. You set one PWM frequency for the whole chip (50 Hz for hobby servos), then set each channel’s pulse width to position its servo. Because the chip holds all 16 signals in hardware, the microcontroller just sends “channel 3 → 1.5 ms” and moves on; it never has to bit-bang the timing itself. That’s what keeps every servo smooth even when all 16 are moving. The pulse-width-to-angle idea is the same one covered on the SG90 servo page.
When to use it
Reach for a PCA9685 whenever a robot has more servos than the microcontroller has PWM pins, or when you want the servos rock-steady:
- Robot arms — several joint servos moving together (pair it with inverse kinematics).
- Hexapods / quadrupeds — a dozen or more legs’ worth of servos.
- Pan-tilt and camera rigs — freeing the microcontroller’s timers for other work.
For a single scanning servo—like the ultrasonic scanner on an obstacle-avoider—you don’t need it; the microcontroller can drive one servo directly.
Wiring and gotchas
- Two power rails. Logic (VCC) from the microcontroller; servo power from the V+ terminal. Never run 16 servos’ current through the Arduino’s 5 V.
- Size V+ for stall, not idle. Sixteen servos can pull several amps together; an undersized supply sags and the whole board jitters.
- Set unique addresses when chaining boards, via the solder jumpers.
- Add a capacitor across V+ to absorb the current spikes as servos start moving.
Explore the graph
Used in these builds
Projects, learning paths, and simulators that include the PCA9685 Servo Driver.
Questions
PCA9685 Servo Driver FAQ
What is a PCA9685?
The PCA9685 is a 16-channel, 12-bit PWM driver you control over I²C. It's most often used as a servo driver—one small board runs up to 16 servos from just two microcontroller pins, which is why it's the standard choice for robot arms, hexapods, and pan-tilt rigs.
How many servos can a PCA9685 drive?
16 per board, and you can chain up to 62 boards on one I²C bus for 992 channels. The limit in practice is power, not channels—16 servos moving at once can pull several amps, which must come from the separate V+ terminal, not the microcontroller.
Does the PCA9685 need a separate power supply?
Yes, for the servos. The chip's logic runs on 3.3–5 V from the microcontroller, but the servos draw their current from the dedicated V+ terminal—wire that to a supply that can deliver the stall current of all your servos at once, or they'll brown out and jitter.
How do you connect a PCA9685 to an Arduino?
Wire it over I²C—SDA and SCL to the Arduino's I²C pins, plus VCC and GND for the chip's logic power. Then connect a separate supply to the V+ terminal for the servos, and plug each servo into a channel header. A library (such as Adafruit's) lets you set each channel's angle in code.
How do you chain PCA9685 boards?
Each board has six solder-jumper pads that set its I²C address. Bridge a different combination on each board so every one has a unique address, then wire them all to the same two I²C lines—up to 62 boards, 992 channels, on one bus.
Further reading