Código de búsqueda

Cómo usar el MOSFET optoacoplado HW-532 para controlar la velocidad de un motor de CC de hasta 30 V o una carga con Arduino

Cómo usar el MOSFET optoacoplado HW-532 para controlar la velocidad de un motor de CC de hasta 30 V o una carga con Arduino

Esta guía del proyecto muestra cómo construir un versátil controlador de velocidad de motor de CC usando un Arduino y el módulo MOSFET optoacoplado HW-532. El MOSFET puede serFR120N, LR7843 o D4184.Esto le permite controlar la velocidad y el estado de encendido/apagado de un motor de corriente continua con tensiones de hasta 30 V. El módulo HW-532 ofrece protección y aislamiento, lo que lo hace más seguro y fiable que conectar el motor directamente al Arduino.

Este proyecto es valioso para diversas aplicaciones. Aquí hay algunos ejemplos:

  • Controlar con precisión la velocidad de un brazo robótico
  • Construcción de un ventilador de velocidad variable para sistemas de refrigeración
  • Creación de maquinaria automatizada con movimiento ajustable
  • Desarrollando un control de válvulas motorizado para sistemas de fluidos

Hardware/Componentes

Los componentes principales son el Arduino, el módulo MOSFET optoacoplado HW-532 (con opciones de MOSFET como D4184, LR7843 o FR120N), un motor de corriente continua (tensión ≤ 30V), cables de conexión y, opcionalmente, un potenciómetro y un pulsador para control avanzado (en el video en 19:34).

La elección del MOSFET dentro del módulo HW-532 depende de tus requisitos de corriente (en el video en 01:24). El video ofrece una comparación detallada de los distintos MOSFETs (en el video en 06:50) y su idoneidad para diversas aplicaciones (en el video en 09:45). Recuerda incluir un diodo para cargas inductivas como motores de corriente continua para proteger el módulo (en el video en 06:00 y 22:02).

Guía de cableado

La conexión básica conecta el terminal positivo del motor a la salida del HW-532, el terminal negativo del motor a la masa del HW-532, y el pin de control del HW-532 a un pin digital del Arduino (en el video a las 11:16).

Arduino wriing for HW-532 MOFET motor driver
Para un control más avanzado con un potenciómetro y un pulsador, se muestra un diagrama de cableado detallado en el vídeo (a las 19:44).

Explicación del código

El código proporcionado ofrece tres niveles de control:

Schematic for HW-532 using FR120N MOSFET
  1. Control de encendido/apagado:Este código simple (en el vídeo a las 15:05) usa un pin digital para encender y apagar el motor. La parte configurable por el usuario es laMOTOR_OUT_PINconstante, que define qué pin de Arduino controla el módulo HW-532.
  2. Control de velocidad PWM:Este código (en el video a las 15:39) utiliza Modulación por Ancho de Pulso (PWM) para controlar la velocidad del motor. El usuario puede ajustarSPEED_MAXySPEED_MINpara establecer los límites superior e inferior del control de velocidad, y elmotorControl()ystopMotor()Las funciones se utilizan para controlar el motor y detenerlo, respectivamente.
  3. Control mediante potenciómetro y pulsador:Este código (en el video en 22:12) permite controlar la velocidad del motor con un potenciómetro y arrancarlo/detenerlo con un pulsador. Las partes configurables por el usuario incluyenPOT_PIN(patilla del potenciómetro),MOTOR_OUT_PIN(pin de control PWM),START_STOP_PIN(pasador del botón pulsador),SPEED_MAX, ySPEED_MIN.

Proyecto/Demostración en vivo

El vídeo muestra el funcionamiento de los tres ejemplos de código. El control de encendido/apagado se muestra (en el vídeo a las 11:41), seguido del control de velocidad por PWM (en el vídeo a las 16:53) y, finalmente, el control mediante potenciómetro y botón pulsador (en el vídeo a las 23:02).

Capítulos

  • [00:00] Introducción y visión general del proyecto
  • [01:24] Opciones del módulo HW-532 y de los MOSFET
  • [03:23] Esquema del circuito y explicación
  • [05:11] Detalles del componente
  • [06:50] Análisis de la hoja de datos del MOSFET
  • [11:16] Cableado básico y demostración de encendido y apagado
  • [15:05] Código Arduino para control de encendido/apagado
  • [15:39] Código Arduino para control de velocidad PWM
  • [19:34] Cableado con potenciómetro y pulsador
  • [22:12] Código de Arduino con potenciómetro y pulsador

