Commande Moteur avec Transitor MOSFET

Les différents produits repris dans cet articles sont disponibles en kit ou séparémment chez www.mchobby.be. Vous pouvez les acquérir depuis leurs différentes fiches articles: Moteur Hobbyiste (Mini-Kit), 2 Transistors MOSFET N-Channel 16A 60 Vdc, Moteur Hobbyiste de 4.5v à 9v DC (mieux adapté aux montages Arduino)

Introduction
Lors d'un précédent Article "contrôle moteur DC via transistor", j'ai eu l'occasion de montrer comment commander un Moteur Hobbyiste avec un transistor NPN standard.
Malheureusement, le transistor NPN n'est pas le composant le plus adéquat pour faire de la commande en puissance.

Heureusement, il y a le transistor MOSFET qui se présente comme une sorte de Superman dans le domaine des montages en puissance.

Cet article va revisiter la commande d'un moteur à l'aide d'un transistor... mais cette fois, en utilisant un MOSFET!

Quel est donc le problème avec un transistor NPN? (standard)
Si ce type de montage à base de transistor est fonctionnel, il présente un énorme désavantage... la perte de tension au borne du transistor (VCE).
Cette perte de tension est généralement assez importante (1.2 Volts en moyenne), ce qui est très élevé face à la tension d'alimentation d'un montage de type Arduino (souvent 5 Volts). Plus cette chute de tension du transistor est important et moins il en reste pour le matériel (moteur) raccordé sur le transistor (relais ou moteur).
Cette chute de tension (VCE) à également tendance à augmenter avec le courant qui passe au travers du transistor. Dans le cadre d'un montage moteur c'est une véritable catastrophe.
En effet, lorsque l'on commute un transistor NPN pour alimenter le moteur, deux cas de figures se présentent régulièrement:
  1. Sous l'impulsion, le moteur décolle (démarre) et se met à tourner. Le courant d'appel (assez grand au démarrage) diminue rapidement... et donc la chute de tension au transistor aussi (puisque le courant diminue dans le transistor). La tension disponible aux bornes du moteur augmente jusqu'à un maximum... et le moteur atteint aussi un régime maximale. Cool... tout ce passe bien.
  2. Malgré l'impulsion, le moteur ne décolle pas (cela arrive 1 à 2 fois sur 10). Le courant reste donc à son maximum (celui du démarrage). Comme ce courant passe aussi à travers le transistor, et que ce courant est assez important, chute de tension au borne du transistor NPN augmente rapidement. Résultat: la tension disponible aux bornes du moteur diminue... et le moteur n'a aucune chance de démarrer. HAARFF!
Avec de telles conséquences, il est difficile d'imaginer raccorder une charge sur notre moteur Hobbyiste :-(
Décidément, le transistor standard n'est pas notre meilleur amis.


L'idéal serait que la tension reste stable aux bornes du moteur au moment du démarrage. Même s'il ne décolle pas immédiatement, maintenir la tension malgré le courant de démarrage assurerait le démarrage du moteur.
C'est là ou le transistor MOSFET nous sauve :-)

Avantage du MOSFET
Alors qu'un transistor NPN est avant tout un amplificateur en courant (en fonction du courant de base). Les transistors MOSFET sont des amplificateurs en tension.
Du coup, les MOSFET sont aussi plus faciles à utiliser. Il suffit d'appliquer une différence de potentiel sur la Gate et HOP... le MOSFET commute :-)
Rien avoir avec le transistor NPN où il faut calculer le courant de base avec soin pour saturer le transistor (pour qu'il commute).

Un autre avantage du MOSFET, c'est qu'il a moins de perte... et qui dit moins de perte dit aussi moins de dissipation en chaleur et aussi moins de chute de tension :-).
Quel candidat de choix!

Inconvénient du MOSFET

Le seul vrai inconvénient du transistor MOSFET c'est son prix.
Si un transistor normal est bon marché, un MOSFET est beaucoup plus cher (on dépasse 1.5 Eur pour un MOSFET de puissance)

A Quoi ressemble un MOSFET
Rien ne ressemble plus à un transistor qu'un autre transistor.
MOSFET - Channel N - STP16NF06
Source: fiche produit chez MC Hobby
La différence réside dans le numéro d'identification du transistor.

Le MOSFET Channel-N
Voici quelques information technique concernant le MOSFET Channel N (équivalent du NPN mais en MOSFET).
C'est le cas du STP16NF06 que nous allons utiliser tout le long de cet article.


