Code de recherche

Comment utiliser le MOSFET optocouplé HW-532 pour contrôler, à l'aide d'un Arduino, la vitesse d'un moteur à courant continu (jusqu'à 30 V) ou une charge

Comment utiliser le MOSFET optocouplé HW-532 pour contrôler, à l'aide d'un Arduino, la vitesse d'un moteur à courant continu (jusqu'à 30 V) ou une charge

Ce guide de projet explique comment construire un contrôleur de vitesse polyvalent pour moteur à courant continu en utilisant un Arduino et le module MOSFET optocouplé HW-532. Le MOSFET peut êtreFR120N, LR7843 ou D4184.Cela vous permet de contrôler la vitesse et l'état marche/arrêt d'un moteur à courant continu avec des tensions allant jusqu'à 30V. Le module HW-532 offre une protection et une isolation, ce qui le rend plus sûr et plus fiable que de brancher directement le moteur sur l'Arduino.

Ce projet est précieux pour diverses applications. Voici quelques exemples :

  • Contrôler précisément la vitesse d'un bras robotique
  • Construire un ventilateur à vitesse variable pour les systèmes de refroidissement
  • Créer des machines automatisées au mouvement réglable
  • Développement d'une commande motorisée de vannes pour des systèmes fluidiques

Matériel/Composants

Les composants principaux sont l'Arduino, le module MOSFET à optocoupleur HW-532 (avec des MOSFETs comme D4184, LR7843 ou FR120N), un moteur à courant continu (tension nominale ≤ 30V), des fils de connexion, et, en option, un potentiomètre et un bouton-poussoir pour un contrôle avancé (dans la vidéo à 19:34).

Le choix du MOSFET dans le module HW-532 dépend de vos besoins en courant (dans la vidéo à 01:24). La vidéo fournit une comparaison détaillée des différents MOSFET (dans la vidéo à 06:50) et de leur adéquation à diverses applications (dans la vidéo à 09:45). N'oubliez pas d'ajouter une diode pour les charges inductives comme les moteurs à courant continu afin de protéger le module (dans la vidéo à 06:00 et 22:02).

Guide de câblage

Le câblage de base relie la borne positive du moteur à la sortie du HW-532, la borne négative du moteur à la masse du HW-532, et la broche de commande du HW-532 à une broche numérique de l'Arduino (dans la vidéo à 11:16).

Arduino wriing for HW-532 MOFET motor driver
Pour un contrôle plus avancé utilisant un potentiomètre et un bouton-poussoir, un schéma de câblage détaillé est montré dans la vidéo (à 19:44).

Explication du code

Le code fourni offre trois niveaux de contrôle :

Schematic for HW-532 using FR120N MOSFET
  1. Commande marche/arrêt :Ce code simple (dans la vidéo à 15:05) utilise une broche numérique pour activer et désactiver le moteur. La partie configurable par l'utilisateur est leMOTOR_OUT_PINconstante, qui définit quelle broche Arduino contrôle le module HW-532.
  2. Contrôle de vitesse PWM :Ce code (dans la vidéo à 15:39) utilise la modulation de largeur d'impulsion (PWM) pour contrôler la vitesse du moteur. L'utilisateur peut ajusterSPEED_MAXetSPEED_MINpour régler les limites supérieures et inférieures du contrôle de vitesse, et lemotorControl()etstopMotor()Des fonctions sont utilisées pour contrôler le moteur et l'arrêter, respectivement.
  3. Contrôle par potentiomètre et bouton-poussoir :Ce code (dans la vidéo à 22:12) permet de contrôler la vitesse du moteur avec un potentiomètre et de le démarrer/arrêter avec un bouton poussoir. Les parties configurables par l'utilisateur incluentPOT_PIN(broche du potentiomètre),MOTOR_OUT_PIN(broche de commande PWM),START_STOP_PIN(goupille du bouton-poussoir),SPEED_MAX, etSPEED_MIN.

Projet en direct/Démonstration

