Código de Pesquisa

Controlando um Módulo Driver de Motor DC BTS7960 com um Arduino

Controlando um Módulo Driver de Motor DC BTS7960 com um Arduino

Neste tutorial, aprenderemos como controlar um módulo driver de motor DC BTS7960 usando um Arduino. Esta configuração permite que você controle a direção e a velocidade de um motor DC usando Modulação por Largura de Pulso (PWM). Ao final deste tutorial, você terá um sistema de controle de motor funcional que pode ser facilmente modificado para seus próprios projetos. Para orientação visual detalhada, certifique-se de conferir o vídeo em (no vídeo em 00:00).

BTS7960_módulo-1

Hardware Explicado

O BTS7960 é um driver de motor DC de alta corrente capaz de lidar com até 43 Amperes. Ele consiste em dois circuitos integrados (CIs) que permitem controlar um motor em ambas as direções, horário (CW) e anti-horário (CCW). O driver utiliza sinais PWM para variar a velocidade do motor, o que é essencial para aplicações que requerem controle preciso.

Outro aspecto importante deste módulo são as suas características de detecção de corrente e proteção contra sobretemperatura integradas. Isso ajuda a prevenir danos ao motor e ao driver durante a operação. O módulo é alimentado por uma fonte externa e também requer uma fonte separada de 5V para seus circuitos lógicos.

Detalhes da Ficha Técnica

Fabricante Infineon Technologies
Número da peça BTS7960
Tensão lógica/IO 5 V
Tensão de alimentação 6-27 V
Corrente de saída (por canal) 43 A máx
Corrente de pico (por canal) 60 A
Orientação sobre frequência PWM 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 125 °C máx
Pacote PTO-263-7
Notas / variantes Configuração de Ponte H Dupla

  • Garanta um dissipador de calor adequado para aplicações de alta corrente.
  • Use um fio de espessura adequada para suportar a corrente máxima.
  • Mantenha a frequência PWM dentro dos limites especificados para um desempenho ideal.
  • Implemente capacitores de desacoplamento próximos aos pinos de alimentação para estabilizar a voltagem.
  • Monitore a temperatura durante a operação para evitar superaquecimento.

Instruções de Fiação

BTS7960-_motor_wiring

Para conectar o módulo driver de motor BTS7960 ao seu Arduino, você precisará conectar corretamente os terminais de energia, terra, controle e motor. Comece conectando a fonte de energia ao módulo.B+eB-terminais, garantindo que a polaridade esteja correta. OB+terminal é onde a fonte positiva se conecta, enquantoB-conecta ao chão.

Em seguida, conecte o motor aoM+eM-terminais no módulo. Estes controlarão a direção do motor. Para os pinos de controle, conecte os pinos do Arduino ao módulo da seguinte forma:RPWMpara o pino 3,R_ENpara o pino 4,R_ISpara o pino 5,LPWMpara o pino 6,L_ENpara o pino 7, eL_ISconectar ao pino 8. Certifique-se de conectar o aterramento do Arduino ao aterramento do módulo também.

BTS7960_módulo-2

Instale a biblioteca necessária

Para instalar orobojax_BTS7960_motor_driver_libraryno Arduino IDE, primeiro baixe o arquivo ZIP da biblioteca pelo link fornecido. Com o arquivo salvo, abra seu Arduino IDE e navegue atéEsboço > 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 do Driver de Motor Robojax BTS7960" deve aparecer. Agora você pode incluir o cabeçalho da biblioteca em seu código com#include <RobojaxBTS7960.h>.

Exemplos de Código e Guia

O código Arduino para controlar o driver de motor BTS7960 começa definindo os pinos necessários. Por exemplo, o pino para o sinal PWM direito é definido comoRPWMe configurado para o pino 3. Além disso, o pino de habilitação para o lado direito é definido comoR_ENe configurado para o pino 4.

#define RPWM 3 // define pin 3 for RPWM pin (output)
#define R_EN 4 // define pin 4 for R_EN pin (input)

Esta configuração garante que o motor possa ser controlado com precisão. Nosetup()função, o motor é inicializado commotor.begin(), que prepara o motorista para a operação.

