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

How to Use PCA9685 Breakout Board: Examples, Pinouts, and Specs

Image of PCA9685 Breakout Board
Cirkit Designer LogoDesign with PCA9685 Breakout Board in Cirkit Designer

Introduction

The PCA9685 Breakout Board, manufactured by NXP Semiconductors (Part ID: PCA9685), is a versatile 16-channel, 12-bit PWM (Pulse Width Modulation) controller. It communicates via the I2C protocol, making it an ideal choice for applications requiring precise control of multiple servos or LEDs. This component is widely used in robotics, automation, and lighting projects due to its ability to offload PWM generation from the microcontroller, freeing up valuable processing power.

Explore Projects Built with PCA9685 Breakout Board

Use Cirkit Designer to design, explore, and prototype these projects online. Some projects support real-time simulation. Click "Open Project" to start designing instantly!
Raspberry Pi 5-Controlled Multi-Servo System with Environmental Sensing
Image of cit: A project utilizing PCA9685 Breakout Board in a practical application
This circuit is designed to control multiple servos using two Adafruit PCA9685 PWM Servo Breakout boards, which are interfaced with a Raspberry Pi 5. The Raspberry Pi provides power and control signals to the PCA9685 boards, which in turn generate PWM signals to control the position of each servo. Additional sensors, including a DHT11 temperature and humidity sensor and an MKE-S01 ultrasonic distance sensor, are connected to the Raspberry Pi for environmental data acquisition.
Cirkit Designer LogoOpen Project in Cirkit Designer
16-Channel Servo Controller with Adafruit PCA9685
Image of my first project: A project utilizing PCA9685 Breakout Board 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
8-Channel Servo Controller with Arduino and PCA9685
Image of spiderbot: A project utilizing PCA9685 Breakout Board 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
Raspberry Pi-Controlled Dual Servo Driver with PCA9685 Interface
Image of Copy of PWM, SERVO, ESC Wiring: A project utilizing PCA9685 Breakout Board in a practical application
This circuit controls two servomotors (MG996R and MG995) using a Raspberry Pi 5 and an Adafruit PCA9685 PWM Servo Breakout board. The Raspberry Pi communicates with the PCA9685 via I2C (using GPIO 2 and GPIO 3 for SDA and SCL, respectively) to send PWM signals to the servos. Power distribution is managed through an Adafruit Perma Proto Small Mint board, which connects the 5V and GND from the Raspberry Pi to the PCA9685 and the servos.
Cirkit Designer LogoOpen Project in Cirkit Designer

Explore Projects Built with PCA9685 Breakout Board

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 cit: A project utilizing PCA9685 Breakout Board in a practical application
Raspberry Pi 5-Controlled Multi-Servo System with Environmental Sensing
This circuit is designed to control multiple servos using two Adafruit PCA9685 PWM Servo Breakout boards, which are interfaced with a Raspberry Pi 5. The Raspberry Pi provides power and control signals to the PCA9685 boards, which in turn generate PWM signals to control the position of each servo. Additional sensors, including a DHT11 temperature and humidity sensor and an MKE-S01 ultrasonic distance sensor, are connected to the Raspberry Pi for environmental data acquisition.
Cirkit Designer LogoOpen Project in Cirkit Designer
Image of my first project: A project utilizing PCA9685 Breakout Board 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 spiderbot: A project utilizing PCA9685 Breakout Board 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
Image of Copy of PWM, SERVO, ESC Wiring: A project utilizing PCA9685 Breakout Board in a practical application
Raspberry Pi-Controlled Dual Servo Driver with PCA9685 Interface
This circuit controls two servomotors (MG996R and MG995) using a Raspberry Pi 5 and an Adafruit PCA9685 PWM Servo Breakout board. The Raspberry Pi communicates with the PCA9685 via I2C (using GPIO 2 and GPIO 3 for SDA and SCL, respectively) to send PWM signals to the servos. Power distribution is managed through an Adafruit Perma Proto Small Mint board, which connects the 5V and GND from the Raspberry Pi to the PCA9685 and the servos.
Cirkit Designer LogoOpen Project in Cirkit Designer

Common Applications

  • Controlling servo motors in robotic arms, drones, and RC vehicles
  • LED dimming and lighting effects in decorative or functional lighting systems
  • Automation systems requiring precise motor or light control
  • Projects requiring multiple PWM outputs with minimal microcontroller overhead

Technical Specifications

The PCA9685 Breakout Board is designed to simplify PWM control in complex systems. Below are its key technical details:

Key Features

  • Channels: 16 independent PWM outputs
  • Resolution: 12-bit (4096 steps per cycle)
  • Communication Protocol: I2C (up to 1 MHz)
  • Operating Voltage: 2.3V to 5.5V (logic level)
  • Output Voltage: Up to 6V (external power supply required for servos/LEDs)
  • Output Current: 25 mA per channel (maximum)
  • Frequency Range: Adjustable PWM frequency from 24 Hz to 1526 Hz
  • Addressing: Configurable I2C address (up to 62 devices on the same bus)
  • Integrated Oscillator: No external clock required