Imágenes

Esquemático para HW-532 utilizando MOSFET FR120N
Esquemático para HW-532 utilizando 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
Idioma: C++
/*
 * Lección 108-1: En esta lección, aprenderemos a usar el módulo con FR120N, LR7843 y MOSFET D4184 para encender y apagar cargas de CC de hasta 10 A. El HW-532 está aislado ópticamente de 5 V a 30 V, con una carga de hasta 10 A, según el módulo. Se muestra el esquema, se explica el diagrama de cableado y se muestran diferentes métodos de cableado con pulsador y potenciómetro.
 * 
 * Video: https://youtu.be/eqXaqRFAWrA
 * 
 * Escrito por Ahmad Shamshiri para RoboJax.com
 * // Publicado el 25 de agosto de 2022 en Aajx, Ontario, Canadá.
 * 
 * Proyecto 1: Encendido/Apagado de un motor o carga (este proyecto)
 * Proyecto 2: Control de velocidad con código Arduino
 * Proyecto 3: Control de velocidad con potenciómetro y pulsador
 * 
 * Vea el video con instrucciones para este código: https://youtu.be/eqXaqRFAWrA
 * 
 * Este código forma parte del curso paso a paso de Arduino, que comienza aquí: https://youtu.be/-6qSrDUA5a8
 * 
 * Para acceder a la biblioteca de este código, visite http://robojax.com/
 * 
 * Si este tutorial le resultó útil, por favor, apóyeme para que pueda seguir creando contenido como este. Haga una donación con PayPal o tarjeta de crédito: https://bit.ly/donate-robojax
 * 
 * Este código se proporciona "tal cual", sin garantía ni responsabilidad. Uso gratuito siempre que conserve esta nota intacta.*
 * Este código se ha descargado de Robojax.com.
 * Este programa es software libre: puede redistribuirlo y/o modificarlo bajo los términos de la Licencia Pública General de GNU publicada por la Free Software Foundation, ya sea la versión 3 de la Licencia o (a su elección) cualquier versión posterior.
 * 
 * Este programa se distribuye con la esperanza de que sea útil, pero SIN GARANTÍA ALGUNA; ni siquiera la garantía implícita de COMERCIABILIDAD o IDONEIDAD PARA UN PROPÓSITO PARTICULAR. Consulte la Licencia Pública General de GNU para obtener más detalles.
 * 
 * Debería haber recibido una copia de la Licencia Pública General de GNU junto con este programa. De no ser así, consulte <https://www.gnu.org/licenses/>.
 */
const int MOTOR_OUT_PIN=2;


void setup() {
 // Código del controlador del motor MOSFET de Robojax
  Serial.begin(9600);
  Serial.println("Robojax LR7834 ,  Arduino");

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


}

 // La rutina de bucle se ejecuta una y otra vez eternamente:
void loop() {


 // Código del controlador del motor MOSFET XY-GMOS de Robojax
} // extremo del bucle
793-Code 2- PWM: Optocoupled HW-532 to control using MOSFET FR120N , LR7843
Idioma: C++
# include <Arduino_LSM6DS3.h>

