Skip to content

Uso del Controlador PCA9685 para Servomotores

Uso del Controlador PCA9685 para Servomotores

Brazo Robótico

El PCA9685 fue diseñado para controlar LEDs por PWM, pero también se usa para controlar servos, ya que estos también funcionan con señales PWM. Su uso es muy común en robótica y automatización.

El Módulo PCA9685 tiene pines en el orden correcto para conectar servos directamente, una bornera para alimentación de los servos y conectores para la parte lógica junto con los pines I2C para comunicarse con Arduino.

Además, podemos establecer la dirección I2C soldando los puentes A0-A5, lo que permite usar varios módulos PCA9685 en el mismo bus I2C.

Brazo Robótico

🔹 Características del PCA9685

✔️ 16 salidas PWM independientes con 12 bits de resolución (valores de 0 a 4095).
✔️ Frecuencia máxima: 1600 Hz.
✔️ Interfaz de comunicación I2C, compatible con Arduino y otros microcontroladores.
✔️ Control de servos con alimentación externa.

La salida PWM que envía el PCA9685 es de la siguiente forma: Brazo Robótico

Básicamente lo se tiene que establecer es la frecuencia de la señal PWM, frecuencia que será la misma para las 16 salidas PWM. Para establecer el ciclo de trabajo (Duty) tenemos que manipular el flanco de subida (Up) y flanco de bajada (Down), esto se configura individualmente para cada salida PWM, La resolución del PWM es de 12 bits (de 0 a 4095).


🔹 Conexión Entre Arduino y PCA9685

Para conectar el PCA9685 con Arduino, utilizamos los siguientes pines:

Módulo PCA9685Arduino Uno/Nano/MiniArduino Mega/DUEArduino Leonardo
GNDGNDGNDGND
OEGNDGNDGND
SCLA5213
SDAA4202
VCC5V5V5V
+VNo conectadoNo conectadoNo conectado

🔹 Alimentación del PCA9685 y los Servomotores

El PCA9685 tiene dos pines de alimentación clave:

  • VCC: Alimenta la parte lógica del módulo (debe conectarse a 5V de Arduino).
  • V+: Alimenta los servomotores, que deben usar una fuente externa del voltaje adecuado.

📌 Importante:

  • No conectar los servos a los 5V de Arduino, ya que no proporciona suficiente corriente.
  • La mayoría de los servos trabajan entre 4.5V y 6V.
  • Usaremos una fuente externa de 5V / 5A para alimentar los servos.

🔹 Consideraciones sobre la Fuente de Alimentación

La corriente mínima de la fuente externa depende de:
✔️ El tipo de servomotores utilizados.
✔️ La cantidad de servos conectados simultáneamente.

Dado que la corriente de un servomotor no es constante, es recomendable sobredimensionar la fuente para evitar caídas de voltaje o fallos de alimentación.

🔹 Filtrado de Ruido en la Alimentación

Si la fuente no es estable o genera ruido eléctrico, se recomienda soldar un condensador en la placa del PCA9685 para estabilizar la alimentación:

✔️ 1000uF si se alimentan múltiples servos.
✔️ 100uF por cada servomotor, si se prefieren condensadores individuales.


🔹 Conexión Gráfica

Brazo Robótico

Las conexiones entre Arduino, el PCA9685 y la fuente externa son las siguientes:

Módulo PCA9685Conexión
VCC5V de Arduino
GNDGND de Arduino y GND de la Fuente
V++5V de la Fuente Externa
SDAA4 (Arduino Uno) / 20 (Mega/DUE)
SCLA5 (Arduino Uno) / 21 (Mega/DUE)

📌 Notas:

  • GND de la fuente externa y GND de Arduino deben estar conectados para compartir referencia.
  • Si la fuente no es estable, usar condensadores electrolíticos de 1000uF en la alimentación del módulo.

📌 Esquema de Conexión 📌


🔹 Instalación de la Librería PCA9685

Usaremos la librería de Adafruit, que se puede descargar desde GitHub:

🔗 Descargar Librería PCA9685

Para instalarla en Arduino IDE:

  1. Ir a HerramientasAdministrar bibliotecas.
  2. Buscar Adafruit PWM Servo Driver.
  3. Hacer clic en Instalar.

🔹 Código de Configuración Inicial

Incluimos las librerías necesarias y creamos el objeto para el controlador:

#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>
Adafruit_PWMServoDriver servos = Adafruit_PWMServoDriver(0x40);
void setup() {
servos.begin();
servos.setPWMFreq(60); // Frecuencia de 60Hz para servos
}