Control de un Módulo PWM de 16 canales (PCA9685) mediante Arduino - Tecneu

Control de un Módulo PWM de 16 canales (PCA9685) mediante Arduino

Comentarios

Introducción

En este tutorial, te guiaremos en el uso del módulo PCA9685 para expandir las capacidades de tus proyectos. Te mostraremos cómo configurar un canal, modificar la frecuencia y ajustar el ciclo de trabajo. Además, te enseñaremos cómo aprovechar la modulación por ancho de pulso (PWM) para controlar un servomotor SG90. Este tutorial te proporcionará las herramientas necesarias para manejar eficazmente el PCA9685 y mejorará tus habilidades en electrónica y robótica.

¿Qué es el PCA9685?

El PCA9685 es un módulo controlador PWM (modulación por ancho de pulso) de 16 canales que permite generar señales PWM independientes, producido por NXP Semiconductors. Este módulo es frecuentemente utilizado en proyectos de robótica y control para regular la señal de múltiples dispositivos a la vez, como servomotores, luces LED, entre otros.

Utiliza el protocolo I2C, lo que facilita su conexión a microcontroladores. Ofrece una frecuencia ajustable, una resolución de salida de 12 bits para un control preciso y puede funcionar con alimentación de 3.3V o 5V. Es posible conectar múltiples módulos PCA9685 en paralelo para incrementar la cantidad de canales PWM disponibles.

Conexión

La conexión del módulo PCA9685 a un Arduino es bastante sencilla. Solo necesitas cuatro conexiones en total: dos para la alimentación y dos para la comunicación I2C.

Aquí están las conexiones básicas:

  • VCC (alimentación): Conecta este pin al pin de 5V en el Arduino.
  • GND (tierra): Conecta este pin al pin GND en el Arduino para completar el circuito de alimentación.
  • SDA (datos I2C): Conecta este pin al pin de datos I2C del Arduino. En el caso de Arduino UNO, este es el pin analógico A4.
  • SCL (reloj I2C): Conecta este pin al pin del reloj I2C del Arduino. Para el Arduino UNO, este es el pin analógico A5.

Además de estas conexiones, si tienes un módulo PCA9685 con un pin de alimentación de servos (V+), puedes proporcionar una fuente de alimentación separada para alimentar los servos o LEDs que estés controlando, para no sobrecargar la alimentación del Arduino.

Librería necesaria

Una vez que hayas hecho estas conexiones, puedes usar la biblioteca Adafruit_PWMServoDriver en tu código para comenzar a controlar el módulo PCA9685 desde tu Arduino.

  1. Abre Arduino IDE en tu computadora.

  2. Ve a Sketch -> Incluir Biblioteca -> Gestionar Bibliotecas.... Esto abrirá el Administrador de Bibliotecas.

  3. En el campo de búsqueda, en la parte superior derecha del Administrador de Bibliotecas, escribe "Adafruit PWM Servo Driver Library". Esto filtrará la lista de bibliotecas disponibles.

  4. Deberías ver la biblioteca Adafruit PWMServoDriver Library. Haz clic en ella.

  5. En la esquina inferior derecha de la ventana del Administrador de Bibliotecas verás un botón Instalar. Haz clic en él para instalar la biblioteca.

Métodos de la biblioteca Adafruit_PWMServoDriver

  • begin(): Este método inicializa el módulo PWM.
  • setPWMFreq(freq): Este método se utiliza para establecer la frecuencia de los pulsos PWM.
  • setPin(num, val, invert): Este método se utiliza para ajustar el pin PWM a un valor que va de 0 a 4096.
  • setPWM(num, on, off): Este método se utiliza para ajustar una salida PWM a los valores de encendido (ON) y apagado (OFF) especificados.

 

Con el PCA9685 conetacdo a tu Arduino, copia el siguiente código, el cual inicializa el módulo PWM y establece la frecuencia a 1600Hz (la máxima a la que puede trabajar el módulo). Después, apaga todos los canales para garantizar que estén en un estado conocido (Puedes omitir esa parte del código dependiendo cuantas salidas quieres ocupar). Por último, calcula el ciclo de trabajo inicial (duty cycle) en base a un porcentaje predefinido (50%) y ajusta el pulso PWM en el primer canal del módulo.

 

En el bucle principal, el código verifica si hay datos disponibles en el puerto serie. Si se recibe un valor y está dentro del rango permitido (1-99), se actualiza el porcentaje del ciclo de trabajo. Luego, se recalcula el ciclo de trabajo y se ajusta el pulso PWM en el primer canal del módulo. Si los datos están fuera de rango, se imprime un mensaje de error.

 Abre el monitor serial a 115200 baudios y envia el porcentaje de ciclo de trabajo que desees.

Para este tutorial se uso un osciloscopio conectado al canal 0 del PWM.

Control de un servomotor

Este módulo PWM también se puede utilizar para controlar servomotores. En este tutorial, se usó específicamente el servomotor SG90.

El servomotor SG90 necesita una señal de control PWM con una frecuencia de 50Hz.  Además, el ancho del pulso de esta señal, que determina la posición del servo, debe estar entre 1 y 2 milisegundos aproximadamente.

El siguiente código inicia la comunicación con el módulo PWM y con el puerto serial. Establece la frecuencia de la señal PWM en 50Hz, valor apropiado para el control de servos, y apaga todos los pines del módulo PWM.

Luego, en el bucle principal (loop()), verifica si hay datos disponibles en el puerto serial. Si los hay y están en el rango permitido (0-180), estos se interpretan como el ángulo deseado para el servo. Se calcula el número de 'tiks' correspondientes a ese ángulo utilizando la función map(), luego se aplica esa cantidad de 'tiks' al canal del servo para moverlo a la posición deseada. Posteriormente, imprime el ángulo y la cantidad de 'tiks' en el Monitor Serial.

 

Puedes ajustar empíricamente las variables maxticksmintiks para mejorar la presición de tu servomomotor.

 

Conclusiones

El PCA9685 permite controlar de manera independiente hasta 16 salidas PWM usando solo dos pines de un microcontrolador, liberando recursos valiosos en nuestras placas Arduino u otros sistemas embebidos. Además tiene seis pines de direccionamiento (A0 a A5) que permiten asignar hasta 64 direcciones diferentes en el bus I2C permitiendo la conexión en paralelo de múltiples módulos.

 

Productos Relacionados

Ver artículo

Ver artículo

Ver artículo

Comentarios 

Sin comentarios

Dejar un comentario
Tu correo no será publicado, los campos requeridos estan marcados con *
Artículos relacionados
Suscríbete
Suscríbete a nuestro boletín y recibe las últimas ofertas y novedades.