/*
 * Lección 108-2: En esta lección, aprenderemos a usar el módulo con FR120N, LR7843 y MOSFET D4184 para encender y apagar cargas de CC de hasta 10 A. El HW-532 está aislado ópticamente de 5 V a 30 V, con una carga de hasta 10 A, según el módulo. Se muestra el esquema, se explica el diagrama de cableado y se muestran diferentes métodos de cableado con pulsador y potenciómetro.
 * 
 * Video: https://youtu.be/eqXaqRFAWrA
 * 
 * Obtén el código para este proyecto en https://robojax.com/RJT797
 * 
 * 
 * Escrito por Ahmad Shamshiri para RoboJax.com
 * // Publicado el 25 de agosto de 2022 en Aajx, Ontario, Canadá.
 * 
 * 
 * 
 * Proyecto 1: Encendido/apagado de un motor o carga (este proyecto)
 * Proyecto 2: Control de velocidad con código Arduino
 * Proyecto 3: Control de velocidad con potenciómetro y pulsador
 * Vea el video con instrucciones para este código: https://youtu.be/eqXaqRFAWrA
 * 
 * Este código forma parte del curso paso a paso de Arduino, que comienza aquí: https://youtu.be/-6qSrDUA5a8
 * 
 * Para acceder a la biblioteca de este código, visite http://robojax.com/
 * 
 * Si este tutorial le resultó útil, por favor, apóyeme para que pueda seguir creando contenido como este. Haga una donación con PayPal o tarjeta de crédito: https://bit.ly/donate-robojax
 * * Este código se proporciona "TAL CUAL", sin garantía ni responsabilidad. Uso gratuito siempre que conserve esta nota intacta.*
 * Este código se ha descargado de Robojax.com.
 * Este programa es software libre: puede redistribuirlo y/o modificarlo bajo los términos de la Licencia Pública General de GNU publicada por la Free Software Foundation, ya sea la versión 3 de la Licencia o (a su elección) cualquier versión posterior.
 * 
 * 
 * Este programa se distribuye con la esperanza de que sea útil, pero SIN GARANTÍA ALGUNA; ni siquiera la garantía implícita de COMERCIABILIDAD o IDONEIDAD PARA UN PROPÓSITO PARTICULAR. Consulte la Licencia Pública General de GNU para obtener más detalles.
 * 
 * 
 * Debería haber recibido una copia de la Licencia Pública General de GNU junto con este programa. De no ser así, consulte <https://www.gnu.org/licenses/>.
 */


const int MOTOR_OUT_PIN = 3;

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

const int STOP=0;
const int RUN=1;
int motorState=RUN;
int motorSpeed = 0; // entre 0 y 100%.
 // Instrucciones en video https://youtu.be/eqXaqRFAWrA


void setup() {
 // Código del controlador del motor MOSFET XY-GMOS de Robojax
  Serial.begin(9600);
  Serial.println("Robojax XY-GMOS Motor,  Arduino");

  pinMode(MOTOR_OUT_PIN, OUTPUT);


} // La configuración termina

 // La rutina de bucle se ejecuta una y otra vez eternamente:
void loop() {


 // vídeo https://youtu.be/eqXaqRFAWrA
  motorControl(50); // Haga funcionar el motor al 50%
  delay(5000); // Mantenlo funcionando durante 5000ms o 5 segundos
   stopMotor(); // detener el motor
  delay(3000); // Mantenlo detenido durante 5000ms o 5 segundos

  for(int i=0; i<100; i++)
  {
    motorControl(i);
    delay(200);
  }
  stopMotor(); // detener el motor
  delay(3000); // Mantenlo detenido durante 5000ms o 5 segundos

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

 // Código del controlador del motor MOSFET Robojax LR7843
} // extremo del bucle


/*
 * motorControl(int s)
 * @brief controla el motor con el valor s
 * @param no devuelve nada
 * @param "type" es carácter
 * 8 de mayo de 2020 a las 02:36 en Ajax, Ontario, Canadá
 */
void motorControl(int s)
{
 // Código del controlador del motor MOSFET Robojax LR7843
 // vídeo 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);
} // Control de motor


/*
 * stopMotor()
 * @brief detiene el motor
 * @param no devuelve nada
 * @param
 * 
 * 8 de mayo de 2020 a las 02:36 en Ajax, Ontario, Canadá
 */
void stopMotor(){
 // Código del controlador del motor MOSFET XY-GMOS de Robojax
  analogWrite( MOTOR_OUT_PIN, 0);
  Serial.println("STOPPED");
} // detenerMotor()

