Control de motores pwm con raspberry pi

Valoración: 4.47 (1380 votos)

La Raspberry Pi es una plataforma versátil para proyectos de robótica y automatización. Una de las funcionalidades clave que ofrece es la posibilidad de controlar motores mediante la técnica de Modulación de Ancho de Pulso (PWM). Este artículo te guiará paso a paso en el entorno del control de motores PWM con Raspberry Pi, desde los conceptos básicos hasta la implementación práctica con ejemplos de código.

¿Qué es la Modulación de Ancho de Pulso (PWM)?

La modulación de ancho de pulso (PWM) es una técnica que permite controlar la potencia suministrada a un dispositivo, como un motor, mediante la variación de la duración de los pulsos de corriente. En otras palabras, se genera una señal digital que alterna entre encendido y apagado rápidamente, y la proporción de tiempo en que la señal está encendida (el ancho del pulso) determina la potencia final que recibe el dispositivo.

¿Cómo funciona PWM?

Imagine una señal cuadrada que oscila entre 0 y 1 voltio. El tiempo que la señal permanece en 1 voltio se conoce como el ancho del pulso. Cuanto más tiempo esté la señal en 1 voltio, mayor será la potencia suministrada al dispositivo. Por el contrario, si la señal permanece la mayor parte del tiempo en 0 voltios, la potencia será menor.

Configuración de Raspberry Pi para PWM

La Raspberry Pi proporciona soporte para PWM a través de sus pines GPIO. Puedes configurar cualquier pin GPIO para que funcione como salida PWM. El paquete de software Simulink Support Package for Raspberry Pi Hardware permite interconectar motores DC mediante la configuración de los pines GPIO en la placa Raspberry Pi. Sin embargo, los pines GPIO de la Raspberry Pi solo pueden proporcionar una corriente de 16 mA por pin, lo que no es suficiente para alimentar un motor DC. Para proporcionar la corriente necesaria y controlar la direccionalidad, necesitarás usar un controlador de motor como el L298N.

Hardware Necesario

Para controlar un motor DC con Raspberry Pi, necesitarás los siguientes elementos:

  • Raspberry Pi
  • Motor DC
  • Controlador de Motor (L298N)
  • Baterías

Conexión del Motor DC a la Raspberry Pi

Conecta el motor DC a la placa Raspberry Pi a través del controlador de motor. En este ejemplo, se utiliza un controlador L298N, pero puedes usar otro controlador de tu elección.

Conecta el pin de habilitación del controlador al pin GPIO 25 de la Raspberry Pi y configúralo en consecuencia. Los pines de habilitación del controlador controlan la velocidad del motor. Puedes iniciar o detener el motor y cambiar su velocidad.

Conecta los pines IN1 e IN2 del controlador a los pines GPIO 23 y 24 de la Raspberry Pi y configúralos en consecuencia. Los pines IN1 e IN2 del controlador controlan la dirección del motor. Puedes mover el motor hacia adelante o hacia atrás utilizando estos pines.

Si usas dos motores DC, conéctalos al controlador L298N y conecta los pines de habilitación e entrada del controlador correspondientes a ambos motores a los pines GPIO de la placa.

Control de Motores con Simulink

El paquete Simulink Support Package for Raspberry Pi Hardware proporciona un modelo de Simulink preconfigurado para controlar motores, llamado raspberrypi_robotics_motors_gettingstarted. Este modelo te permite controlar la potencia, la velocidad y la dirección del motor conectado a la placa Raspberry Pi para aplicaciones robóticas. También te permite controlar el motor usando un panel de control interactivo dentro del modelo de Simulink.

pwm motor raspberry pi - Can I use GPIO as PWM

Componentes del Modelo de Simulink

El modelo de Simulink se divide en tres áreas según la funcionalidad de los bloques en cada área.

Control de Velocidad

Este subsistema se usa para controlar la velocidad del motor. Haz doble clic en el bloque constante de control de velocidad para cambiar los valores de los parámetros del bloque. El bloque de entrada de control de velocidad está conectado al pin GPIO 25 en la placa, que está configurado para proporcionar datos PWM.

Control de Dirección

Este subsistema comprende bloques de control de potencia y dirección.

El bloque de control de potencia se utiliza para iniciar/detener el motor. Este bloque está conectado a los pines GPIO configurados como pines de escritura GPIO.

El bloque de control de dirección se utiliza para mover el motor hacia adelante/atrás. Este bloque está conectado a los pines GPIO 24 y 23 que están configurados como pines de escritura GPIO.

Panel de Control del Motor

Este es un panel de control personalizable que puedes usar para ajustar los parámetros de control de potencia, dirección y velocidad del motor mientras el código se está ejecutando en el hardware.

Ejecución del Modelo de Simulink

Puedes ejecutar el modelo de Simulink en modo IO conectado, donde el modelo se comunica con el hardware sin generar ningún código en el hardware. Sigue estos pasos para ejecutar el modelo de Simulink en modo IO conectado.

  1. Abre el modelo de Simulink raspberrypi_robotics_motors_gettingstarted.
  2. En la pestaña Modeling del modelo, haz clic en Model Settings. En el cuadro de diálogo Configuration Parameters, haz clic en Hardware Implementation en el panel izquierdo y configura el parámetro Hardware board en Raspberry Pi.
  3. En la pestaña Hardware del modelo, en la sección Mode, haz clic en Run with IO.
  4. Puedes usar el panel de control para iniciar o detener el motor, moverlo hacia adelante o hacia atrás y aumentar su velocidad.

