Código de búsqueda

Controlando Múltiples Motores de Corriente Continua Usando un Módulo BTS7960 con Arduino

Controlando Múltiples Motores de Corriente Continua Usando un Módulo BTS7960 con Arduino

En este tutorial, exploraremos cómo controlar múltiples motores de corriente continua utilizando el módulo BTS7960 con un Arduino. El BTS7960 es un potente controlador de motores capaz de manejar altas corrientes y permite un control preciso de la dirección y velocidad del motor a través de PWM (Modulación por Ancho de Pulso). Al final de este proyecto, tendrás una configuración funcional que puede controlar dos motores de corriente continua, girándolos en ambas direcciones: horario y antihorario. Este tutorial te guiará a través de la configuración del hardware, las instrucciones de cableado y el código necesario para hacer funcionar los motores. Para una comprensión más clara de todo el proceso, asegúrate de ver el video adjunto (en el video a las 00:00).

BTS7960_módulo-3

Explicación del Hardware

El componente principal de este proyecto es el módulo de controlador de motor BTS7960. Este módulo incluye dos controladores en puente H que pueden controlar la dirección de los motores cambiando la polaridad de la tensión aplicada al motor. Cada controlador puede manejar hasta 43A de corriente, lo que lo hace adecuado para aplicaciones de alta potencia. El módulo también cuenta con protección incorporada contra situaciones de sobretemperatura y sobrecorriente. Además del BTS7960, necesitarás una placa Arduino para controlar los motores. El Arduino envía señales PWM al controlador de motor, lo que te permite ajustar la velocidad y dirección de los motores. Las conexiones entre el Arduino y el módulo BTS7960 son cruciales, ya que dictan cómo los motores responderán a las señales.

Detalles de la hoja de datos

Fabricante Infineon Technologies
Número de pieza BTS7960
Voltaje de lógica/IO 3.3 V a 5 V
Tensión de suministro 5-40 V
Corriente de salida (por canal) 43 A máx
Corriente de pico (por canal) 60 A
Guía de frecuencia PWM 5-25 kHz
Umbrales de lógica de entrada 0.8 V (alto), 0.3 V (bajo)
Caída de tensión / RDS(on)/ saturación 16 mΩ
Límites térmicos 150 °C máx
Paquete TO-263
Notas / variantes Configuración de puente H dual

  • Asegúrese de un adecuado disipador de calor al operar a altas corrientes.
  • Utilice el calibre de alambre adecuado para las conexiones de alimentación.
  • Verifica dos veces los mapeos de pines entre el Arduino y el BTS7960.
  • Implementar limitación de corriente para prevenir daños en el módulo.
  • Utilice condensadores de desacoplamiento cerca de la fuente de alimentación para mayor estabilidad.
BTS7960_módulo-2

Instrucciones de cableado

BTS7960-_2_motor_wiring

Para conectar el módulo BTS7960 al Arduino, sigue estas conexiones cuidadosamente: 1. **Conexiones de alimentación**: Conecta el terminal positivo de tu fuente de alimentación al terminal B+ del módulo BTS7960, y el terminal negativo al terminal B-. Asegúrate de que la fuente de alimentación cumpla con los requisitos de voltaje de tus motores. 2. **Conexiones del motor**: Conecta los cables del motor a los terminales M+ y M- del módulo. Esto permitirá que el módulo controle el motor. 3. **Pines del Arduino**: Conecta los siguientes pines del Arduino al módulo BTS7960: - Pin 3 (RPWM) al pin RPWM del módulo. - Pin 4 (R_EN) al pin R_EN del módulo. - Pin 5 (R_IS) al pin R_IS del módulo. - Pin 6 (LPWM) al pin LPWM del módulo. - Pin 7 (L_EN) al pin L_EN del módulo. - Pin 8 (L_IS) al pin L_IS del módulo. 4. **Conexiones a tierra**: Conecta el pin de tierra del Arduino al pin de tierra del módulo BTS7960 para asegurar una referencia común para las señales. Asegúrate de que todas las conexiones estén seguras para evitar comportamientos inesperados durante el funcionamiento.

Instalar la biblioteca requerida

