Blue Flower

Dans cet article, nous allons aborder par la pratique l'utilité d'une carte de puissance, en l’occurrence la carte TB6612FNG afin de faire tourner deux moteurs.

Ceci servira de base à la construction d'une voiture électrique. Chaque roue avant sera alimentée par un des moteurs. En faisant tourner un des moteurs plus vite que l'autre, la voiture pourra ainsi tourner. Dans un autre article, nous verrons comment piloter cette voiture avec un capteur bluetooth avec comme télécommande une tablette android.

Pour piloter la carte de puissance, nous utiliserons une carte Arduino Uno.

Une carte de puissance a pour but de distribuer de la puissance, à la dose souhaitée, à des composants électriques, dans notre cas deux moteurs.

La carte de puissance est donc alimentée par une source d'énergie et la carte Arduino pilote cette carte afin de décider :

  • de la puissance a distribué au moteur, ce qui permettra de le faire tourner plus ou moins vite (notion de PWM)
  • du sens de la tension à appliquer au moteur, ce qui permettra de le faire tourner dans un sens ou dans un autre.

 

Description des broches de la carte de puissance TB6612FNG

Broche côté gauche

GND : vers GND de la carte Uno 

VCC : vers les 5V de la carte Uno

AO1 : vers le pôle - du moteur A

AO2 : vers le pôle + du moteur A => la tension à envoyer au moteur sera proportionnelle à la PWM choisie

BO2 : vers le pôle + du moteur B

BO1 : vers le pôle - du moteur B => la tension à envoyer au moteur sera proportionnelle à la PWM choisie

VMOT : vers le pôle + de la batterie

GND : vers le pôle - de la batterie

 

Broche côté droit

PWMA : vers une broche de type PWM de la carte Arduino => par programmation, on choisira la PWM à appliquer à cette broche, ce qui déterminera la tension à distribuer au moteur via les broches A01 et A02.

AIN2 : cette broche et la suivante permettent de déterminer le sens du courant à diffuser dans les broches A01/A02. Ainsi, pour faire avancer le moteur dans un sens, mettre AIN1 à HIGH, AIN2 à LOW et appliquer de la PWM à PWMA. Cette broche doit donc être reliée à une sortie digitale de la carte Arduino.

AIN1 : pour faire avancer le moteur dans un sens inverse, mettre AIN1 à LOW, AIN2 à HIGH et appliquer de la PWM à PWMA.

STBY : permet d'alumer ou éteindre le moteur. Il faut donc relier cette broche à une sortie digital de la carte Arduino

BIN1 : même logique que AIN1, mais pour contrôler un deuxième moteur que l'on nommera B

BIN2 : même logique que AIN2, mais pour contrôler un deuxième moteur que l'on nommera B

PWMB - même logique que PWMA mais pour contrôler la puissance du moteur nommé B

GND : à relier à GND de la carte Arduino.

 

Le code

Pour tester la voiture, on fera successivement :

  • avance la voiture tout droit en distribuant la même puissance aux moteurs A et B
  • tourner la voiture à droite en faisant tourner les roues de gauche un peu plus vite
  • tourner la voiture à gauche en faisant tourner les roues de droite un peu plus vite
  • reculer la voiture
  • arrêter la voiture.

Le code ci-dessous indique les branchements entre la carte de puissance et l'arduino :

 

/* cablage des broches de la carte de puissance TB6612FNG vers la carte arduino */
#define PWMA 3
#define AIN1 2
#define AIN2 4
#define PWMB 5
#define BIN1 2
#define BIN2 4
#define STBY 6

 
void setup()
{
  /* definition des broches de la carte de puissance en tant que sortie */
  pinMode(PWMA,OUTPUT);
  pinMode(AIN1,OUTPUT);
  pinMode(AIN2,OUTPUT);
  pinMode(PWMB,OUTPUT);
  pinMode(BIN1,OUTPUT);
  pinMode(BIN2,OUTPUT);
  pinMode(STBY,OUTPUT);
  // Ouvre la voie série avec l'ordinateur
  Serial.begin(9600);
}
 
void loop() 
{
  startUp(); // on met la broche standby à HIGH
  goForward(30); // on avance avec une PWM de 30 pour les deux moteurs, donc on avance droit
  delay(5000); // on attend 5 secondes
  rotateRight(30); // on tourne a droite avec une pwm de 2*30 pour la roue gauche (moteur A) et de 30 pour la roue droite
  delay(2000); // on attend 2 secondes  
  rotateLeft(30); // on tourne a gauche avec une pwm de 30 pour la roue gauche et de 2*30 pour la roue droite
  delay(2000); // on attend 2 secondes
  shutDown(); // on met la broche standby à LOW, donc le moetr s'arrete
  startUp(); // on met la broche standby à HIGH
  goBackward(30); // on applique une PWD de 30 en ayant changé la polarité des tensions à appliquer aux moteurs pour faire tourner les moteurs dans le sens inverse
  delay(5000); // on attend 5 secondes
  shutDown(); // on arrete les moteurs avec broche standby à LOW
}


void startUp ()
{
  Serial.println("in startUp");
  digitalWrite(STBY,HIGH);
}

void shutDown ()
{
  Serial.println("in shutDown");
  digitalWrite(STBY,LOW);
}

void goForward (int pwm)
{
  Serial.println("in goForward");
  digitalWrite (AIN1,HIGH);
  digitalWrite (AIN2,LOW);
  analogWrite(PWMA,pwm);
  analogWrite(PWMB,pwm);  
}

void goBackward (int pwm)
{
  Serial.println("in goBackward");
  digitalWrite (AIN1,LOW);
  digitalWrite (AIN2,HIGH);
  analogWrite(PWMA,pwm);
  analogWrite(PWMB,pwm);    
}

void rotateRight (int pwm)
{
 Serial.println("in rotateRight");
 analogWrite(PWMA,2*pwm);
 analogWrite(PWMB,pwm); 
}

void rotateLeft (int pwm)
{
  Serial.println("in rotateLeft");
  analogWrite(PWMA,pwm);
  analogWrite(PWMB,2*pwm);   
}


 

Matériel nécessaire

  • Une carte Arduino Uno
  • Deux moteurs de Pololu modèle "50:1 Micro Metal Gearmotor HP with Extended Motor Shaft"
  • Deux roues de Pololu modèle "Pololu Wheel 42×19mm Pair"
  • Une carte de puissance de Pololu modèle "TB6612FNG Dual motor driver carrier"
  • Une pile de 9V

Ce qui donne :

 

Bibliographie

Ci-dessous l'exemple en anglais qui traite de ce sujet :

http://www.embeddedrelated.com/showarticle/498.php