Despliegue del Modelo de Simulink en la Raspberry Pi

También puedes desplegar el modelo de Simulink en el hardware Raspberry Pi para crear un sistema independiente. Sigue estos pasos para desplegar el modelo de Simulink.

  1. En la pestaña Hardware del modelo de Simulink, en la sección Mode, selecciona Run on board.
  2. En la pestaña Hardware settings del modelo de Simulink, en la sección Hardware Implementation, selecciona Enable deployment for Dashboard blocks.
  3. En la sección Deploy del modelo de Simulink, haz clic en Build, Deploy & Start. El código generado se compila en el hardware Raspberry Pi y se ejecuta automáticamente.
  4. Debajo del modelo de Simulink, haz clic en View diagnostics para abrir el cuadro de diálogo Diagnostic Viewer.
  5. Haz clic en el enlace index.html para abrir el panel de control en un navegador web después de que el modelo se haya desplegado correctamente en tu hardware Raspberry Pi.
  6. El panel de control se abrirá en un navegador web, donde puedes controlar el motor.
  7. Si estás utilizando un visor de pantalla como VNC Viewer conectado a la placa Raspberry Pi, entonces el navegador predeterminado se abrirá con el panel de control para el control del motor.

Ejemplos de Código para Control de Motores PWM

A continuación, se presentan algunos ejemplos de código para controlar motores PWM con Raspberry Pi. Estos ejemplos utilizan el paquete Simulink Support Package for Raspberry Pi Hardware y el controlador de motor L298N.

Ejemplo 1: Control Básico de Motor

Este ejemplo muestra cómo controlar la dirección y la velocidad de un motor DC utilizando el modelo de Simulink raspberrypi_robotics_motors_gettingstarted.

// Código para controlar el motor DC // Define los pines GPIO para el motor const int enablePin = 25; const int in1Pin = 23; const int in2Pin = 24; // Función para configurar el pin de habilitación void setupEnablePin() { pinMode(enablePin, OUTPUT); digitalWrite(enablePin, LOW); } // Función para configurar los pines de dirección void setupDirectionPins() { pinMode(in1Pin, OUTPUT); pinMode(in2Pin, OUTPUT); digitalWrite(in1Pin, LOW); digitalWrite(in2Pin, LOW); } // Función para mover el motor hacia adelante void moveForward() { digitalWrite(in1Pin, HIGH); digitalWrite(in2Pin, LOW); } // Función para mover el motor hacia atrás void moveBackward() { digitalWrite(in1Pin, LOW); digitalWrite(in2Pin, HIGH); } // Función para detener el motor void stopMotor() { digitalWrite(in1Pin, LOW); digitalWrite(in2Pin, LOW); } // Función para ajustar la velocidad del motor void setSpeed(int speed) { analogWrite(enablePin, speed); } void loop() { // Iniciar el motor setupEnablePin(); setupDirectionPins(); // Mover el motor hacia adelante moveForward(); delay(1000); // Detener el motor stopMotor(); delay(1000); // Mover el motor hacia atrás moveBackward(); delay(1000); // Detener el motor stopMotor(); delay(1000); }

Ejemplo 2: Control de Velocidad PWM

Este ejemplo muestra cómo controlar la velocidad de un motor DC utilizando la función analogWrite() para generar una señal PWM en el pin de habilitación del controlador del motor.

// Código para controlar la velocidad del motor DC // Define el pin GPIO para el motor const int enablePin = 25; // Función para configurar el pin de habilitación void setupEnablePin() { pinMode(enablePin, OUTPUT); } void loop() { // Iniciar el pin de habilitación setupEnablePin(); // Ajustar la velocidad del motor for (int speed = 0; speed <= 255; speed++) { analogWrite(enablePin, speed); delay(10); } // Reducir la velocidad del motor for (int speed = 255; speed >= 0; speed--) { analogWrite(enablePin, speed); delay(10); } }

Consejos y Consideraciones

Aquí tienes algunos consejos adicionales para trabajar con motores PWM en Raspberry Pi:

  • Prueba diferentes valores de frecuencia PWM: La frecuencia PWM afecta al rendimiento y la suavidad del motor. Experimenta con diferentes valores para encontrar el óptimo para tu aplicación.
  • Utiliza un controlador de motor adecuado: El controlador de motor debe ser capaz de manejar la corriente y el voltaje requeridos por el motor.
  • Calibra el motor: Es posible que tengas que ajustar la velocidad del motor y la dirección para obtener el rendimiento deseado.
  • Considera la seguridad: Los motores pueden generar calor y pueden ser peligrosos si no se manejan correctamente. Toma precauciones de seguridad al trabajar con motores y asegúrate de que el circuito esté bien conectado.

El control de motores PWM con Raspberry Pi es una técnica poderosa que abre un entorno de posibilidades para proyectos de robótica y automatización. Este artículo te ha proporcionado una base sólida para comenzar, y ahora estás listo para explorar más a fondo el control de motores PWM y crear proyectos increíbles.

Si quieres conocer otros artículos parecidos a Control de motores pwm con raspberry pi puedes visitar la categoría Motor.

Subir