Mini Kit Moteur Hobbyiste

De MCHobby - Wiki
Révision datée du 19 janvier 2014 à 10:45 par Admin (discussion | contributions)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Sauter à la navigation Sauter à la recherche

Introduction

Dans le précédent article Moteur Hobbyiste, nous avons abordé la problématique de commander un moteur à l'aide d'un transistor NPN P2N2222AG. Cet article va se concentrer sur l'usage des transistor MOSFET nettement plus performant mais aussi mieux adapté à la commande en puissance.

Avantages du MOSFET

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, ils 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 ou 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!

Désavantage du MOSFET

Son seul désavantage est d'être beaucoup plus cher d'un simple transistor NPN.

Inconvénient du montage NPN

...et pourquoi il faut utiliser un MOSFET!

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.... Heureusement, il y a le MOSFET!

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 :-)

Le MOSFET

A quoi ressemble un MOSFET

Un MOSFET ressemble à un... "transistor".

Seul les caractéristiques sont vraiment différentes (comme le dessin et le nom des broches).

Tous comme les transistors, il y a des MOSFET de Type N (dit "N Channel") et de type P (P Channel).

MOSFET Channel N - En quelques mots

Pendant du transistor NPN, voici un MOSFET Channel N.

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).

STP16NF06 - N Channel - Package.jpg

  • 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)

STP16NF06 - N Channel - Schema.jpg

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.

MOSFET Channel N - Montage type

Le schéma-ci dessous présente un montage type du MOSFET Channel N.

STP16NF06 - N Channel - Montage Type.jpg

La résistance de 100 KOhms est une résistance pull-down. Elle permet de drainer les électrons vers la masse lorsque le bouton poussoir est relâché. Cette résistance est essentielle pour le MOSFET "décommute".

STP16NF06 - N Channel - Montage Type2.jpg

Ces deux graphiques proviennent de l'excellente référence de Basic Transistor Drivers for Micro-Controllers de Lewis Loflin

Mini Kit Moteur Hobbyiste

Le Mini Kit Moteur Hobbyiste proposé par MC Hobby est une application typique de MOSFET Channel N.

Le MOSFET sélectionné est un STP16NF06, il est sur-calibré pour un moteur Hobbyiste mais vous pourrez sans mal l'utiliser avec un moteur plus puissant, un strip led, etc. Pas besoin de modifier le montage de base, il conviendra à de nombreux cas d'utilisation.

MKIT-MOTEUR contenu.jpg

Ce kit est disponible chez MCHobby.

Plan de montage

Voici le schéma de montage pour un Arduino correspondant au schéma Channel-N présenté ci-dessus.

MKIT-MOTEUR schema.jpg

Oups, désolé pour la mauvaise orthographe sur le dessin!

Montage en pratique

Voici le montage sur un platine de prototypage.

MKIT-MOTEUR montage.jpg

En guise d'alimentation externe, vous pouvez utiliser une pile de 9V pour alimenter votre Arduino et raccorder le (+) de l'alimentation externe sur la broche Vin d'Arduino.

Code d'exemple

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);
  }
}

Sources

Cette section reprend quelques ressources vraiment utiles.

Où Acheter