La vidéo montre le fonctionnement des trois exemples de code. Le contrôle marche/arrêt est montré (dans la vidéo à 11:41), suivi du contrôle de vitesse PWM (dans la vidéo à 16:53), et enfin le contrôle par potentiomètre et bouton-poussoir (dans la vidéo à 23:02).

Chapitres

  • [00:00] Introduction et présentation du projet
  • [01:24] Module HW-532 et options MOSFET
  • [03:23] Schéma du circuit et explication
  • [05:11] Détails du composant
  • [06:50] Analyse de la fiche technique du MOSFET
  • [11:16] Câblage de base et démonstration marche/arrêt
  • [15:05] Code Arduino pour le contrôle marche/arrêt
  • [15:39] Code Arduino pour le contrôle de la vitesse par PWM
  • [19:34] Câblage avec potentiomètre et bouton-poussoir
  • [22:12] Code Arduino avec potentiomètre et bouton-poussoir

Images

Schéma pour HW-532 utilisant le MOSFET FR120N
Schéma pour HW-532 utilisant le MOSFET FR120N
HW-532_driver_module-1
HW-532_driver_module-1
HW-532_driver_module-2
HW-532_driver_module-2
HW-532_driver_module-4
HW-532_driver_module-4
HW-532_driver_module-5
HW-532_driver_module-5
Arduino wriing for HW-532 MOFET motor driver
Arduino wriing for HW-532 MOFET motor driver
792-Code 1- Switch: Optocoupled HW-532 to control using MOSFET FR120N , LR7843
Langue: C++
/*
 * Leçon 108-1 : Dans cette leçon, nous apprenons à utiliser le module avec les MOSFET FR120N, LR7843 et D4184 pour activer/désactiver une charge CC jusqu'à 10 A. Le HW-532 est opto-isolé pour une charge de 5 V à 30 V jusqu'à 10 A selon le module. Schéma, schéma de câblage expliqué et différentes méthodes de câblage avec bouton-poussoir et potentiomètre.
 * Vidéo : https://youtu.be/eqXaqRFAWrA
 * 
 * Rédigé par Ahmad Shamshiri pour RoboJax.com
 * // Publié le 25 août 2022 à Aajx, Ontario, Canada.
 * 
 * Projet 1 : Allumer/éteindre un moteur ou une charge (ce projet)
 * Projet 2 : Contrôler la vitesse avec un code Arduino
 * Projet 3 : Contrôler la vitesse avec un potentiomètre et un bouton-poussoir
 * 
 * Regardez la vidéo d'instructions pour ce code : https://youtu.be/eqXaqRFAWrA
 * 
 * Ce code fait partie du cours Arduino étape par étape, disponible ici : https://youtu.be/-6qSrDUA5a8
 * 
 * Pour accéder à la bibliothèque de ce code, rendez-vous sur http://robojax.com/
 * 
 * Si ce tutoriel vous a été utile, n'hésitez pas à me soutenir pour que je puisse continuer à créer du contenu similaire. Faites un don via PayPal par carte bancaire : https://bit.ly/donate-robojax
 * 
 * Ce code est fourni « EN L'ÉTAT » sans garantie ni responsabilité. Utilisation libre à condition de conserver cette note intacte.*
 * Ce code a été téléchargé depuis Robojax.com.
 * Ce programme est un logiciel libre : vous pouvez le redistribuer et/ou le modifier selon les termes de la Licence publique générale GNU telle que publiée par la Free Software Foundation, soit la version 3, soit (à votre choix) toute version ultérieure.
 * 
 * Ce programme est distribué dans l’espoir qu’il soit utile,
 * mais SANS AUCUNE GARANTIE ; sans même la garantie implicite de
 * QUALITÉ MARCHANDE ou d’ADÉQUATION À UN USAGE PARTICULIER. Consultez la Licence publique générale GNU pour plus de détails.
 * 
 * Vous devriez avoir reçu une copie de la Licence publique générale GNU avec ce programme. Dans le cas contraire, consultez <https://www.gnu.org/licenses/>.
 */
const int MOTOR_OUT_PIN=2;


