Logo Mon Club Elec

Contrôle du sens de rotation d’un moteur CC (courant continu) à l’aide d’un bouton poussoir

Le contrôle du sens de rotation d’un moteur CC (courant continu) est une tâche importante pour de nombreuses applications industrielles et domestiques. La plupart des moteurs CC sont contrôlés par un variateur de vitesse, mais il est possible de contrôler le sens de rotation d’un moteur CC à l’aide d’un simple bouton poussoir. Dans cet article, nous allons examiner les différentes méthodes pour contrôler le sens de rotation d’un moteur CC à l’aide d’un bouton poussoir et discuter des avantages et des inconvénients de chaque méthode.

Contrôle du sens de rotation d’un moteur CC (courant continu) à l’aide d’un bouton poussoir

1.  Présentation

Ce programme contrôle le sens de rotation d’un moteur CC à l’aide d’un bouton poussoir : un appui sur un BP inverse le sens de rotation du moteur.

Ce programme utilise une interface moteur de puissance double driver (basée sur un ci tb6612)
Plus d’infos ici : Carte double driver de moteur 1A basé sur le CI tb6612fng
Disponible par exemple ici (6 Euros) : http://www.watterott.com/Motor-Driver-1A-Dual-TB6612FNG_1

2.  Matériel Nécessaire

2.1  L’espace de développement Arduino

  • … pour éditer, compiler le programme et programmer la carte Arduino.

2.2  Le matériel suivant pour réaliser le montage associé

  • une plaque d’essai pour montage sans soudures,
  • des straps,
  • un bouton poussoir pour CI,
  • un moto-réducteur CC
  • ou un moteur cc
  • une interface moteur de puissance double driver (basée sur un ci tb6612)

Disponible ici (6 Euros) : http://www.watterott.com/Motor-Driver-1A-Dual-TB6612FNG_1
Plus d’infos ici : Carte double driver de moteur 1A basé sur le CI tb6612fng

3.  Instructions de montage

  • Connecter sur la broche 2 (configurée en entrée) un Bouton Poussoir connecté à la masse (0V)
  • Connecter sur la broche 5 (configurée en sortie) la broche IN1 de l’interface moteur
  • Connecter sur la broche 4 (configurée en sortie) la broche IN2 de l’interface moteur
  • Connecter sur la broche 3 (configurée en sortie) la broche PWM de l’interface moteur

4.  Le schéma théorique du montage


Le schéma théorique du montage

5.  Le circuit du montage


Le schéma du montage à réaliser

Pour mémoire, le brochage du double driver basé sur le ci TB6612:

6.  Explication du programme

6.1  Structure globale du programme

Ce programme simple comprend :

  • une entête déclarative
  • une partie « configuration » qui ne sera exécutée qu’une fois (fonction setup( ) )
  • une partie constituée d’une boucle sans fin que le programme répètera à l’infini ( fonction loop( ) ) : c’est le coeur du programme.

6.2  Déroulement du programme

Le programme se déroule de la façon suivante :

  • Après avoir pris en compte les instructions de la partie déclarative,
  • puis après avoir exécuté la partie configuration ( fonction setup( ) ),
  • le programme bouclera sans fin ( fonction loop ( ) ), exécutant de façon répétée le code compris dans la boucle sans fin.

Le déroulement du programme

7.  Au niveau de la partie déclarative :

Déclaration de constantes utiles

  • On déclare les constantes utiles dans le programme :
    • Déclaration des constantes utiles pour l’utilisation des boutons poussoirs :
const int APPUI=0; // constante état du BP - appui sur niveau bas
const int PAS_APPUI=1; // constante état du BP - relâché sur niveau haut

Déclaration des constantes de broches

  • Déclaration des constantes pour les broches utilisées dans le programme :
const int BP=2; //declaration constante de broche 
const int SENS_AR=5; //declaration constante de broche 
const int SENS_AV=4; //declaration constante de broche 
const int VITESSE=3; //declaration constante de broche 

Déclaration des variables globales

  • Déclaration des variables globales du programmes :
    • Déclaration d’une variable globale utile pour l’utilisation des boutons poussoirs :
int ETAT_BP=0; // variable témoin de l'état du BP
  • Déclaration d’une variable pour le comptage du nombre d’appui sur le bouton poussoir :
int compt=0; // variable pour comptage du nombre d'appui