Para instalar elrobojax_BTS7960_motor_driver_libraryen el IDE de Arduino, primero descarga el archivo ZIP de la biblioteca desde el enlace proporcionado. Con el archivo guardado, abre tu IDE de Arduino y navega aBoceto > Incluir biblioteca > Agregar biblioteca .ZIP.... En el cuadro de diálogo de selección de archivos, busca el archivo ZIP descargado, selecciónalo y haz clic en "Abrir". El IDE instalará la biblioteca. Puedes confirmar una instalación exitosa revisando elArchivo > Ejemplosmenú, donde debería aparecer una nueva categoría llamada "Biblioteca del controlador de motor Robojax BTS7960". Ahora puedes incluir el encabezado de la biblioteca en tu código con#include <RobojaxBTS7960.h>.

Ejemplos de código y guía paso a paso

Los siguientes fragmentos de código demuestran cómo configurar y controlar los motores utilizando el módulo BTS7960. La configuración inicial define los pines conectados a los motores e inicializa los objetos del motor:


// pins for motor 1
#define RPWM_1 3
#define R_EN_1 4
#define R_IS_1 5
#define LPWM_1 6
#define L_EN_1 7
#define L_IS_1 8

// pins for motor 2
#define RPWM_2 9
#define R_EN_2 10
#define R_IS_2 12
#define LPWM_2 11
#define L_EN_2 A0
#define L_IS_2 A1

#include 
RobojaxBTS7960 motor1(R_EN_1, RPWM_1, R_IS_1, L_EN_1, LPWM_1, L_IS_1, debug);
RobojaxBTS7960 motor2(R_EN_2, RPWM_2, R_IS_2, L_EN_2, LPWM_2, L_IS_2, debug);

Esta sección del código establece las definiciones de pines y crea instancias de la clase `RobojaxBTS7960` para ambos motores. La función `setup()` inicializa los motores y el monitor serial:


void setup() {
  Serial.begin(9600); // setup Serial Monitor
  motor1.begin();
  motor2.begin();
}

Aquí, el método `motor.begin()` prepara cada motor para su funcionamiento, permitiéndote controlarlos en la función `loop()`. En la función `loop()`, puedes controlar los motores con comandos como este:


void loop() {
   motor1.rotate(100, CW); // run motor 1 at 100% speed CW
   delay(5000); // run for 5 seconds
   motor1.stop(); // stop motor 1
   delay(3000); // stop for 3 seconds
   motor2.rotate(100, CCW); // run motor 2 at 100% speed CCW
   delay(5000); // run for 5 seconds
   motor2.stop(); // stop motor 2
   delay(3000); // stop for 3 seconds
}

Esta sección muestra cómo rotar los motores en ambas direcciones y controlar su velocidad. El código completo se carga debajo del artículo para tu referencia.

Demostración / Qué Esperar

Al completar el cableado y cargar el código, deberías observar que los motores giran en ambas direcciones, en sentido horario y antihorario. El código hará funcionar cada motor a toda velocidad durante cinco segundos, se detendrá durante tres segundos y repetirá el proceso. Presta atención a posibles problemas como conexiones invertidas o suministro de energía insuficiente. Si encuentras problemas, verifica nuevamente tu cableado y asegúrate de que la fuente de alimentación sea adecuada (en el video a las 00:00).

Marcas de tiempo del video

  • 00:00 Inicio
  • 00:48 Hardware Explicado
  • 04:06 Hoja de datos vista
  • 07:07 Explicación del cableado
  • 09:00 Código explicado
  • 14:33 Demostración
  • 16:47 Prueba de corriente máxima
  • 19:25 Imagen térmica
  • 19:27 Prueba de código diferente

Imágenes