void setup() {
 // Code du pilote du moteur MOSFET Robojax
  Serial.begin(9600);
  Serial.println("Robojax LR7834 ,  Arduino");

  pinMode(MOTOR_OUT_PIN, OUTPUT);
  digitalWrite(MOTOR_OUT_PIN, HIGH);


}

 // la routine en boucle s'exécute encore et encore pour toujours :
void loop() {


 // Code du pilote du moteur MOSFET Robojax XY-GMOS
} // fin de boucle
793-Code 2- PWM: Optocoupled HW-532 to control using MOSFET FR120N , LR7843
Langue: C++
# include <Arduino_LSM6DS3.h>

/*
 * Leçon 108-2 : Dans cette leçon, nous apprenons à utiliser le module avec les MOSFET FR120N, LR7843 et D4184 pour activer/désactiver une charge CC jusqu'à 10 A. Le HW-532 est opto-isolé pour une charge de 5 V à 30 V jusqu'à 10 A selon le module. Schéma, schéma de câblage expliqué et différentes méthodes de câblage avec bouton-poussoir et potentiomètre sont également présentées.
 * 
 * Vidéo : https://youtu.be/eqXaqRFAWrA
 * Récupérez le code de ce projet sur https://robojax.com/RJT797
 * 
 * 
 * Rédigé par Ahmad Shamshiri pour RoboJax.com
 * // Publié le 25 août 2022 à Aajx, ON, Canada.
 * 
 * 
 * 
 * Projet 1 : Allumer/éteindre un moteur ou une charge (ce projet)
 * 
 * Projet 2 : Contrôler la vitesse avec un code Arduino
 * 
 * Projet 3 : Contrôler la vitesse avec un potentiomètre et un bouton-poussoir
 * Regardez la vidéo explicative pour ce code : https://youtu.be/eqXaqRFAWrA
 * 
 * Ce code fait partie du cours Arduino étape par étape, disponible ici : https://youtu.be/-6qSrDUA5a8
 * 
 * Pour accéder à la bibliothèque de ce code, rendez-vous sur http://robojax.com/
 * 
 * Si ce tutoriel vous a été utile, n'hésitez pas à me soutenir pour que je puisse continuer à créer du contenu similaire. Faites un don via PayPal par carte bancaire : https://bit.ly/donate-robojax
 * 
 * * Ce code est fourni « EN L'ÉTAT » sans garantie ni responsabilité. Utilisation libre à condition de conserver cette note intacte.*
 * 
 * Ce code a été téléchargé depuis Robojax.com.
 * 
 * Ce programme est un logiciel libre : vous pouvez le redistribuer et/ou le modifier selon les termes de la Licence publique générale GNU telle que publiée par la Free Software Foundation, soit la version 3, soit (à votre choix) toute version ultérieure.
 * 
 * 
 * 
 * Ce programme est distribué dans l'espoir qu'il soit utile, mais SANS AUCUNE GARANTIE ; sans même la garantie implicite de QUALITÉ MARCHANDE ou d'ADÉQUATION À UN USAGE PARTICULIER. Consultez la Licence publique générale GNU pour plus de détails.
 * 
 * 
 * 
 * Vous devriez avoir reçu un exemplaire de la Licence publique générale GNU avec ce programme. Sinon, consultez <https://www.gnu.org/licenses/>.
 */


const int MOTOR_OUT_PIN = 3;

const int SPEED_MAX = 100; // dans %
const int SPEED_MIN = 0; // dans %

const int STOP=0;
const int RUN=1;
int motorState=RUN;
int motorSpeed = 0; // entre 0 et 100%.
 // instructions vidéo https://youtu.be/eqXaqRFAWrA


void setup() {
 // Code du pilote du moteur MOSFET Robojax XY-GMOS
  Serial.begin(9600);
  Serial.println("Robojax XY-GMOS Motor,  Arduino");

  pinMode(MOTOR_OUT_PIN, OUTPUT);


} // fin de l'installation

 // la routine en boucle s'exécute encore et encore pour toujours :
