Code de recherche

Contrôler plusieurs moteurs CC à l'aide d'un module BTS7960 avec Arduino

Contrôler plusieurs moteurs CC à l'aide d'un module BTS7960 avec Arduino

Dans ce tutoriel, nous allons explorer comment contrôler plusieurs moteurs à courant continu en utilisant le module BTS7960 avec un Arduino. Le BTS7960 est un puissant pilote de moteur capable de gérer des courants élevés et permet un contrôle précis de la direction et de la vitesse du moteur grâce à la PWM (Modulation de Largeur d'Impulsion). À la fin de ce projet, vous aurez une configuration fonctionnelle capable de contrôler deux moteurs à courant continu, les faisant tourner dans les directions horaire et antihoraire. Ce tutoriel vous guidera à travers la configuration matérielle, les instructions de câblage et le code nécessaire pour faire fonctionner les moteurs. Pour une compréhension plus claire de l'ensemble du processus, assurez-vous de consulter la vidéo qui l'accompagne (dans la vidéo à 00:00).

BTS7960_module-3

Matériel expliqué

Le composant principal de ce projet est le module de pilote de moteur BTS7960. Ce module comprend deux pilotes en pont H qui peuvent contrôler la direction des moteurs en inversant la polarité de la tension appliquée au moteur. Chaque pilote peut gérer jusqu'à 43A de courant, ce qui le rend adapté aux applications haute puissance. Le module dispose également d'une protection intégrée contre les situations de surchauffe et de surintensité. En plus du BTS7960, vous aurez besoin d'une carte Arduino pour contrôler les moteurs. L'Arduino envoie des signaux PWM au pilote de moteur, vous permettant d'ajuster la vitesse et la direction des moteurs. Les connexions entre l'Arduino et le module BTS7960 sont cruciales, car elles déterminent comment les moteurs réagiront aux signaux.

Détails de la fiche technique

Fabricant Infineon Technologies
Numéro de pièce BTS7960
Tension logique/IO 3,3 V à 5 V
Tension d'alimentation 5-40 V
Courant de sortie (par canal) 43 A max
Courant de crête (par canal) 60 A
Directives sur la fréquence PWM 5-25 kHz
Seuils logiques d'entrée 0,8 V (haut), 0,3 V (bas)
Chute de tension / RDS(on)/ saturation 16 mΩ
Limites thermiques 150 °C max
Paquet TO-263
Remarques / variantes Configuration en pont H double

  • Assurez-vous d'un bon échange thermique lors de l'utilisation à de fortes intensités.
  • Utilisez le calibre de fil approprié pour les connexions d'alimentation.
  • Vérifiez à nouveau les correspondances de broches entre l'Arduino et le BTS7960.
  • Mettre en œuvre une limitation de courant pour prévenir les dommages au module.
  • Utilisez des condensateurs de découplage près de l'alimentation pour la stabilité.
BTS7960_module-2

Instructions de câblage

BTS7960-_2_motor_wiring

Pour câbler le module BTS7960 à l'Arduino, suivez ces connexions attentivement : 1. **Connexions d'alimentation** : Connectez la borne positive de votre source d'alimentation à la borne B+ du module BTS7960, et la borne négative à la borne B-. Assurez-vous que la source d'alimentation correspond aux exigences de tension de vos moteurs. 2. **Connexions de moteur** : Connectez les fils du moteur aux bornes M+ et M- sur le module. Cela permettra au module de contrôler le moteur. 3. **Pins Arduino** : Connectez les pins suivants de l'Arduino au module BTS7960 : - Pin 3 (RPWM) au pin RPWM sur le module. - Pin 4 (R_EN) au pin R_EN sur le module. - Pin 5 (R_IS) au pin R_IS sur le module. - Pin 6 (LPWM) au pin LPWM sur le module. - Pin 7 (L_EN) au pin L_EN sur le module. - Pin 8 (L_IS) au pin L_IS sur le module. 4. **Connexions de masse** : Connectez la broche de masse de l'Arduino à la broche de masse sur le module BTS7960 pour assurer une référence commune pour les signaux. Assurez-vous que toutes les connexions sont sécurisées pour éviter tout comportement inattendu lors de l'opération.

Installer la bibliothèque requise

Pour installer lerobojax_BTS7960_motor_driver_librarydans l'IDE Arduino, téléchargez d'abord le fichier ZIP de la bibliothèque à partir du lien fourni. Une fois le fichier enregistré, ouvrez votre IDE Arduino et naviguez versEsquisse > Inclure la bibliothèque > Ajouter une bibliothèque .ZIP...Dans la boîte de dialogue de sélection de fichier, parcourez le fichier ZIP téléchargé, sélectionnez-le et cliquez sur "Ouvrir". L'IDE installera ensuite la bibliothèque. Vous pouvez confirmer une installation réussie en vérifiant leFichier > Exemplesmenu, où une nouvelle catégorie nommée "Bibliothèque de pilotes de moteur Robojax BTS7960" devrait apparaître. Vous pouvez maintenant inclure l'en-tête de la bibliothèque dans votre code avec#include <RobojaxBTS7960.h>.

Exemples de code et guide pas à pas

Les extraits de code suivants démontrent comment configurer et contrôler les moteurs en utilisant le module BTS7960. La configuration initiale définit les broches connectées aux moteurs et initialise les objets moteur :


// 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);

Cette section de code définit les broches et crée des instances de la classe `RobojaxBTS7960` pour les deux moteurs. La fonction `setup()` initialise les moteurs et le moniteur série :


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

Ici, la méthode `motor.begin()` prépare chaque moteur à fonctionner, vous permettant de les contrôler dans la fonction `loop()`. Dans la fonction `loop()`, vous pouvez contrôler les moteurs avec des commandes comme ceci :


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
}

Cette section montre comment faire tourner les moteurs dans les deux directions et contrôler leur vitesse. Le code complet est chargé en dessous de l'article pour votre référence.

Démonstration / À quoi s'attendre

Une fois le câblage terminé et le code téléchargé, vous devriez observer les moteurs tourner dans le sens des aiguilles d'une montre et dans le sens inverse. Le code fera fonctionner chaque moteur à pleine vitesse pendant cinq secondes, s'arrêtera pendant trois secondes et répétera le processus. Surveillez d'éventuels problèmes tels que des connexions inversées ou une alimentation insuffisante. Si vous rencontrez des problèmes, vérifiez à nouveau votre câblage et assurez-vous que la source d'alimentation est adéquate (dans la vidéo à 00:00).

Horodatages de vidéo

  • 00:00 Début
  • 00:48 Matériel expliqué
  • 04:06 Fiche technique consultée
  • 07:07 Explication du câblage
  • 09:00 Code expliqué
  • 14:33 Démonstration
  • 16:47 Test de courant maximum
  • 19:25 Image thermique
  • 19:27 Test de code différent

Images

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
Langue: 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

Fichiers📁

Bibliothèques Arduino (zip)

Fiche technique (pdf)

Fichier Fritzing