8.  Au niveau de la fonction d’initialisation setup( ) :

configuration des broches utilisées :

  • Configuration des broches en sortie :
pinMode(SENS_AR, OUTPUT); //met la broche en sortie 
pinMode(SENS_AV, OUTPUT); //met la broche en sortie 
pinMode(VITESSE, OUTPUT); //met la broche en sortie 
  • Configuration des broches en entrée :
pinMode(BP, INPUT); //met la broche en entree 
  • Activation du rappel au + interne des broches en entrée si nécessaire :
digitalWrite(BP, HIGH) ; // activation du pullup de la broche en entrée
  • Initialisation des broches utilisées en sortie pour la commande du moteur CC :
// moteur à l'arrêt au démarrage
digitalWrite(SENS_AR, LOW) ; // controle sens AR
digitalWrite(SENS_AV, LOW) ; // controle sens AV

// mode simplifié avec PWM vitesse pas utilisée 
digitalWrite(VITESSE, HIGH) ; // vitesse maximale - PWM non utilisée

9.  Au niveau de la boucle principale, la fonction loop ( ) :

  • On teste l’état du BP et on incrémente une variable qui compte le nombre d’appui
  • En fonction du nombre d’appui, on réalise soit la marche avant, soit l’arrêt soit la marche arrière
  • Une pause permet d’éviter que le même appui soit pris en compte à 2 reprises

if (digitalRead(BP)==APPUI) { // test état du BP

 compt=compt+1; // incrémente la variable compt
 if (compt==4) compt=0; // RAZ variable compt de 3=>0

 if (compt==0){ 
  // moteur à l'arrêt 
  digitalWrite(SENS_AR, LOW) ; // controle sens AR
  digitalWrite(SENS_AV, LOW) ; // controle sens AV
 }

 if (compt==1){ 
  // moteur en marche arrière 
  digitalWrite(SENS_AR, HIGH) ; // sens AR en marche
  digitalWrite(SENS_AV, LOW) ; // sens AV à l'arrêt
 }

 if (compt==2){ 
  // moteur à l'arrêt 
  digitalWrite(SENS_AR, LOW) ; // controle sens AR
  digitalWrite(SENS_AV, LOW) ; // controle sens AV
 }

 if (compt==3){ 
  // moteur en marche avant 
  digitalWrite(SENS_AR, LOW) ; // sens AR à l'arrêt
  digitalWrite(SENS_AV, HIGH) ; // sens AV en marche
 }


 delay(300); // pause anti-rebond entre 2 appuis

}

10.  Mise en oeuvre du programme

10.1  Préparation du montage et programmation de la carte Arduino :

  • Commencer par réaliser le montage indiqué sur plaque d’expérimentation
  • Ensuite, programmer la carte Arduino avec ce programme (en bas de page) selon la procédure habituelle

10.2  Fonctionnement

  • Au démarrage, le moteur ne tourne pas
  • Au premier appui, le moteur tourne dans un sens
  • Au second appui, le moteur s’arrête
  • Au troisième appui, le moteur tourne dans l’autre sens
  • Au quatrième appui, le moteur s’arrête et ainsi de suite…

11.  Le programme complet en langage Arduino :

A copier/coller directement dans l’éditeur Arduino


// --- Programme Arduino ---
// par X. HINAULT - 02/2010 

// --- Que fait ce programme ? ---
/* contrôle le sens de rotation d'un moteur CC à l'aide d'un bouton poussoir : 
un appui sur un BP inverse le sens de rotation du moteur*/

// --- Fonctionnalités utilisées ---

// --- Circuit à réaliser ---
// Connecter  sur la broche 2 (configurée en entrée) un Bouton Poussoir connecté à la masse (0V)
// Connecter  sur la broche 5 (configurée en sortie) la broche IN1 de l'interface moteur
// Connecter  sur la broche 4 (configurée en sortie) la broche IN2 de l'interface moteur
// Connecter  sur la broche 3 (configurée en sortie) la broche PWM de l'interface moteur

//**************** Entête déclarative *******
// A ce niveau sont déclarées les librairies, les constantes, les variables...

// --- Inclusion des librairies utilisées ---

// --- Déclaration des constantes ---
const int APPUI=0; // constante état du BP - appui sur niveau bas
const int PAS_APPUI=1; // constante état du BP - relâché sur niveau haut


// --- constantes des broches ---

const int BP=2; //declaration constante de broche 