void loop() {


 // vidéo https://youtu.be/eqXaqRFAWrA
  motorControl(50); // faire tourner le moteur à 50 %
  delay(5000); // laissez-le fonctionner pendant 5 000 ms ou 5 secondes
   stopMotor(); // arrêter le moteur
  delay(3000); // maintenez-le arrêté pendant 5 000 ms ou 5 secondes

  for(int i=0; i<100; i++)
  {
    motorControl(i);
    delay(200);
  }
  stopMotor(); // arrêter le moteur
  delay(3000); // maintenez-le arrêté pendant 5 000 ms ou 5 secondes

   for(int i=100; i >0; i--)
  {
    motorControl(i);
    delay(200);
  }

 // Code du pilote du moteur MOSFET Robojax LR7843
} // fin de boucle


/*
 * motorControl(int s) 
 * @brief contrôle le moteur avec la valeur s 
 * @param ne renvoie rien 
 * @param "type" est un caractère 
 * Le 8 mai 2020 à 02:36 à Ajax, Ontario, Canada
 */
void motorControl(int s)
{
 // Code du pilote du moteur MOSFET Robojax LR7843
 // vidéo https://youtu.be/eqXaqRFAWrA
  int k = map(s, SPEED_MIN, SPEED_MAX, 0, 255);
  Serial.print("Speed: "); Serial.print(s);Serial.println("%");
  analogWrite(MOTOR_OUT_PIN, k);
} // Contrôle du moteur


/*
 * stopMotor()
 * @brief arrête le moteur
 * @param ne renvoie rien
 * @param
 * le 8 mai 2020 à 02:36 à Ajax, Ontario, Canada
 */
void stopMotor(){
 // Code du pilote du moteur MOSFET Robojax XY-GMOS
  analogWrite( MOTOR_OUT_PIN, 0);
  Serial.println("STOPPED");
} // stopMotor()

794-Code 3- Potentiometer: Optocoupled HW-532 to control using MOSFET FR120N , LR7843
Langue: C++
/*
 * Leçon 108-3 : Contrôle de la vitesse d'un moteur à l'aide d'une résistance variable (potentiomètre) et d'un bouton-poussoir marche/arrêt avec Arduino.
 * 
 * Dans cette leçon, nous apprenons à utiliser le module avec les MOSFET FR120N, LR7843 et D4184 pour activer/désactiver une charge CC jusqu'à 10 A. Le HW-532 est opto-isolé pour une charge de 5 V à 30 V jusqu'à 10 A selon le module. Schéma, schéma de câblage expliqué et différentes méthodes de câblage avec bouton-poussoir et potentiomètre sont également présentées.
 * Vidéo : https://youtu.be/eqXaqRFAWrA
 * Récupérez les codes de ce projet sur https://robojax.com/RJT797
 * Rédigé par Ahmad Shamshiri pour RoboJax.com
 * // Publié le 25 août 2022 à Aajx, ON, Canada.
 * 
 * Projet 1 : Allumer/éteindre un moteur ou une charge
 * Projet 2 : Contrôler la vitesse avec un code Arduino
 * Projet 3 : Contrôler la vitesse avec un potentiomètre et un bouton-poussoir (ce projet)
 * 
 * Regardez la vidéo explicative pour ce code : https://youtu.be/eqXaqRFAWrA
 * 
 * Ce code fait partie du cours Arduino étape par étape, disponible ici : https://youtu.be/-6qSrDUA5a8
 * 
 * Pour accéder à la bibliothèque de ce code, rendez-vous sur http://robojax.com/
 * 
 * Si ce tutoriel vous a été utile, n'hésitez pas à me soutenir pour que je puisse continuer à créer du contenu similaire. Faites un don via PayPal par carte bancaire : https://bit.ly/donate-robojax
 * 
 * Ce code est fourni « EN L'ÉTAT » sans garantie ni responsabilité. Utilisation libre à condition de conserver cette note intacte.*
 * Ce code a été téléchargé depuis Robojax.com.
 * Ce programme est un logiciel libre : vous pouvez le redistribuer et/ou le modifier selon les termes de la Licence publique générale GNU telle que publiée par la Free Software Foundation, soit la version 3, soit (à votre choix) toute version ultérieure.
 * 
 * Ce programme est distribué dans l’espoir qu’il soit utile,
 * mais SANS AUCUNE GARANTIE ; sans même la garantie implicite de
 * QUALITÉ MARCHANDE ou d’ADÉQUATION À UN USAGE PARTICULIER. Consultez la Licence publique générale GNU pour plus de détails.
 * 
 * Vous devriez avoir reçu une copie de la Licence publique générale GNU avec ce programme. Dans le cas contraire, consultez <https://www.gnu.org/licenses/>.
 */
