Piloter un Moteur avec un MOSFET IRF540 et potentiomètre – Arduino

Afin d’alimenter un moteur à courant continu, il est possible d’utiliser un MOSFET.

Ici, nous utiliserons un transistor IRF540. Celui-ci permet d’activer des charges avec une demande d’intensité assez importante.

Le datasheet du transistor est disponible ici : IRF540N.

Caractéristiques :
Tension: 100 V
Intensité: 27 A

 

1er exemple :

Ce premier code permet de faire tourner le moteur, et l’arrêter toutes les secondes. Ce programme permet déjà de déterminer que le câblage de notre transistor est correct, et que le moteur est en bon état de fonctionnement.

Nous utilisons la sortie 3, qui permet d’effectuer une modification du rapport cyclique. Cette modification permettra dans le second code de faire tourner le moteur à différentes vitesses de rotation.

Câblage :

Code :

// Moteur branché sur l'interface 3
int moteur = 3;

void setup() {
// Definir le moteur en sortie
pinMode(moteur, OUTPUT);
}

void loop() {
// Alimenter le moteur
digitalWrite(moteur, HIGH);
// Pause 1 seconde
delay(1000);
// Eteindre le moteur
digitalWrite(moteur, LOW);
// Pause 1 seconde
delay(1000);
}
Moteur CC - IRF540

2nd exemple :

Dans le second programme, nous allons utiliser un potentiomètre permettant de faire varier la vitesse de rotation du moteur.

Un potentiomètre est un composant mécanique simple qui permet de faire varier la résistance entre ses broches lorsque l’on tourne son axe.

Le potentiomètre est branché ici sur l’interface d’entrée A0.

La valeur du potentiomètre, alimenté sous 5V ici, devrait varier entre 0 et 1023. Mais certains potentiomètres ne renvoient pas un ‘0’ lorsqu’ils sont tournés au minimum, et ‘1023’ lorsqu’ils sont tournés au maximum.

Il faudra donc effectuer un essai afin de visualiser la valeur minimum et maximum.

Dans le code proposé, le potentiomètre variait entre 184 et 873. Mais quelques fois, ces valeurs augmentaient de quelques décimales. J’ai donc imposé une valeur min et une valeur max :

// Valeur min du potentiometre
if (Pot < 184)
{
Pot = 184;
}
// Valeur max du potentiometre
if (Pot > 873)
{
Pot = 873;
}

La commande analogWrite permet d’envoyer le rapport cyclique au moteur. Cette valeur est comprise entre 0 et 255. Il faut donc définir une fonction permettant de traduire les valeurs des potentiomètres vers la valeur permettant d’alimenter le moteur.

La commande map effectuera donc un rapport proportionnel à partir des valeurs 0 => 0 et 1023 => 255. Or chez nous, le min et le max sont différents, donc 184 => 0 et 873 => 255

Commande map :

map(variable, ValeurMin, ValeurMax, versValeurMin, versValeurMax);

–> Lire la variable Pot
–> Valeur Min = 184  —- Valeur Max = 873
–> Valeur Min souhaitée = 0 —– Valeur Max souhaitée = 255

//Definir la valeur à envoyer au moteur : 184 => 0 et 873 => 255)
Valeur_Moteur = map(Pot, 184, 873, 0, 255);

 

Câblage :

 

Code :

int Pot;  //Initialise la variable qui va recueillir la valeur du potentiomètre

// Moteur branché sur l'interface 3
int Moteur = 3;

// Valeur pour le moteur (varie entre 0 et 255)
int Valeur_Moteur;

void setup() {

Serial.begin(9600); //Initialise la communication entre le PC et Arduino
pinMode(Moteur, OUTPUT);
}

void loop() {

//Lire la valeur du potentiomètre
Pot = analogRead(A0);

//Affiche la valeur du potentiomètre sur le moniteur série
Serial.print("Potentiometre : "); Serial.println(Pot);

// Valeur min du potentiometre
if (Pot < 184)
{
Pot = 184;
}
// Valeur max du potentiometre
if (Pot > 873)
{
Pot = 873;
}

//Definir la valeur à envoyer au moteur : 184 => 0 et 873 => 255)
Valeur_Moteur = map(Pot, 184, 873, 0, 255);

Serial.print("Moteur : "); Serial.println(Valeur_Moteur); //Affiche la valeur du potentiomètre sur le moniteur série

// Envoie de la valeur de sortie au moteur
analogWrite(Moteur, Valeur_Moteur);

delay(200);

}

Un commentaire

  1. probleme mosfet PWM par AMMAR AMAL
    bonjour,
    svp je suis une etudiante en Master ingenierie homme_machine, je travail sur un projet en electronique ’fabrication d’un preleveur d’air ambiant automatisé » je dois garder un debit stable de prelevement 7L/min et le systeme fonctionne 24h sans arret , il se compose d’une pompe 12volts 16watts , batterie 12volts 20AH , j’ai choisi de travailler avec un mosfet de type N pour reguler le vitesse de la pompe(moteur à courant DC) et comme ca je regule le debit de prelevement ’ j’ai relier directement la batterie le mosfet et la pompe (grille lié à un resitance 330 ohms vers PWM arduino mega , grille lié à une resistance 10k lié au GND commun batterie et arduino , Drain ⇒negative moteur , source⇒Gnd , +moteur⇒+ batterie ) le mosfet choisi est IRFZ44N j’ai deux problemes
    1) la tensien à l’entré de mosfet=12v et sortie de mosfet=10volts
    2)je ne sais pas si mon circuit est sécurisé ou non car le mosfet chauffe et je peur de faire un test de 24heures j’ecrame les composants

Rejoignez la conversation

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

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.