Cirkit Designer Logo
Cirkit Designer
Your all-in-one circuit design IDE
Home / 
Component Documentation

How to Use Adafruit PCA9685 PWM Servo Breakout: Examples, Pinouts, and Specs

Image of Adafruit PCA9685 PWM Servo Breakout
Cirkit Designer LogoDesign with Adafruit PCA9685 PWM Servo Breakout in Cirkit Designer

Introduction

The Adafruit PCA9685 PWM Servo Breakout is a 16-channel, 12-bit PWM driver designed for precise control of servos, LEDs, and other devices. It communicates via the I2C protocol, making it easy to integrate with microcontrollers like Arduino, Raspberry Pi, and others. This breakout board is ideal for robotics, automation, and lighting projects where multiple PWM outputs are required.

Explore Projects Built with Adafruit PCA9685 PWM Servo Breakout

Use Cirkit Designer to design, explore, and prototype these projects online. Some projects support real-time simulation. Click "Open Project" to start designing instantly!
16-Channel Servo Controller with Adafruit PCA9685
Image of my first project: A project utilizing Adafruit PCA9685 PWM Servo Breakout in a practical application
This circuit consists of an Adafruit PCA9685 PWM Servo Breakout board connected to multiple MG995 servomotors. The PCA9685 board is used to provide PWM (Pulse Width Modulation) signals to control the position of each servomotor. Power (5V and GND) is distributed from the PCA9685 to all servomotors, and individual PWM outputs from the PCA9685 are connected to the signal inputs of the servomotors, allowing for independent control of each servomotor's angle or speed.
Cirkit Designer LogoOpen Project in Cirkit Designer
Arduino Nano and PCA9685 PWM Servo Controller for Multi-Servo Robotic Arm
Image of BRAZOS_CABEZA: A project utilizing Adafruit PCA9685 PWM Servo Breakout in a practical application
This circuit uses an Arduino Nano to control multiple servos via an Adafruit PCA9685 PWM Servo Breakout. The servos are powered by a 5V power supply, and the Arduino communicates with the PWM breakout over I2C to send control signals to the servos.
Cirkit Designer LogoOpen Project in Cirkit Designer
Arduino Mega 2560 Controlled Servo Motor with IR Remote and PWM Control
Image of project: A project utilizing Adafruit PCA9685 PWM Servo Breakout in a practical application
This circuit consists of an Arduino Mega 2560 microcontroller interfaced with an Adafruit PCA9685 PWM Servo Breakout to control a servo motor. The Arduino communicates with the PWM breakout via I2C (SDA and SCL lines) and provides power and ground connections. The PWM breakout then controls the servo motor by providing the necessary pulse signals.
Cirkit Designer LogoOpen Project in Cirkit Designer
8-Channel Servo Controller with Arduino and PCA9685
Image of spiderbot: A project utilizing Adafruit PCA9685 PWM Servo Breakout in a practical application
This circuit is designed to control multiple servos using an Adafruit PCA9685 PWM Servo Breakout board, which is interfaced with an Arduino UNO microcontroller. The PCA9685 board receives power from a 9V battery and communicates with the Arduino via I2C (SDA/SCL lines). The Arduino is programmed to generate PWM signals through the PCA9685 to independently control the position of each connected servo.
Cirkit Designer LogoOpen Project in Cirkit Designer

Explore Projects Built with Adafruit PCA9685 PWM Servo Breakout

Use Cirkit Designer to design, explore, and prototype these projects online. Some projects support real-time simulation. Click "Open Project" to start designing instantly!
Image of my first project: A project utilizing Adafruit PCA9685 PWM Servo Breakout in a practical application
16-Channel Servo Controller with Adafruit PCA9685
This circuit consists of an Adafruit PCA9685 PWM Servo Breakout board connected to multiple MG995 servomotors. The PCA9685 board is used to provide PWM (Pulse Width Modulation) signals to control the position of each servomotor. Power (5V and GND) is distributed from the PCA9685 to all servomotors, and individual PWM outputs from the PCA9685 are connected to the signal inputs of the servomotors, allowing for independent control of each servomotor's angle or speed.
Cirkit Designer LogoOpen Project in Cirkit Designer
Image of BRAZOS_CABEZA: A project utilizing Adafruit PCA9685 PWM Servo Breakout in a practical application
Arduino Nano and PCA9685 PWM Servo Controller for Multi-Servo Robotic Arm
This circuit uses an Arduino Nano to control multiple servos via an Adafruit PCA9685 PWM Servo Breakout. The servos are powered by a 5V power supply, and the Arduino communicates with the PWM breakout over I2C to send control signals to the servos.
Cirkit Designer LogoOpen Project in Cirkit Designer
Image of project: A project utilizing Adafruit PCA9685 PWM Servo Breakout in a practical application
Arduino Mega 2560 Controlled Servo Motor with IR Remote and PWM Control
This circuit consists of an Arduino Mega 2560 microcontroller interfaced with an Adafruit PCA9685 PWM Servo Breakout to control a servo motor. The Arduino communicates with the PWM breakout via I2C (SDA and SCL lines) and provides power and ground connections. The PWM breakout then controls the servo motor by providing the necessary pulse signals.
Cirkit Designer LogoOpen Project in Cirkit Designer
Image of spiderbot: A project utilizing Adafruit PCA9685 PWM Servo Breakout in a practical application
8-Channel Servo Controller with Arduino and PCA9685
This circuit is designed to control multiple servos using an Adafruit PCA9685 PWM Servo Breakout board, which is interfaced with an Arduino UNO microcontroller. The PCA9685 board receives power from a 9V battery and communicates with the Arduino via I2C (SDA/SCL lines). The Arduino is programmed to generate PWM signals through the PCA9685 to independently control the position of each connected servo.
Cirkit Designer LogoOpen Project in Cirkit Designer

