Controllo di più motori DC utilizzando un modulo BTS7960 con Arduino
In questo tutorial, esploreremo come controllare più motori CC utilizzando il modulo BTS7960 con un Arduino. Il BTS7960 è un potente driver per motori in grado di gestire alte correnti e consente un controllo preciso della direzione e della velocità del motore tramite PWM (Modulazione di Ampiezza Impulso). Alla fine di questo progetto, avrete un setup funzionante in grado di controllare due motori CC, facendoli ruotare in entrambe le direzioni, oraria e antioraria. Questo tutorial vi guiderà attraverso la configurazione hardware, le istruzioni di cablaggio e il codice necessario per far funzionare i motori. Per una comprensione più chiara dell'intero processo, assicuratevi di controllare il video accompagnatorio (nel video a :00).
Hardware Spiegato
Il componente principale di questo progetto è il modulo driver per motore BTS7960. Questo modulo include due driver a ponte H che possono controllare la direzione dei motori invertendo la polarità della tensione applicata al motore. Ogni driver può gestire fino a 43A di corrente, il che lo rende adatto per applicazioni ad alta potenza. Il modulo dispone anche di protezione integrata contro situazioni di sovratemperatura e sovracorrente. Oltre al BTS7960, avrai bisogno di una scheda Arduino per controllare i motori. L'Arduino invia segnali PWM al driver del motore, consentendoti di regolare la velocità e la direzione dei motori. Le connessioni tra l'Arduino e il modulo BTS7960 sono cruciali, poiché determinano come i motori risponderanno ai segnali.
Dettagli della scheda tecnica
| Produttore | Infineon Technologies |
|---|---|
| Numero di parte | BTS7960 |
| Tensione logica/IO | 3,3 V a 5 V |
| Tensione di alimentazione | 5-40 V |
| Corrente di uscita (per canale) | 43 A max |
| Corrente di picco (per canale) | 60 A |
| Guida sulla frequenza PWM | 5-25 kHz |
| Soglie logiche di ingresso | 0,8 V (alto), 0,3 V (basso) |
| Caduta di tensione / RDS(on)/ saturazione | 16 mΩ |
| Limiti termici | 150 °C max |
| Pacchetto | TO-263 |
| Note / varianti | Configurazione a doppio ponte H |
- Assicurati di avere una corretta dissipazione del calore quando operi a correnti elevate.
- Utilizzare il calibro di filo appropriato per le connessioni di alimentazione.
- Controlla nuovamente i collegamenti dei pin tra l'Arduino e il BTS7960.
- Implementare il limite di corrente per prevenire danni al modulo.
- Usa condensatori di disaccoppiamento vicino all'alimentazione per la stabilità.
Istruzioni di cablaggio

Per collegare il modulo BTS7960 all'Arduino, segui attentamente queste connessioni: 1. **Collegamenti di alimentazione**: Collega il terminale positivo della tua fonte di alimentazione al terminale B+ del modulo BTS7960 e il terminale negativo al terminale B-. Assicurati che la fonte di alimentazione corrisponda ai requisiti di tensione dei tuoi motori. 2. **Collegamenti del motore**: Collega i fili del motore ai terminali M+ e M- del modulo. Questo permetterà al modulo di controllare il motore. 3. **Piedini dell'Arduino**: Collega i seguenti piedini dell'Arduino al modulo BTS7960: - Pin 3 (RPWM) al pin RPWM del modulo. - Pin 4 (R_EN) al pin R_EN del modulo. - Pin 5 (R_IS) al pin R_IS del modulo. - Pin 6 (LPWM) al pin LPWM del modulo. - Pin 7 (L_EN) al pin L_EN del modulo. - Pin 8 (L_IS) al pin L_IS del modulo. 4. **Collegamenti di massa**: Collega il piedino di massa dell'Arduino al piedino di massa del modulo BTS7960 per garantire un riferimento comune per i segnali. Assicurati che tutte le connessioni siano sicure per evitare comportamenti imprevisti durante il funzionamento.
Installa la libreria richiesta
Per installare ilrobojax_BTS7960_motor_driver_librarynell'IDE di Arduino, prima scarica il file ZIP della libreria dal link fornito. Con il file salvato, apri il tuo IDE di Arduino e vai aSchizzo > Includi Libreria > Aggiungi Libreria .ZIP...Nel dialogo di selezione del file, cerca il file ZIP scaricato, selezionalo e fai clic su "Apri". L'IDE installerà quindi la libreria. Puoi confermare un'installazione riuscita controllando ilFile > Esempimenu, dove dovrebbe apparire una nuova categoria chiamata "Robojax BTS7960 Motor Driver Library". Ora puoi includere l'intestazione della libreria nel tuo codice con#include <RobojaxBTS7960.h>.
Esempi di codice e guida passo passo
I seguenti frammenti di codice dimostrano come configurare e controllare i motori utilizzando il modulo BTS7960. La configurazione iniziale definisce i pin collegati ai motori e inizializza gli oggetti motore:
// 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);
Questa sezione di codice definisce i pin e crea istanze della classe `RobojaxBTS7960` per entrambi i motori. La funzione `setup()` inizializza i motori e il monitor seriale:
void setup() {
Serial.begin(9600); // setup Serial Monitor
motor1.begin();
motor2.begin();
}
Qui, il metodo `motor.begin()` prepara ogni motore per il funzionamento, permettendoti di controllarli nella funzione `loop()`. Nella funzione `loop()`, puoi controllare i motori con comandi come questo:
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
}
Questa sezione mostra come ruotare i motors in entrambe le direzioni e controllare la loro velocità. Il codice completo è caricato sotto l'articolo per il tuo riferimento.
Dimostrazione / Cosa Aspettarsi
Completando il cablaggio e caricando il codice, dovresti osservare i motori ruotare in entrambe le direzioni, oraria e antioraria. Il codice farà funzionare ogni motore a piena velocità per cinque secondi, si fermerà per tre secondi e ripeterà il processo. Fai attenzione a eventuali problemi come connessioni invertite o fornitura di energia insufficiente. Se incontri problemi, controlla di nuovo il tuo cablaggio e assicurati che la fonte di alimentazione sia adeguata (nel video a 00:00).
Timestamp video
- 00:00 Inizio
- 00:48 Spiegazione dell'hardware
- 04:06 Scheda tecnica visualizzata
- 07:07 Spiegazione del cablaggio
- 09:00 Codice spiegato
- 14:33 Dimostrazione
- 16:47 Test di corrente massimo
- 19:25 Immagine termica
- 19:27 Test codice diverso
++
/*
* 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
Risorse e riferimenti
-
EsternoAcquista BTS7960 su Amazonamzn.to
-
Esterno
-
Esterno
-
EsternoBTS7960 Amazon Giapponeamzn.to
-
EsternoBTS7960 su Amazon Franciaamzn.to
-
EsternoBTS7960 su Amazon Italiaamzn.to
-
EsternoBTS7960 su Amazon Spagnaamzn.to
-
EsternoBTS7960, Amazon Germaniaamzn.to
-
EsternoScheda tecnica del modulo BTS7960 (PDF)handsontec.com
File📁
Librerie Arduino (zip)
-
robojax_BTS7960_libreria_driver_motore
robojax_BTS7960_motor_driver_library.zip0.10 MB
Scheda tecnica (pdf)
-
BTS7960_datasheet
BTS7960_datasheet.pdf0.45 MB
File Fritzing
-
BTS7960_driver
BTS7960_driver.fzpz0.01 MB