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() {
 // Robojax  MOSFET Motor driver code
  Serial.begin(9600);
  Serial.println("Robojax LR7834 ,  Arduino");

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


}

 // the loop routine runs over and over again forever:
void loop() {


 // Robojax XY-GMOS MOSFET Motor driver code
} // loop end
793-Code 2- PWM: Optocoupled HW-532 to control using MOSFET FR120N , LR7843
Langue: C++
# include <Arduino_LSM6DS3.h>

/*
 * Lesson 108-2: In this lesson we learn how to use  the module with FR120N , LR7843 and D4184 MOSFET to turn ON/OFF DC load up to up to 10A. HW-532 optically isolated from 5V to 30V load up to 10A depending on the module. Schematic shown, wiring diagram explained, different 
 * method of wiring with push button and potentiometer also shown. 
 * Video https://youtu.be/eqXaqRFAWrA
 * Get code for this project from https://robojax.com/RJT797
 *  
 * Written by Ahmad Shamshiri for RoboJax.com
 * // Published on Aug 25, 2022 in Aajx, ON, Canada.
 * 
 *  
 *   Project 1: Turning ON/OFF a motor or load (this project)
 *   Project 2: Controlling Speed using Arduino code
 *   Project 3: Controlling Speed using potentiometer and a push button
 * Watch Video instruction for this code:https://youtu.be/eqXaqRFAWrA
 * 
 * This code is part of Arduino Step by Step Course which starts here:  https://youtu.be/-6qSrDUA5a8
 * 
 * for library of this code visit http://robojax.com/
 * 
 *  If you found this tutorial helpful, please support me so I can continue creating 
 *  content like this. Make a donation using PayPal by credit card https://bit.ly/donate-robojax 
 *  * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.* 
 * This code has been download from Robojax.com
 *      This program is free software: you can redistribute it and/or modify
 *      it under the terms of the GNU General Public License as published by
 *      the Free Software Foundation, either version 3 of the License, or
 *      (at your option) any later version.
 *  
 *      This program is distributed in the hope that it will be useful,
 *      but WITHOUT ANY WARRANTY; without even the implied warranty of
 *      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *      GNU General Public License for more details.
 *  
 *      You should have received a copy of the GNU General Public License
 *      along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */


const int MOTOR_OUT_PIN = 3;

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

const int STOP=0;
const int RUN=1;
int motorState=RUN;
int motorSpeed = 0; // between 0 to 100%.
 // video instruction https://youtu.be/eqXaqRFAWrA


void setup() {
 // Robojax XY-GMOS MOSFET Motor driver code
  Serial.begin(9600);
  Serial.println("Robojax XY-GMOS Motor,  Arduino");

  pinMode(MOTOR_OUT_PIN, OUTPUT);


} // setup ends

 // the loop routine runs over and over again forever:
void loop() {


 // video https://youtu.be/eqXaqRFAWrA
  motorControl(50); // run motor at 50%
  delay(5000); // keep it running for 5000ms or 5 seconds
   stopMotor(); // stop the motor
  delay(3000); // keep it stopped for 5000ms or 5 seconds

  for(int i=0; i<100; i++)
  {
    motorControl(i);
    delay(200);
  }
  stopMotor(); // stop motor
  delay(3000); // keep it stopped for 5000ms or 5 seconds

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

 // Robojax LR7843 MOSFET Motor driver code
} // loop end


/*
 * motorControl(int s)
 * @brief controls the motor with the value s
 * @param return nothing
 * @param "type" is character
 * on May 08, 2020 at 02:36 in Ajax, Ontario, Canada
 */
void motorControl(int s)
{
 // Robojax LR7843 MOSFET Motor driver code
 // video 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);
} // motorControl


/*
 * stopMotor()
 * @brief stops the motor
 * @param return nothing
 * @param 
 * on May 08, 2020 at 02:36 in Ajax, Ontario, Canada
 */
void stopMotor(){
 // Robojax XY-GMOS MOSFET Motor driver code
  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; // can change
const int MOTOR_OUT_PIN = 3; // ~
const int START_STOP_PIN=2; // for push button switch

const int SPEED_MAX = 100; // in %
const int SPEED_MIN = 0; // in %
 // video instruction https://youtu.be/eqXaqRFAWrA

const int STOP=0;
const int RUN=1;
int motorState=RUN;
int motorSpeed = 0; // between 0 to 100%.

void pushButton();
void setup() {
 // Robojax XY-GMOS MOSFET Motor driver code
  Serial.begin(9600);
  Serial.println("Robojax XY-GMOS Motor,  Arduino");
  pinMode(START_STOP_PIN, INPUT_PULLUP);
  pinMode(MOTOR_OUT_PIN, OUTPUT);
 // video instruction https://youtu.be/eqXaqRFAWrA


}

 // the loop routine runs over and over again forever:
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);
 // Robojax XY-GMOS MOSFET Motor driver code
 // video instruction https://youtu.be/eqXaqRFAWrA
} // loop end


/*
 * motorControl(int s)
 * @brief controls the motor with the value s
 * @param return nothing
 * @param "type" is character
 * on May 08, 2020 at 02:36 in Ajax, Ontario, Canada
 */
void motorControl(int s)
{
 // Robojax LR7843 MOSFET Motor driver code
 // video instruction 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);
} // motorControl



/*
 * stopMotor()
 * @brief stops the motor
 * @param return nothing
 * @param 
 * on May 08, 2020 at 02:36 in Ajax, Ontario, Canada
 */
void stopMotor(){
 // Robojax XY-GMOS MOSFET Motor driver code
 // video instruction https://youtu.be/eqXaqRFAWrA
  analogWrite( MOTOR_OUT_PIN, 0);
  Serial.println("STOPPED");
} // stopMotor()



/*
 * pushButton()
 * @brief reads the push button
 * @param return nothing
 * @param 
 * on May 08, 2020 at 02:36 in Ajax, Ontario, Canada
 */
void pushButton()
{
 // Robojax XY-GMOS MOSFET Motor driver code
 // video instruction https://youtu.be/eqXaqRFAWrA
  if(digitalRead(START_STOP_PIN) ==LOW)
  {
    motorState =!motorState;
    delay(100);
  }

} // pushButton()

Ce dont vous pourriez avoir besoin

Ressources et références

Aucune ressource pour le moment.

Fichiers📁

Fiche technique (pdf)

Fichier Fritzing

Autres fichiers