const int SENS_AR=5; //declaration constante de broche - controle sens ARRIERE
const int SENS_AV=4; //declaration constante de broche - controle sens AVANT
const int VITESSE=3; //declaration constante de broche - controle vitesse

// --- Déclaration des variables globales ---
int ETAT_BP=0; // variable témoin de l'état du BP

int compt=0; // variable pour comptage du nombre d'appui

// --- Déclaration des objets utiles pour les fonctionnalités utilisées ---

//**************** FONCTION SETUP = Code d'initialisation *****
// La fonction setup() est exécutée en premier et 1 seule fois, au démarrage du programme

void setup()   { // debut de la fonction setup()

// --- ici instructions à exécuter au démarrage --- 


// ------- Broches en sortie -------  

pinMode(SENS_AR, OUTPUT); //met la broche en sortie 
pinMode(SENS_AV, OUTPUT); //met la broche en sortie 
pinMode(VITESSE, OUTPUT); //met la broche en sortie 

// ------- Broches en entrée -------  

pinMode(BP, INPUT); //met la broche en entree 

// ------- Activation du rappel au + interne des broches en entrée si nécessaire -------  

digitalWrite(BP, HIGH) ; // activation du pullup de la broche en entrée

// ---- Initialisation de broches utilisées ---

// moteur à l'arrêt au démarrage
digitalWrite(SENS_AR, LOW) ; // controle sens AR
digitalWrite(SENS_AV, LOW) ; // controle sens AV

// mode simplifié avec PWM vitesse pas utilisée 
digitalWrite(VITESSE, HIGH) ; // vitesse maximale - PWM non utilisée


} // fin de la fonction setup()
// ********************************************************************************

//*************** FONCTION LOOP = Boucle sans fin = coeur du programme *************
// la fonction loop() s'exécute sans fin en boucle aussi longtemps que l'Arduino est sous tension

void loop(){ // debut de la fonction loop()

// --- ici instructions à exécuter par le programme principal --- 

if (digitalRead(BP)==APPUI) { // test état du BP

 compt=compt+1; // incrémente la variable compt
 if (compt==4) compt=0; // RAZ variable compt de 3=>0

 if (compt==0){ 
  // moteur à l'arrêt 
  digitalWrite(SENS_AR, LOW) ; // controle sens AR
  digitalWrite(SENS_AV, LOW) ; // controle sens AV
 }

 if (compt==1){ 
  // moteur en marche arrière 
  digitalWrite(SENS_AR, HIGH) ; // sens AR en marche
  digitalWrite(SENS_AV, LOW) ; // sens AV à l'arrêt
 }

 if (compt==2){ 
  // moteur à l'arrêt 
  digitalWrite(SENS_AR, LOW) ; // controle sens AR
  digitalWrite(SENS_AV, LOW) ; // controle sens AV
 }

 if (compt==3){ 
  // moteur en marche avant 
  digitalWrite(SENS_AR, LOW) ; // sens AR à l'arrêt
  digitalWrite(SENS_AV, HIGH) ; // sens AV en marche
 }


 delay(300); // pause anti-rebond entre 2 appuis

}


} // fin de la fonction loop() - le programme recommence au début de la fonction loop sans fin
// ********************************************************************************

// --- Fin programme ---

// --- Mémo instructions ---

// var_int = digitalRead(Pin); //lit état de la broche indiquée et renvoie valeur HIGH ou LOW 
// digitalWrite(pin, value) ; // met la valeur HIGH ou LOW sur la broche indiquée
// digitalRead(pin) ; // lit l'état d'une broche numérique en entrée et renvoie la valeur HIGH ou LOW présente sur la broche
// --- Impulsions ---
// analogWrite(broche,largeur); // génère une impulsion PWM sur la broche de largeur 0 (0%) à 255 (100%)

// tone(broche, frequence, +/-duree); // produit son de fréquence indiquée sur la broche
// noTone(broche); // stoppe la production de son sur la broche
// à noter : une seule broche peut générer un son à la fois... 

// --- mémo boucle -- 
//for (int i=0; i <= 10; i++); // boucle simple 
//delay(300); // pause en millisecondes 


Noter cet article

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Archive Mon Club Elec

Articles populaires

Newsletter

Inscrivez-vous maintenant et bénéficiez d'un soutien continu pour réaliser vos travaux électriques en toute sécurité.