794-Code 3- Potentiometer: Optocoupled HW-532 to control using MOSFET FR120N , LR7843
Idioma: C++
/*
 * Lección 108-3: Control de velocidad del motor mediante una resistencia variable (potenciómetro) y un pulsador de arranque/parada con Arduino.
 * 
 * En esta lección, aprenderemos a usar el módulo con FR120N, LR7843 y MOSFET D4184 para encender y apagar una carga de CC de hasta 10 A. El HW-532 está aislado ópticamente de 5 V a 30 V, con una carga de hasta 10 A, según el módulo. Se muestra el esquema, se explica el diagrama de cableado y se muestran diferentes métodos de cableado con pulsador y potenciómetro.
 * 
 * Video: https://youtu.be/eqXaqRFAWrA
 * Obtén los códigos para este proyecto en https://robojax.com/RJT797
 * Escrito por Ahmad Shamshiri para RoboJax.com
 * // Publicado el 25 de agosto de 2022 en Aajx, Ontario, Canadá.
 * 
 * Proyecto 1: Encendido/Apagado de un motor o carga
 * Proyecto 2: Control de velocidad con código Arduino
 * Proyecto 3: Control de velocidad con potenciómetro y pulsador (este proyecto)
 * 
 * Vea el video con instrucciones para este código: https://youtu.be/eqXaqRFAWrA
 * 
 * Este código forma parte del curso paso a paso de Arduino, que comienza aquí: https://youtu.be/-6qSrDUA5a8
 * 
 * Para acceder a la biblioteca de este código, visite http://robojax.com/
 * 
 * Si este tutorial le resultó útil, por favor, apóyeme para que pueda seguir creando contenido como este. Haga una donación con PayPal o tarjeta de crédito: https://bit.ly/donate-robojax
 * 
 * Este código se proporciona "TAL CUAL", sin garantía ni responsabilidad. Uso gratuito siempre que conserve esta nota intacta.*
 * Este código se ha descargado de Robojax.com.
 * Este programa es software libre: puede redistribuirlo y/o modificarlo bajo los términos de la Licencia Pública General de GNU publicada por la Free Software Foundation, ya sea la versión 3 de la Licencia o (a su elección) cualquier versión posterior.
 * 
 * Este programa se distribuye con la esperanza de que sea útil, pero SIN GARANTÍA ALGUNA; ni siquiera la garantía implícita de COMERCIABILIDAD o IDONEIDAD PARA UN PROPÓSITO PARTICULAR. Consulte la Licencia Pública General de GNU para obtener más detalles.
 * 
 * Debería haber recibido una copia de la Licencia Pública General de GNU junto con este programa. De no ser así, consulte <https://www.gnu.org/licenses/>.
 */
const int POT_PIN =A0; // puede cambiar
const int MOTOR_OUT_PIN = 3; // ~
const int START_STOP_PIN=2; // para interruptor de botón pulsador

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

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

void pushButton();
void setup() {
 // Código del controlador del motor MOSFET XY-GMOS de Robojax
  Serial.begin(9600);
  Serial.println("Robojax XY-GMOS Motor,  Arduino");
  pinMode(START_STOP_PIN, INPUT_PULLUP);
  pinMode(MOTOR_OUT_PIN, OUTPUT);
 // Instrucciones en video https://youtu.be/eqXaqRFAWrA


}

 // La rutina de bucle se ejecuta una y otra vez eternamente:
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);
 // Código del controlador del motor MOSFET XY-GMOS de Robojax
 // Instrucciones en video https://youtu.be/eqXaqRFAWrA
} // extremo del bucle


/*
 * motorControl(int s)
 * @brief controla el motor con el valor s
 * @param no devuelve nada
 * @param "type" es carácter
 * 8 de mayo de 2020 a las 02:36 en Ajax, Ontario, Canadá
 */
void motorControl(int s)
{
 // Código del controlador del motor MOSFET Robojax LR7843
 // Instrucciones en 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);
} // Control de motor



/*
 * stopMotor()
 * @brief detiene el motor
 * @param no devuelve nada
 * @param
 * 
 * 8 de mayo de 2020 a las 02:36 en Ajax, Ontario, Canadá
 */
void stopMotor(){
 // Código del controlador del motor MOSFET XY-GMOS de Robojax
 // Instrucciones en video https://youtu.be/eqXaqRFAWrA
  analogWrite( MOTOR_OUT_PIN, 0);
  Serial.println("STOPPED");
} // detenerMotor()



/*
 * pushButton()
 * @brief lee el botón.
 * @param no devuelve nada.
 * @param
 * 
 * 8 de mayo de 2020 a las 02:36 en Ajax, Ontario, Canadá
 */
void pushButton()
{
 // Código del controlador del motor MOSFET XY-GMOS de Robojax
 // Instrucciones en video https://youtu.be/eqXaqRFAWrA
  if(digitalRead(START_STOP_PIN) ==LOW)
  {
    motorState =!motorState;
    delay(100);
  }

} // pulsador()

Cosas que podrías necesitar

Recursos y referencias

Aún no hay recursos.

Archivos📁

Hoja de datos (pdf)

Archivo de Fritzing

Otros archivos