BTS7960_module-1
BTS7960_module-1
BTS7960_module-2
BTS7960_module-2
BTS7960_module-3
BTS7960_module-3
BTS7960_module-4-heat-sink
BTS7960_module-4-heat-sink
BTS7960-_2_motor_wiring
BTS7960-_2_motor_wiring
203-Arduino Code to control two or more DC motors using BTS7960 motor driver
Idioma: C++
++
/*
* This is the Arduino code for the BTS7960 DC motor driver.
Using this code, you can control more than one motor to rotate in both directions: clockwise (CW) 
and counter-clockwise (CCW).
📚⬇️ Download and resource page for this video https://robojax.com/RJT169
📚⬇️ Download and resource page https://robojax.com/RJT170


Written by Ahmad Shamshiri for Robojax.com on
July 16, 2020 in Ajax, Ontario, Canada.

Watch video instructions for this code:  https://youtu.be/PUL5DZ9TA2o


BTS7960B
If you found this tutorial helpful, please support me so I can continue creating 
content like this. You can support me on Patreon: http://robojax.com/L/?id=63

or make a donation using PayPal: http://robojax.com/L/?id=64

 * This code has been downloaded from Robojax.com
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.

*/

// pins for motor 1
#define RPWM_1 3 // define pin 3 for RPWM pin (output)
#define R_EN_1 4 // define pin 2 for R_EN pin (input)
#define R_IS_1 5 // define pin 5 for R_IS pin (output)

#define LPWM_1 6 // define pin 6 for LPWM pin (output)
#define L_EN_1 7 // define pin 7 for L_EN pin (input)
#define L_IS_1 8 // define pin 8 for L_IS pin (output)
// motor 1 pins end here

// pins for motor 2
#define RPWM_2 9 // define pin 9 for RPWM pin (output)
#define R_EN_2 10 // define pin 10 for R_EN pin (input)
#define R_IS_2 12 // define pin 12 for R_IS pin (output)

#define LPWM_2 11 // define pin 11 for LPWM pin (output)
#define L_EN_2 A0 // define pin 7 for L_EN pin (input)
#define L_IS_2 A1 // define pin 8 for L_IS pin (output)
// motor 2 pins end here



#define CW 1 //
#define CCW 0 //
#define debug 1 //

#include <RobojaxBTS7960.h>
RobojaxBTS7960 motor1(R_EN_1,RPWM_1,R_IS_1, L_EN_1,LPWM_1,L_IS_1,debug);//define motor 1 object
RobojaxBTS7960 motor2(R_EN_2,RPWM_2,R_IS_2, L_EN_2,LPWM_2,L_IS_2,debug);//define motor 2 object and the same way for other motors

void setup() {
  // BTS7960 Motor Control Code by Robojax.com 20190622
  Serial.begin(9600);// setup Serial Monitor to display information

   motor1.begin();
   motor2.begin();   
   
    // BTS7960 Motor Control Code by Robojax.com 20190622 
}

void loop() {
   // BTS7960 Motor Control Code by Robojax.com 20190622 
    motor1.rotate(100,CW);// run motor 1 with 100% speed in CW direction
    delay(5000);//run for 5 seconds
    motor1.stop();// stop the motor 1
    delay(3000);// stop for 3 seconds
    motor1.rotate(100,CCW);// run motor 1 at 100% speed in CCW direction
    delay(5000);// run for 5 seconds
    motor1.stop();// stop the motor 1
    delay(3000);  // stop for 3 seconds

    motor2.rotate(100,CW);// run motor 2 with 100% speed in CW direction
    delay(5000);//run for 5 seconds
    motor2.stop();// stop the motor 2
    delay(3000);// stop for 3 seconds
    motor2.rotate(100,CCW);// run motor 2 at 100% speed in CCW direction
    delay(5000);// run for 5 seconds
    motor2.stop();// stop the motor 2
    delay(3000);  // stop for 3 seconds

    
  // slowly speed up the motor 1 from 0 to 100% speed
    for(int i=0; i<=100; i++){ 
        motor1.rotate(i,CCW);
        delay(50);
    } 
  
   // slow down the motor 2 from 100% to 0
    for(int i=100; i>0; i--){ 
        motor2.rotate(i,CCW);
        delay(50);
    } 
    motor2.stop();// stop motor 2
    delay(3000); // stop for 3 seconds        
 // BTS7960 more than 1 Motor Control Code by Robojax.com 20190622  
}// loop ends

Archivos📁

Bibliotecas de Arduino (zip)

Hoja de datos (pdf)

Archivo de Fritzing