Common Applications and Use Cases

  • Controlling multiple servo motors in robotics projects
  • Driving LED arrays with precise brightness control
  • Automation systems requiring multiple PWM outputs
  • Animatronics and motion control systems
  • Custom lighting effects for displays or art installations

Technical Specifications

Key Technical Details

  • PWM Channels: 16 independent channels
  • Resolution: 12-bit (4096 steps)
  • Operating Voltage: 2.3V to 5.5V (logic level)
  • Output Voltage: Up to 6V (external power supply required for servos)
  • Communication Protocol: I2C (7-bit address, default: 0x40)
  • Frequency Range: 24 Hz to 1526 Hz
  • Maximum Current per Channel: 25 mA (for LEDs)
  • External Power Supply: Required for driving servos or high-power devices
  • Dimensions: 60mm x 25mm x 3mm

Pin Configuration and Descriptions

The Adafruit PCA9685 breakout board has the following key pins:

Pin Name Description
VCC Logic voltage input (2.3V to 5.5V). Powers the PCA9685 chip.
GND Ground connection.
SDA I2C data line. Connect to the SDA pin of your microcontroller.
SCL I2C clock line. Connect to the SCL pin of your microcontroller.
OE Output enable pin. Active low; pull low to enable PWM outputs.
V+ External power input for driving servos or high-power devices (up to 6V).
PWM Outputs 16 PWM output pins (labeled 0 to 15). Connect to servos, LEDs, or other loads.

Usage Instructions

How to Use the Component in a Circuit

  1. Power the Board:
    • Connect the VCC pin to the logic voltage of your microcontroller (e.g., 5V for Arduino).
    • Connect the GND pin to the ground of your microcontroller.
    • If driving servos or high-power devices, connect an external power supply (up to 6V) to the V+ pin.
  2. Connect I2C Lines:
    • Connect the SDA and SCL pins to the corresponding I2C pins on your microcontroller.
    • Ensure pull-up resistors (typically 4.7kΩ) are present on the I2C lines if not already included.
  3. Connect Devices:
    • Attach servos, LEDs, or other devices to the PWM output pins (0 to 15).
  4. Set the I2C Address (if needed):
    • The default I2C address is 0x40. To change it, adjust the address pins (A0 to A5) on the board.
  5. Program Your Microcontroller:
    • Use a library like the Adafruit PCA9685 library for Arduino to control the board.

Important Considerations and Best Practices

  • External Power Supply: When driving servos, ensure the external power supply can handle the total current draw of all connected devices.
  • I2C Address Conflicts: If using multiple PCA9685 boards, assign unique I2C addresses to each by configuring the address pins.
  • Frequency Setting: Set the PWM frequency based on your application. For servos, a frequency of 50 Hz is typical.
  • Capacitor for Stability: Add a large capacitor (e.g., 1000 µF) across the V+ and GND pins to stabilize the power supply when driving servos.

Example Code for Arduino UNO

Below is an example of how to control a servo using the Adafruit PCA9685 library:

#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>

// Create an instance of the PCA9685 driver
Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();

#define SERVOMIN 150 // Minimum pulse length count for the servo
#define SERVOMAX 600 // Maximum pulse length count for the servo

void setup() {
  Serial.begin(9600);
  Serial.println("Initializing PCA9685...");

  pwm.begin(); // Initialize the PCA9685
  pwm.setPWMFreq(50); // Set PWM frequency to 50 Hz for servos

  Serial.println("PCA9685 ready.");
}

void loop() {
  // Sweep servo on channel 0 from minimum to maximum position
  for (uint16_t pulselen = SERVOMIN; pulselen < SERVOMAX; pulselen++) {
    pwm.setPWM(0, 0, pulselen); // Set PWM signal on channel 0
    delay(10); // Small delay for smooth movement
  }

  // Sweep servo back from maximum to minimum position
  for (uint16_t pulselen = SERVOMAX; pulselen > SERVOMIN; pulselen--) {
    pwm.setPWM(0, 0, pulselen); // Set PWM signal on channel 0
    delay(10); // Small delay for smooth movement
  }
}

Troubleshooting and FAQs

Common Issues and Solutions

  1. No Response from the Board:

    • Ensure the I2C connections (SDA, SCL) are correct and secure.
    • Verify that the I2C address matches the one configured on the board.
    • Check that the VCC and GND pins are properly connected.
  2. Servos Not Moving:

    • Confirm that the external power supply is connected to the V+ pin and provides sufficient current.
    • Ensure the PWM frequency is set to 50 Hz for servos.
    • Verify that the servo signal wire is connected to the correct PWM output pin.
  3. I2C Communication Errors:

    • Check for pull-up resistors on the SDA and SCL lines.
    • Ensure the I2C address does not conflict with other devices on the bus.
  4. Overheating or Power Issues:

    • Use a capacitor across V+ and GND to stabilize the power supply.
    • Avoid exceeding the maximum current rating of the board.

FAQs

Q: Can I use this board with a Raspberry Pi?
A: Yes, the PCA9685 is compatible with Raspberry Pi. Use the appropriate I2C pins (SDA, SCL) and libraries like Adafruit_PCA9685 in Python.

Q: How many boards can I chain together?
A: Up to 62 PCA9685 boards can be chained on the same I2C bus by configuring unique I2C addresses.

Q: What is the maximum current the board can handle?
A: Each channel can handle up to 25 mA for LEDs. For servos, the current is limited by the external power supply connected to V+.

Q: Can I control DC motors with this board?
A: Yes, but you will need an additional motor driver circuit to handle the higher current requirements of DC motors.