Código de Pesquisa

Controlando Múltiplos Motores DC Usando um Módulo BTS7960 com Arduino

Controlando Múltiplos Motores DC Usando um Módulo BTS7960 com Arduino

Neste tutorial, vamos explorar como controlar múltiplos motores DC usando o módulo BTS7960 com um Arduino. O BTS7960 é um poderoso driver de motor capaz de lidar com altas correntes e permite o controle preciso da direção e velocidade do motor através de PWM (Modulação por Largura de Pulso). Ao final deste projeto, você terá uma configuração funcional que pode controlar dois motores DC, girando-os em ambas as direções, horário e anti-horário. Este tutorial o guiará através da configuração de hardware, instruções de cabeamento e o código necessário para operar os motores. Para uma compreensão mais clara de todo o processo, certifique-se de conferir o vídeo acompanhante (no vídeo em 00:00).

BTS7960_módulo-3

Hardware Explicado

O componente principal deste projeto é o módulo driver de motor BTS7960. Este módulo inclui dois drivers em ponte H que podem controlar a direção dos motores mudando a polaridade da tensão aplicada ao motor. Cada driver pode suportar até 43A de corrente, o que o torna adequado para aplicações de alta potência. O módulo também possui proteção embutida contra situações de sobretemperatura e sobrecorrente. Além do BTS7960, você precisará de uma placa Arduino para controlar os motores. O Arduino envia sinais PWM para o driver do motor, permitindo que você ajuste a velocidade e a direção dos motores. As conexões entre o Arduino e o módulo BTS7960 são cruciais, pois ditam como os motores responderão aos sinais.

Detalhes da Ficha Técnica

Fabricante Infineon Technologies
Número da peça BTS7960
Tensão de lógica/IO 3,3 V a 5 V
Tensão de alimentação 5-40 V
Corrente de saída (por canal) 43 A max
Corrente de pico (por canal) 60 A
Orientação sobre a frequência PWM 5-25 kHz
Limiares de lógica de entrada 0,8 V (alto), 0,3 V (baixo)
Queda de tensão / RDS(on)saturação 16 mΩ
Limites térmicos 150 °C max
Pacote TO-263
Notas / variantes Configuração de ponte H dupla

  • Certifique-se de um dissipador de calor adequado ao operar em altas correntes.
  • Use o cumprimento de fio apropriado para conexões de energia.
  • Verifique novamente as conexões dos pinos entre o Arduino e o BTS7960.
  • Implemente a limitação de corrente para evitar danos ao módulo.
  • Use capacitores de desacoplamento próximos à fonte de alimentação para estabilidade.
BTS7960_módulo-2

Instruções de fiação

BTS7960-_2_motor_wiring

Para conectar o módulo BTS7960 ao Arduino, siga estas conexões cuidadosamente: 1. **Conexões de Alimentação**: Conecte o terminal positivo da sua fonte de alimentação ao terminal B+ no módulo BTS7960, e o terminal negativo ao terminal B-. Certifique-se de que a fonte de alimentação corresponda aos requisitos de voltagem dos seus motores. 2. **Conexões do Motor**: Conecte os fios do motor aos terminais M+ e M- no módulo. Isso permitirá que o módulo controle o motor. 3. **Pinos do Arduino**: Conecte os seguintes pinos no Arduino ao módulo BTS7960: - Pino 3 (RPWM) ao pino RPWM no módulo. - Pino 4 (R_EN) ao pino R_EN no módulo. - Pino 5 (R_IS) ao pino R_IS no módulo. - Pino 6 (LPWM) ao pino LPWM no módulo. - Pino 7 (L_EN) ao pino L_EN no módulo. - Pino 8 (L_IS) ao pino L_IS no módulo. 4. **Conexões de Terra**: Conecte o pino de terra do Arduino ao pino de terra no módulo BTS7960 para garantir uma referência comum para os sinais. Certifique-se de que todas as conexões estão seguras para evitar qualquer comportamento inesperado durante a operação.

Instale a biblioteca necessária

Para instalar orobojax_BTS7960_motor_driver_libraryno IDE Arduino, primeiro baixe o arquivo ZIP da biblioteca no link fornecido. Com o arquivo salvo, abra seu IDE Arduino e navegue atéSketch > Incluir Biblioteca > Adicionar Biblioteca .ZIP...No arquivo de seleção, navegue até o arquivo ZIP baixado, selecione-o e clique em "Abrir". O IDE então instalará a biblioteca. Você pode confirmar uma instalação bem-sucedida verificando oArquivo > Exemplosmenu, onde uma nova categoria chamada "Biblioteca de Driver de Motor Robojax BTS7960" deve aparecer. Agora você pode incluir o cabeçalho da biblioteca no seu código com#include <RobojaxBTS7960.h>.

Exemplos de Código e Tutorial

Os trechos de código a seguir demonstram como configurar e controlar os motores usando o módulo BTS7960. A configuração inicial define os pinos conectados aos motores e inicializa os objetos dos motores:


// 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 seção do código configura as definições dos pinos e cria instâncias da classe `RobojaxBTS7960` para ambos os motores. A função `setup()` inicializa os motores e o monitor serial:


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

Aqui, o método `motor.begin()` prepara cada motor para operação, permitindo que você os controle na função `loop()`. Na função `loop()`, você pode controlar os motores com 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 seção mostra como girar os motores em ambas as direções e controlar sua velocidade. O código completo está carregado abaixo do artigo para sua referência.

Demonstração / O que Esperar

Após concluir a fiação e carregar o código, você deve observar os motores girando em ambas as direções, horário e anti-horário. O código fará cada motor funcionar em velocidade total por cinco segundos, parar por três segundos e repetir o processo. Fique atento a quaisquer problemas potenciais, como conexões invertidas ou fonte de energia insuficiente. Se você encontrar problemas, verifique novamente sua fiação e garanta que a fonte de energia seja adequada (no vídeo em 00:00).

Marcas de Tempo do Vídeo

  • 00:00 Início
  • 00:48 Hardware Explicado
  • 04:06 Ficha técnica visualizada
  • 07:07 Fiação Explicada
  • 09:00 Código explicado
  • 14:33 Demonstração
  • 16:47 Teste de corrente máxima
  • 19:25 Imagem térmica
  • 19:27 Teste de código diferente

Imagens

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

Arquivos📁

Bibliotecas do Arduino (zip)

Folha de dados (pdf)

Arquivo Fritzing