Accueil > ARDUINO > Drivers moteurs > Arduino & driver BTN7971B
vendredi 6 janvier 2017, par
Le driver BTN7971B permet de commander 1 moteur à courant continu dans les 2 sens de rotation avec variation de vitesse ( commande PWM).
Broche | Fonction | Broche | Fonction | |
---|---|---|---|---|
GND | 0V alimentation partie commande | 5V | 5V alimentation partie commande | |
IN1 | commande 1er 1/2 pont en H | IN2 | commande 2ème 1/2 pont en H |
IN1 | IN2 | moteur | |
---|---|---|---|
0 | 0 | Arrêt | |
0 | 1 | rotation sens 1 | |
1 | 0 | rotation sens 2 |
IN1 | IN2 | moteur | |
---|---|---|---|
0 | 0 | Arrêt | |
0 | PWM | rotation sens 1 | |
PWM | 0 | rotation sens 2 |
Côté commande :
Côté puissance (connecteur à vis) :
Exemple 1 : Un programme qui permet de commander en tout ou rien un moteur à courant continu M1 :
commander le moteur pendant 2s,
stopper pendant 2s,
inverser le sens de rotation pendant 2s,
stopper pendant 2s
int IN1 = 5; int IN2 = 6; void setup() { pinMode(IN1, OUTPUT); pinMode(IN2, OUTPUT); } void loop() { digitalWrite(IN1, 1); // rotation sens 1 digitalWrite(IN2, 0); delay(2000); digitalWrite(IN1, 0); // arrêt digitalWrite(IN2, 0); delay(1000); digitalWrite(IN1, 0); // rotation sens 2 digitalWrite(IN2, 1); delay(2000); digitalWrite(IN1, 0); // arrêt digitalWrite(IN2, 0); delay(1000); }
Exemple 2 : On va maintenant commander le moteur en vitesse variable. On va donc utiliser une sortie PWM. Le moteur accélère jusqu’à atteindre sa valeur maximale puis revient à vitesse nulle. Si on souhaite tourner dans l’autre sens, on utilise digitalWrite(IN2, 0) au lieu de digitalWrite(IN1, 0).
La variation de vitesse du MCC est réalisée par la commande PWM (a = rapport cyclique codé sur 8 bit - de 0 à 255 - ) : analogWrite(IN1, a) ;
int IN1 = 5; // commande pont en H "1" int IN2 = 6; // commande pont en H "2" int a; //rapport cyclique entre 0 et 255 void setup() { pinMode(IN1, OUTPUT); pinMode(IN2, OUTPUT); } void loop() { digitalWrite(IN2, 0); a=0; while (a <= 255) { // phase d'accélération. analogWrite(IN1, a); a = a + 1; delay(20); } while (a >=0) { // phase de décélération analogWrite(IN1, a); a = a - 1; delay(20); } }