void setup() {
  Serial.begin(9600);// setup Serial Monitor to display information
  motor.begin(); // Initialize motor
}

Noloop()função, a direção e a velocidade do motor são controladas usando omotor.rotate(speed, direction)método. Por exemplo, para operar o motor em plena velocidade no sentido horário, você usariamotor.rotate(100, CW);.

void loop() {
    motor.rotate(100,CW); // run motor with 100% speed in CW direction
    delay(5000); // run for 5 seconds
}

Para exemplos e variações mais detalhados, não deixe de conferir o código completo carregado abaixo do artigo.

Demonstração / O que Esperar

Quando tudo estiver conectado e programado corretamente, você deve esperar que o motor gire em ambas as direções com base no código. Inicialmente, o motor funcionará na velocidade máxima por cinco segundos, parará por três segundos e então girará na direção oposta pela mesma duração. Esse ciclo se repetirá, permitindo que você veja a capacidade de resposta do motor aos sinais de PWM.

Os erros comuns incluem polaridade invertida ao conectar o motor ou a fonte de energia, o que pode danificar os componentes. Além disso, certifique-se de que os pinos PWM estão corretamente atribuídos no código (no vídeo às 12:34).

Marcação de Vídeo

  • 00:00 Início
  • 00:48 Hardware Explicado
  • 04:06 Ficha técnica visualizada
  • 07:07 Explicação da Fiação
  • 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-_motor_wiring
BTS7960-_motor_wiring
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
202-Arduino Code to control BTS7960 Motor Driver
Idioma: C++
/*
* This is the Arduino code for the BTS7960 DC motor driver.
Using this code, you can control a motor to rotate in both directions: clockwise (CW) 
and counter-clockwise (CCW).
Watch the video instructions: https://youtu.be/PUL5DZ9TA2o
📚⬇️ 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 
// June 22, 2019 at 14:08 in Ajax, Ontario, Canada.
Get this code and other Arduino codes from Robojax.com.


* BTS7960B
 * Code is available at http://robojax.com/learn/arduino

 * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.
 * 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/>. 

*/

// 
#define RPWM 3 // define pin 3 for RPWM pin (output)
#define R_EN 4 // define pin 2 for R_EN pin (input)
#define R_IS 5 // define pin 5 for R_IS pin (output)

#define LPWM 6 // define pin 6 for LPWM pin (output)
#define L_EN 7 // define pin 7 for L_EN pin (input)
#define L_IS 8 // define pin 8 for L_IS pin (output)
#define CW 1 //do not change
#define CCW 0 //do not change
#define debug 1 //change to 0 to hide serial monitor debugging information or set to 1 to view

#include <RobojaxBTS7960.h>
RobojaxBTS7960 motor(R_EN,RPWM,R_IS, L_EN,LPWM,L_IS,debug);

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

   motor.begin();
   //watch video for details: https://youtu.be/PUL5DZ9TA2o
   
    // BTS7960 Motor Control Code by Robojax.com 20190622 
}

void loop() {
   // BTS7960 Motor Control Code by Robojax.com 20190622 
      //watch video for details: https://youtu.be/PUL5DZ9TA2o
    motor.rotate(100,CW);// run motor with 100% speed in CW direction
    delay(5000);//run for 5 seconds
    motor.stop();// stop the motor
    delay(3000);// stop for 3 seconds
    motor.rotate(100,CCW);// run motor at 100% speed in CCW direction
    delay(5000);// run for 5 seconds
    motor.stop();// stop the motor
    delay(3000);  // stop for 3 seconds
	// slowly speed up the motor from 0 to 100% speed
    for(int i=0; i<=100; i++){ 
        motor.rotate(i,CCW);
        delay(50);
    } 
	
   // slow down the motor from 100% to 0 with 
    for(int i=100; i>0; i--){ 
        motor.rotate(i,CCW);
        delay(50);
    } 
	
   //watch video for details: https://youtu.be/PUL5DZ9TA2o	
    motor.stop();// stop motor
    delay(3000); // stop for 3 seconds        
 // BTS7960 Motor Control Code by Robojax.com 20190622  
}// loop ends
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

Recursos e referências

Arquivos📁

Bibliotecas do Arduino (zip)

Folha de dados (pdf)

Arquivo Fritzing