samedi 20 août 2011

TB6612FNG


Utilisation du contrôleur pour moteur DC : TB6612FNG



Driver TB6612FNG
Ce composant permet de commander 2 moteurs en courant continu de manière à modifier le sens de rotation et aussi la vitesse.
Voir les détails sur Sparkfun.
J'ai utilisé les information du site mon-club-elec.fr ainsi que le tutoriel que j'ai adapté.


Le montage
C'est le même que le post précédent en simplifié.
L'entrée Stand By doit être alimenté en 5V.
J'ai du ajouté une diode sur l'alimentation 5V moteur ainsi qu'une autre sur la masse, sinon j'avais des retour de tension.
J'obtient toujours les mêmes problèmes de décalage lors des tests. Je vais essayer de les résoudre en mesurant la rotation des roues.


Le programme

const int mDroitAvantPin =  4;
const int mDroitArrierePin =  5;
const int mDroitVitessePin = 6;
const int mGaucheAvantPin =  7;
const int mGaucheArrierePin =  8;
const int mGaucheVitessePin =  9;

void setup() {
  pinMode(mDroitAvantPin, OUTPUT);    
  pinMode(mDroitArrierePin, OUTPUT);
  pinMode(mDroitVitessePin, OUTPUT);
  pinMode(mGaucheAvantPin, OUTPUT);    
  pinMode(mGaucheArrierePin, OUTPUT);
  pinMode(mGaucheVitessePin, OUTPUT);

  analogWrite(mDroitVitessePin, 100);
  analogWrite(mGaucheVitessePin, 100);
}

void loop() {
  avancer(1000,255);
  tournerDroite(255);
  avancer(1000,100);
  tournerGauche(100);
  reculer(1000,100);
  tournerDroite(100);
  reculer(1000,255);
  tournerGauche(255);
  stopper(1000);
}

void changerVitesse(int vitesse) {
  analogWrite(mDroitVitessePin, vitesse);
  analogWrite(mGaucheVitessePin, vitesse);
}

void avancer(int temps, int vitesse) {
  changerVitesse(vitesse);
  digitalWrite(mDroitArrierePin, LOW);
  digitalWrite(mGaucheArrierePin, LOW);
  digitalWrite(mDroitAvantPin, HIGH);
  digitalWrite(mGaucheAvantPin, HIGH);
  delay(temps);
}

void reculer(int temps, int vitesse) {
  changerVitesse(vitesse);
  digitalWrite(mDroitAvantPin, LOW);
  digitalWrite(mGaucheAvantPin, LOW);
  digitalWrite(mDroitArrierePin, HIGH);
  digitalWrite(mGaucheArrierePin, HIGH);
  delay(temps);
}

void tournerDroite(int vitesse) {
  changerVitesse(vitesse);
  digitalWrite(mGaucheAvantPin, LOW);
  digitalWrite(mDroitArrierePin, LOW);
  digitalWrite(mDroitAvantPin, HIGH);
  digitalWrite(mGaucheArrierePin, HIGH);
  delay(50000/vitesse);
}

void tournerGauche(int vitesse) {
  changerVitesse(vitesse);
  digitalWrite(mDroitAvantPin, LOW);
  digitalWrite(mGaucheArrierePin, LOW);
  digitalWrite(mGaucheAvantPin, HIGH);
  digitalWrite(mDroitArrierePin, HIGH);
  delay(50000/vitesse);
}

void stopper(int temps) {
  digitalWrite(mDroitAvantPin, LOW);
  digitalWrite(mGaucheArrierePin, LOW);
  digitalWrite(mGaucheAvantPin, LOW);
  digitalWrite(mDroitArrierePin, LOW);
  delay(temps);
}




Aucun commentaire:

Enregistrer un commentaire