Moteur Hobbyiste

De MCHobby - Wiki
Sauter à la navigation Sauter à la recherche

Introduction

Il existe différentes façons de contrôler un moteur à courant continu. Le montage le plus simple étant encore d'utiliser un étage d'amplification basé sur un transistor P2N2222.

Pourquoi utiliser un étage d'amplification?

Et bien, la raison est très simple, une sortie arduino n'est pas capable de fournir plus de 40 mA en sortie.

Si vous brancher un moteur directement dessus, le courant sera tellement intense que la sortie va rendre l'âme instantanément.

En utilisant un transistor P2N2222, courant d'alimentation du moteur peu aller jusque 600mA (selon la fiche technique) et une tension de 40v.

Montage

 

 

Attention:

la diode montée en parallèle sur le moteur DC est excessivement importante. En effet, elle permet de capturer les tensions/courants produits lors de l'arrêt du moteur (effet de self) et qui se propage en sens inverse (c'est un effet de réaction... donc contraire).

Si cette diode n'était pas présente, la surtension s'appliquerait sur le transistor... qui lui ne résisterait pas très longtemps à un tel traitement.

Truc et astuce:

Avant de raccorder le montage sur la pin 9 de votre Arduino, vous pouvez alternativement appliquer 5v ou 0v sur la résistance raccordée à la base du transistor.

Bien évidemment, le moteur doit fonctionner quand 5 volts sont appliqués sur la base.

Cela vous permettra de vérifier le bon fonctionnement du montage sans prendre aucun risque pour Arduino.

Avantage et inconvénient

Ce type de montage présente quelques avantages mais aussi des inconvénients si l'on désire contrôler finement le fonctionnement du moteur.

Avantages

  • Montage facile
  • Idéal pour un contrôle allumé/éteind.

Inconvénients

  • Pas de contrôle de sens de rotation
  • Le contrôle de la vitesse en analogique (amplification en courant) n'est pas vraiment approprié.
  • Il faut en effet vaincre Inertie au démarrage.
  • Il est préférable d'opter pour un contrôle PWM.

Programme

Voici le programme de démonstration.

Le fonctionnement "tout ou rien" (moteur allumé ou éteint) fonctionne parfaitement. Le mode de contrôle analogique montre rapidement les limites d'une telle option.

Source: MoteurDC.pde

/*
 *  Controle d'un moteur DC 
 *    En utilisant une sortie digitale (allumer/eteindre)
 *    En utilisant une sortie analogique (controle de vitesse).
 *
 * Note:
 *   Le controle de vitesse en analogique n'est pas optimal.
 *   Le mieux serait d'utiliser la méthode PWM
 */

int pinMoteur = 12; // pin controlant le moteur (analogique pin)

void setup(){
  pinMode( pinMoteur, OUTPUT ); 
}

void loop(){
   MoteurOnOff();
   MoteurVitesseDigital();      // ne fonctionne pas très bien
   MoteurAccelerationDigital(); // ne fonctionne pas très bien
}

// Allume le moteur à plein régime pendant 
//     3 secondes puis l’éteint pendant 
//     3 autres secondes.
//
void MoteurOnOff(){
  digitalWrite( pinMoteur, HIGH ); // Allume le moteur
  delay( 3000 ); // pause 3 secondes
  digitalWrite( pinMoteur, LOW ); // eteind le moteur
  delay( 3000 );
}

// Controle de la vitesse du moteur en controlant
//   la tension de sortie sur la pin 9 (de 0 à 255 pour 0 à 5v).
// Comme le transistor fonctionne en amplification,
//   modifier la tension de base revient a modifier
//   la l'amplification du transistor :-).
//
void MoteurVitesseDigital(){
  int vitesse1 = int(255) / 3; // 1/3 de la tension de sortie (+/- 1/3 de la vitesse)
  int vitesse2 = int(255) / 2; // mi-tension (mi-vitesse)
  int vitesse3 = 2 * 255 / 3;
  int vitesse4 = (int)255;     // Tension totale 
  
  analogWrite( pinMoteur, vitesse1 );
  delay( 1000 );
  analogWrite( pinMoteur, vitesse2 );
  delay( 1000 );
  analogWrite( pinMoteur, vitesse3 );
  delay( 1000 );
  analogWrite( pinMoteur, vitesse4 );
  delay( 1000 );
  analogWrite( pinMoteur, vitesse3 );
  delay( 1000 );
  analogWrite( pinMoteur, vitesse2 );
  delay( 1000 );
  analogWrite( pinMoteur, vitesse1 );
  delay( 1000 );
  analogWrite( pinMoteur, LOW );
}

// Controle plus fin de l'acceleration du moteur.
// 
void MoteurAccelerationDigital(){
  // Acceleration
  for( int i = 0; i<= 255; i++ ){
    analogWrite( pinMoteur, i );
    delay(20); // delay pour avoir un progression
  }
  
  // pause de 2 secondes a plein régime
  delay( 2000 );  
  
  // Deceleration
  for( int i = 255; i>=0; i-- ){
    analogWrite( pinMoteur, i );
    delay(20); // delay pour avoir un progression
  }
}

Où acheter

MCHobby propose les différents éléments de montage:

Toute référence, mention ou extrait de cette traduction doit être explicitement accompagné du texte suivant : «  Traduction par MCHobby (www.MCHobby.be) - Vente de kit et composants » avec un lien vers la source (donc cette page) et ce quelque soit le média utilisé.

L'utilisation commercial de la traduction (texte) et/ou réalisation, même partielle, pourrait être soumis à redevance. Dans tous les cas de figures, vous devez également obtenir l'accord du(des) détenteur initial des droits. Celui de MC Hobby s'arrêtant au travail de traduction proprement dit.