const int POT_PIN =A0; // peut changer
const int MOTOR_OUT_PIN = 3; // ~
const int START_STOP_PIN=2; // pour interrupteur à bouton-poussoir

const int SPEED_MAX = 100; // dans %
const int SPEED_MIN = 0; // dans %
 // instructions vidéo https://youtu.be/eqXaqRFAWrA

const int STOP=0;
const int RUN=1;
int motorState=RUN;
int motorSpeed = 0; // entre 0 et 100%.

void pushButton();
void setup() {
 // Code du pilote du moteur MOSFET Robojax XY-GMOS
  Serial.begin(9600);
  Serial.println("Robojax XY-GMOS Motor,  Arduino");
  pinMode(START_STOP_PIN, INPUT_PULLUP);
  pinMode(MOTOR_OUT_PIN, OUTPUT);
 // instructions vidéo https://youtu.be/eqXaqRFAWrA


}

 // la routine en boucle s'exécute encore et encore pour toujours :
void loop() {

 pushButton();
 int potValue =analogRead(POT_PIN);
 int speedPercent = map(potValue, 0, 1023, 0, 100);

 if(motorState ==RUN)
 {
  motorControl(speedPercent);
 }else{
  stopMotor();
 }


  delay(500);
 // Code du pilote du moteur MOSFET Robojax XY-GMOS
 // instructions vidéo https://youtu.be/eqXaqRFAWrA
} // fin de boucle


/*
 * motorControl(int s) 
 * @brief contrôle le moteur avec la valeur s 
 * @param ne renvoie rien 
 * @param "type" est un caractère 
 * Le 8 mai 2020 à 02:36 à Ajax, Ontario, Canada
 */
void motorControl(int s)
{
 // Code du pilote du moteur MOSFET Robojax LR7843
 // instructions vidéo https://youtu.be/eqXaqRFAWrA
  int k = map(s, SPEED_MIN, SPEED_MAX, 0, 255);
  Serial.print("Speed: "); Serial.print(s);Serial.println("%");
  analogWrite(MOTOR_OUT_PIN, k);
} // Contrôle du moteur



/*
 * stopMotor()
 * @brief arrête le moteur
 * @param ne renvoie rien
 * @param
 * le 8 mai 2020 à 02:36 à Ajax, Ontario, Canada
 */
void stopMotor(){
 // Code du pilote du moteur MOSFET Robojax XY-GMOS
 // instructions vidéo https://youtu.be/eqXaqRFAWrA
  analogWrite( MOTOR_OUT_PIN, 0);
  Serial.println("STOPPED");
} // stopMotor()



/*
 * pushButton()
 * @brief lit le bouton poussoir
 * @param ne renvoie rien
 * @param
 * le 8 mai 2020 à 2h36 à Ajax, Ontario, Canada
 */
void pushButton()
{
 // Code du pilote du moteur MOSFET Robojax XY-GMOS
 // instructions vidéo https://youtu.be/eqXaqRFAWrA
  if(digitalRead(START_STOP_PIN) ==LOW)
  {
    motorState =!motorState;
    delay(100);
  }

} // bouton()

Ce dont vous pourriez avoir besoin

Ressources et références

Aucune ressource pour le moment.

Fichiers📁

Fiche technique (pdf)

Fichier Fritzing

Autres fichiers