Pin Configuration

The PCA9685 Breakout Board has the following pin layout:

Pin Name Description
VCC Power supply for the logic circuit (2.3V to 5.5V).
GND Ground connection.
SDA I2C data line.
SCL I2C clock line.
OE Output enable pin (active low, optional).
PWM 0-15 16 PWM output pins for controlling servos or LEDs.
V+ External power supply for driving servos or LEDs (up to 6V).
A0-A5 Address selection pins for configuring the I2C address.

I2C Addressing

The PCA9685 supports up to 62 unique I2C addresses. The base address is 0x40, and the address can be modified using the A0-A5 pins. Each pin can be tied to GND (logic 0) or VCC (logic 1) to set the desired address.

Usage Instructions

Connecting the PCA9685 to a Microcontroller

  1. Power the Board: Connect the VCC pin to the microcontroller's logic voltage (e.g., 3.3V or 5V) and the GND pin to the ground.
  2. I2C Communication: Connect the SDA and SCL pins to the corresponding I2C pins on the microcontroller.
  3. External Power Supply: If driving servos or LEDs, connect an external power supply (up to 6V) to the V+ pin. Ensure the GND of the external power supply is connected to the GND of the microcontroller.
  4. Address Configuration: Set the I2C address using the A0-A5 pins if multiple PCA9685 boards are used on the same I2C bus.

Example: Using PCA9685 with Arduino UNO

Below is an example of controlling a servo motor using the PCA9685 and Arduino UNO:

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

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

void setup() {
  // Initialize serial communication for debugging
  Serial.begin(9600);
  
  // Initialize the PCA9685 board
  pwm.begin();
  
  // Set the PWM frequency to 50 Hz (common for servos)
  pwm.setPWMFreq(50);
  
  Serial.println("PCA9685 initialized and ready.");
}

void loop() {
  // Define the servo channel and pulse width range
  uint8_t servoChannel = 0; // Channel 0
  uint16_t pulseMin = 150;  // Minimum pulse width (0 degrees)
  uint16_t pulseMax = 600;  // Maximum pulse width (180 degrees)
  
  // Sweep the servo from 0 to 180 degrees
  for (uint16_t pulse = pulseMin; pulse <= pulseMax; pulse++) {
    pwm.setPWM(servoChannel, 0, pulse);
    delay(10); // Small delay for smooth movement
  }
  
  // Sweep the servo back from 180 to 0 degrees
  for (uint16_t pulse = pulseMax; pulse >= pulseMin; pulse--) {
    pwm.setPWM(servoChannel, 0, pulse);
    delay(10); // Small delay for smooth movement
  }
}

Best Practices

  • Use decoupling capacitors near the VCC and V+ pins to reduce noise.
  • Avoid exceeding the maximum current rating of 25 mA per channel.
  • Use a separate power supply for servos or high-power LEDs to prevent overloading the microcontroller's power supply.
  • Ensure proper grounding between the PCA9685, microcontroller, and external power supply.

Troubleshooting and FAQs

Common Issues

  1. No Response from the PCA9685

    • Solution: Verify the I2C connections (SDA, SCL) and ensure the correct I2C address is being used in the code.
    • Tip: Use an I2C scanner sketch to detect the PCA9685's address.
  2. Servos or LEDs Not Functioning

    • Solution: Check the external power supply connected to the V+ pin. Ensure it matches the voltage requirements of the connected devices.
    • Tip: Confirm that the PWM frequency is set correctly for the application (e.g., 50 Hz for servos).
  3. Erratic Behavior or Noise

    • Solution: Add decoupling capacitors near the power pins and ensure proper grounding.
    • Tip: Use shielded cables for long I2C connections to reduce interference.
  4. Overheating

    • Solution: Ensure the current per channel does not exceed 25 mA. For higher currents, use external transistors or MOSFETs.

FAQs

  • Can I use multiple PCA9685 boards on the same I2C bus? Yes, up to 62 boards can be connected by configuring unique I2C addresses using the A0-A5 pins.

  • What is the maximum PWM frequency supported? The PCA9685 supports frequencies up to 1526 Hz, but the frequency should be chosen based on the application (e.g., 50 Hz for servos).

  • Do I need an external clock for the PCA9685? No, the PCA9685 has an integrated oscillator and does not require an external clock.

  • Can I control DC motors with the PCA9685? Yes, but you will need an H-bridge or motor driver circuit to handle the higher current requirements of DC motors.

This documentation provides a comprehensive guide to using the PCA9685 Breakout Board effectively in your projects.