Utiliser un Channel-N est pratique et fort courant... comme l'usage des transistor NPN est également plus courant que le l'usage du PNP.
Nous allons nous concentrer sur le STP16NF06... fort répandu et capable de supporter des courants vraiment très importants (pratique pour la commande de moteurs mais aussi de strip Led).
  • 1 = G = GATE : broche de commande
  • 2 = D = DRAIN : broche qui draine le courant (la charge quoi... comme le moteur)
  • 3 = S = SOURCE : broche source de courant (ou le courant est collecté pour être envoyé vers la charge... dans notre cas, il s'agit de la masse) 


Parmi les caractéristiques de bases du STP16NF06, nous relèverons:
  • Vds: 60 Volts!
    Drain-source Voltage est tension maximale supportée par le transistor.
  • Id : 16A
    Courant du Drain maximum... courant maximum supporté par le transistor. 
MONTAGE TYPE MOSFET ET MOTEUR
Voici un exemple de montage type de commande moteur utilisant un STP16NF06, le tout commandé par un Arduino.
Mini Kit moteur Hobbyiste disponible chez MCHobby.

Toute l'information disponible ci-dessous est basée sur le Mini Kit moteur Hobbyiste proposé par MC Hobby.
Ce mini kit contient tous les éléments nécessaires à la mise en œuvre d'un premier montage moteur avec Transistor MOSFET avec Arduino.
Par la suite, vous pourrez réutiliser le MOSFET fourni dans le mini-kit pour commander des moteurs nettement plus puissant.

Plan de montage
Voici le plan de montage du MiniKit Moteur Hobbyiste.
Dans ce montage, nous utilisons le moteur fournit et une tension d'alimentation séparée de 9 Volts.
Plan de montage moteur avec MOSFET
Source: Wiki de MCHobby

Truc et astuce - alimentation externe
Si vous alimenter votre Arduino en 9V vous pourriez réutiliser cette tension par l'intermédiaire de la broche VIn d'Aduino. Vous pourriez tout aussi bien utiliser une source d'alimentation plus élevée.

Truc et astuce - un plus gros moteur
Vous pouvez sans peine remplacer le moteur proposé par un de vos propres moteurs.
Le MOSFET que nous avons fournit est du type "vraiment costaud!". Vous pouvez donc l'employer assez librement sans prise de tête. Approche pratique quand c'est un résultat que l'on recherche avant tout :-)
Pensez quand même à placer un refroidisseur si vous avez l'intention de brancher un moteur qui consomme plus d' 1 Ampère.

Schéma de montage
Par acquis de conscience, voici la schématique du montage présenté ci-dessus.
  • La tension d'alimentation du moteur que nous avons utilisé est de 9 Volts (et non de 24 Volts).
  • R3 = 100 KOhms
Source: Basic transistor Drivers for micro-controllers
Le montage sur Breadboard
Parce que rien ne vaut un vue claire et précise d'un montage existant... voici une prise de vue du montage sur un BreadBoard.
Plan de montage moteur avec MOSFET
Source: Wiki de MCHobby

Il ne vous reste plus qu'a vous lancer dans l'aventure :-)

Code pour Arduino
Le plus simple des exemple est encore le BlinkWithoutDelay ( File > Examples > Digital > BlinkWithoutDelay ) qui active et désactive régulièrement la Pin 13.
Pour un résultat plus évident, changer la valeur de "interval" de 1000 à 5000 ms.
En guise d'exemple, voici l'exemple BlinkWithoutDelay avec la ligne modifiée...

/* Blink without Delay
 
 Turns on and off a light emitting diode(LED) connected to a digital  
 pin, without using the delay() function.  This means that other code
 can run at the same time without being interrupted by the LED code.
 
 The circuit:
 * LED attached from pin 13 to ground.
 * Note: on most Arduinos, there is already an LED on the board
 that's attached to pin 13, so no hardware is needed for this example.
 
 
 created 2005
 by David A. Mellis
 modified 8 Feb 2010
 by Paul Stoffregen
 
 This example code is in the public domain.

 
 http://www.arduino.cc/en/Tutorial/BlinkWithoutDelay
 */

// constants won't change. Used here to 
// set pin numbers:
const int ledPin =  13;      // the number of the LED pin

// Variables will change:
int ledState = LOW;             // ledState used to set the LED
long previousMillis = 0;        // will store last time LED was updated

// the follow variables is a long because the time, measured in miliseconds,
// will quickly become a bigger number than can be stored in an int.
long interval = 5000;           // interval at which to blink (milliseconds)

void setup() {
  // set the digital pin as output:
  pinMode(ledPin, OUTPUT);      
}

void loop()
{
  // here is where you'd put code that needs to be running all the time.

  // check to see if it's time to blink the LED; that is, if the 
  // difference between the current time and last time you blinked 
  // the LED is bigger than the interval at which you want to 
  // blink the LED.
  unsigned long currentMillis = millis();
 
  if(currentMillis - previousMillis > interval) {
    // save the last time you blinked the LED 
    previousMillis = currentMillis;   

    // if the LED is off turn it on and vice-versa:
    if (ledState == LOW)
      ledState = HIGH;
    else
      ledState = LOW;

    // set the LED with the ledState of the variable:
    digitalWrite(ledPin, ledState);
  }
}

Truc et Astuce - Commande en PWM
Il est bien entendu possible de commander le transistor MOSFET en PWM... à condition d'avoir utilisé une broche PWM de votre Arduino (comme la Pin 11).

Pour la commande en PWM, nous vous proposons de lire l'article "contrôle moteur DC via transistor (PWM)". Vous n'aurez certainement aucun mal a transposer l'information à ce montage.

Où Achetez
Vous pouvez vous procurer les élément suivant chez MC Hobby:

Plus d'information
Vous trouverez plus de détails dans notre article de référence disponible sur le wiki de MC Hobby.

6 commentaires:

  1. Ce commentaire a été supprimé par l'auteur.

    RépondreSupprimer
  2. Bonjour est il possible d'utiliser ce montage avec le précédent didacticiel sur les transistors NPN ?

    RépondreSupprimer
  3. Non, il faut une diode anti-retour pour les transistors.
    Voyez sur wiki.mchobby.be le tuto sur les relais.
    Remplacez le relais par un petit moteur et cela ira.

    RépondreSupprimer
  4. Je crois bien avoir la réponse à ma question ...
    Il m'en reste une cependant : comment calculez-vous la valeur de la résistance R3 ?

    RépondreSupprimer
  5. La résistance R1 n'est pas nécessaire. L'arduino possède déjà ceci dans son circuit en fait... Cependant, il faut une flyback diode, qu'on branche en parallèle au moteur...

    RépondreSupprimer