Volver al Catálogo Todas nuestras PCB 👾

Controlador PWM/Servo de 16 Canales y 12 Bits - PCA9685

PCA9685 Controlador Adafruit
I2C

Datos Técnicos

  • Dimensiones: 62.5 mm x 25.4 mm x 3 mm
  • Peso: 9g
  • Interfaz: I2C (7 bits, 0x40-0x7F)
  • Salidas: 16 Canales
  • Resolución: 12 bits

Control Avanzado de Servos y LEDs

El PCA9685 es un controlador PWM controlado por I2C con un reloj integrado que alivia la carga de su microcontrolador, permitiéndole operar de forma autónoma. Perfecto para proyectos que requieren múltiples salidas PWM de alta resolución, como robótica avanzada, sistemas de iluminación complejos y más.

  • Totalmente Autónomo: No requiere señalización continua del microcontrolador.
  • Amplia Compatibilidad: Compatible con lógica de 5V y puede ser controlado por un microcontrolador de 3.3V.
  • Escalabilidad I2C: Con 6 pines de selección de dirección, puede conectar hasta 62 placas (992 salidas en total).
  • Alta Precisión: Resolución de 12 bits (aproximadamente 4 $\mu$s por pulso a 60 Hz).
  • Protección Integrada: Resistencias en serie de 220 $\Omega$ en todas las salidas para protección de LEDs.
Precio Unitario

$14.95 USD

Total Estimado:

$14.95

Código de Ejemplo: Control de un Servo (Arduino)

Este sketch básico muestra cómo inicializar el controlador PCA9685 y mover un servo conectado al canal 0 entre la posición mínima (0°) y máxima (180°).

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

// Inicializamos el controlador PCA9685 con la dirección I2C predeterminada (0x40)
Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();

// Definiciones para los límites de pulso del servo (pueden variar)
#define SERVOMIN  150 // Pulso "mínimo" de 150 (aproximadamente 0 grados)
#define SERVOMAX  600 // Pulso "máximo" de 600 (aproximadamente 180 grados)
#define SERVO_FREQ 50 // Frecuencia de los servos estándar (50 Hz)

uint8_t servonum = 0; // Usamos el canal 0 del controlador

void setup() {
  Serial.begin(9600);
  Serial.println("PCA9685 Servo Test Iniciado!");

  pwm.begin();
  pwm.setPWMFreq(SERVO_FREQ);  // Establece la frecuencia de PWM a 50 Hz
  
  delay(1000);
}

// Función para mapear un ángulo (0-180) a un valor de pulso (SERVOMIN-SERVOMAX)
uint16_t mapAngleToPulse(int angle) {
  // Utilizamos la función map de Arduino
  return map(angle, 0, 180, SERVOMIN, SERVOMAX);
}

void loop() {
  // Mover el servo a 0 grados (posición inicial)
  Serial.println("Movimiento a 0 grados");
  uint16_t pulso_min = mapAngleToPulse(0);
  pwm.setPWM(servonum, 0, pulso_min);
  delay(1500);

  // Mover el servo a 180 grados (posición final)
  Serial.println("Movimiento a 180 grados");
  uint16_t pulso_max = mapAngleToPulse(180);
  pwm.setPWM(servonum, 0, pulso_max);
  delay(1500);
  
  // Mover el servo a 90 grados (posición central)
  Serial.println("Movimiento a 90 grados");
  uint16_t pulso_mid = mapAngleToPulse(90);
  pwm.setPWM(servonum, 0, pulso_mid);
  delay(1500);
}
                    

Información de Seguridad y Uso

Este producto incluye la placa de expansión completamente probada y ensamblada, junto con conectores macho de 3x4 (para servos/LED), un bloque de terminales de 2 pines (para alimentación) y un conector de 6 pines de 0.1" (para protoboard). Se requiere una pequeña soldadura para personalizar los conectores deseados, un proceso simple y rápido.