Código de Pesquisa

Como usar o MOSFET optoacoplado HW-532 para controlar a velocidade de um motor DC de até 30V ou uma carga usando o Arduino

Como usar o MOSFET optoacoplado HW-532 para controlar a velocidade de um motor DC de até 30V ou uma carga usando o Arduino

Este guia de projeto demonstra como construir um versátil controlador de velocidade para motor DC usando um Arduino e o módulo MOSFET optocoplado HW-532. O MOSFET pode serFR120N, LR7843 ou D4184.Isto permite controlar a velocidade e o estado ligado/desligado de um motor de corrente contínua com tensões de até 30V. O módulo HW-532 oferece proteção e isolamento, tornando-o mais seguro e mais confiável do que conectar o motor diretamente ao Arduino.

Este projeto é valioso para várias aplicações. Aqui estão alguns exemplos:

  • Controlando com precisão a velocidade de um braço robótico
  • Construção de um ventilador de velocidade variável para sistemas de arrefecimento
  • Criando máquinas automatizadas com movimento ajustável
  • Desenvolvendo um controle motorizado de válvula para sistemas de fluidos

Hardware/Componentes

Os componentes principais são o Arduino, o módulo MOSFET optoacoplado HW-532 (com opções de MOSFET como D4184, LR7843 ou FR120N), um motor CC (classificação de tensão ≤ 30V), fios de conexão e, opcionalmente, um potenciômetro e um interruptor push-button para controle avançado (no vídeo aos 19:34).

A escolha do MOSFET no módulo HW-532 depende dos seus requisitos de corrente (no vídeo em 01:24). O vídeo fornece uma comparação detalhada dos diferentes MOSFETs (no vídeo em 06:50) e sua adequação para várias aplicações (no vídeo em 09:45). Lembre-se de incluir um diodo para cargas indutivas, como motores DC, para proteger o módulo (no vídeo em 06:00 e 22:02).

Guia de Fiação

A fiação básica conecta o terminal positivo do motor à saída do HW-532, o terminal negativo do motor ao terra do HW-532 e o pino de controle do HW-532 a um pino digital do Arduino (no vídeo em 11:16).

Arduino wriing for HW-532 MOFET motor driver
Para um controle mais avançado usando um potenciômetro e um botão de pressão, um diagrama de fiação detalhado é mostrado no vídeo (no vídeo em 19:44).

Explicação do código

O código fornecido oferece três níveis de controle:

Schematic for HW-532 using FR120N MOSFET
  1. Controle Liga/Desliga:Este código simples (no vídeo, aos 15:05) usa um pino digital para ligar e desligar o motor. A parte configurável pelo usuário é aMOTOR_OUT_PINconstante, que define qual pino do Arduino controla o módulo HW-532.
  2. Controle de velocidade PWM:Este código (no vídeo em 15:39) usa Modulação por Largura de Pulso (PWM) para controlar a velocidade do motor. O usuário pode ajustarSPEED_MAXeSPEED_MINdefinir os limites superior e inferior do controle de velocidade, e omotorControl()estopMotor()Funções são usadas para controlar o motor e pará-lo, respectivamente.
  3. Controle por potenciômetro e botão de pressão:Este código (no vídeo em 22:12) permite controlar a velocidade do motor com um potenciômetro e ligá-lo/desligá-lo com um botão de pressão. As partes configuráveis pelo usuário incluemPOT_PIN(pino do potenciômetro),MOTOR_OUT_PIN(pino de controle PWM),START_STOP_PIN(pino do botão de pressão),SPEED_MAX, eSPEED_MIN.

Projeto ao Vivo/Demonstração

O vídeo demonstra o funcionamento dos três exemplos de código. O controle liga/desliga é mostrado (no vídeo em 11:41), seguido pelo controle de velocidade por PWM (no vídeo em 16:53) e, finalmente, o controle por potenciômetro e botão (no vídeo em 23:02).

Capítulos

  • [00:00] Introdução e Visão Geral do Projeto
  • [01:24] Módulo HW-532 e opções de MOSFET
  • [03:23] Esquema do circuito e explicação
  • [05:11] Detalhes do Componente
  • [06:50] Análise da ficha técnica do MOSFET
  • [11:16] Fiação Básica e Demonstração de Liga/Desliga
  • [15:05] Código Arduino para Controle Liga/Desliga
  • [15:39] Código Arduino para controle de velocidade por PWM
  • [19:34] Fiação com potenciômetro e botão de pressão
  • [22:12] Código Arduino com Potenciômetro e Botão de Pressão

Imagens

Esquema para HW-532 usando MOSFET FR120N
Esquema para HW-532 usando 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++
/*
 * Aula 108-1: Nesta aula, aprendemos a usar o módulo com FR120N, LR7843 e D4184 MOSFET para ligar/desligar uma carga DC de até 10A. HW-532 opticamente isolado de 5V a 30V com carga de até 10A, dependendo do módulo. Esquema mostrado, diagrama de fiação explicado, diferentes métodos de fiação com botão de pressão e potenciômetro também mostrados. Vídeo https://youtu.be/eqXaqRFAWrA
 * 
 * Escrito por Ahmad Shamshiri para RoboJax.com
 * // Publicado em 25 de agosto de 2022 em Aajx, ON, Canadá.
 * 
 * Projeto 1: Ligando/desligando um motor ou carga (este projeto)
 * Projeto 2: Controlando a velocidade usando código Arduino
 * Projeto 3: Controlando a velocidade usando potenciômetro e um botão de pressão
 * 
 * Assista ao vídeo de instrução para este código: https://youtu.be/eqXaqRFAWrA
 * 
 * Este código é parte do Curso Arduino Passo a Passo que começa aqui: https://youtu.be/-6qSrDUA5a8
 * 
 * Para a biblioteca deste código, visite http://robojax.com/
 * 
 * Se você achou este tutorial útil, por favor, me apoie para que eu possa continuar criando conteúdo como este. Faça uma doação usando PayPal por cartão de crédito https://bit.ly/donate-robojax
 * 
 * Este código é "COMO ESTÁ" sem garantia ou responsabilidade. Livre para ser usado desde que você mantenha esta nota intacta.*
 * Este código foi baixado do Robojax.com
 * Este programa é um software livre: você pode redistribuí-lo e/ou modificá-lo
 * sob os termos da Licença Pública Geral GNU conforme publicada pela
 * Free Software Foundation, seja a versão 3 da Licença, ou
 * (à sua escolha) qualquer versão posterior.
 * 
 * Este programa é distribuído com a esperança de que seja útil,
 * mas SEM QUALQUER GARANTIA; sem mesmo a garantia implícita de
 * COMERCIALIZAÇÃO ou ADEQUAÇÃO A UM PROPÓSITO ESPECÍFICO. Veja a
 * Licença Pública Geral GNU para mais detalhes.
 * 
 * Você deve ter recebido uma cópia da Licença Pública Geral GNU
 * juntamente com este programa. Se não, veja <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
Idioma: 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
Idioma: C++
/*
 * Aula 108-3: Controle de Velocidade do motor usando Resistor Variável (potenciômetro) e usando botão de Início/Parada com Arduino.
 * 
 * Nesta aula, aprendemos como usar o módulo com FR120N, LR7843 e D4184 MOSFET para ligar/desligar carga DC de até 10A. HW-532 opticamente isolado de 5V a 30V, carga de até 10A dependendo do módulo. Esquema mostrado, diagrama de fiação explicado, diferentes métodos de fiação com botão de pressão e potenciômetro também mostrados. 
 * Vídeo https://youtu.be/eqXaqRFAWrA 
 * Obtenha os códigos para este projeto em https://robojax.com/RJT797 
 * Escrito por Ahmad Shamshiri para RoboJax.com 
 * // Publicado em 25 de agosto de 2022 em Aajx, ON, Canadá.
 * 
 * Projeto 1: Ligando/desligando um motor ou carga 
 * Projeto 2: Controlando a velocidade usando código Arduino 
 * Projeto 3: Controlando a velocidade usando potenciômetro e um botão de pressão (este projeto)
 * 
 * Assista a instrução em vídeo para este código: https://youtu.be/eqXaqRFAWrA
 * 
 * Este código é parte do Curso Arduino Passo a Passo que começa aqui: https://youtu.be/-6qSrDUA5a8
 * 
 * para a biblioteca deste código visite http://robojax.com/
 * 
 * Se você achou este tutorial útil, por favor me apoie para que eu possa continuar criando conteúdo como este. Faça uma doação usando PayPal com cartão de crédito https://bit.ly/donate-robojax
 * 
 * Este código é "COMO ESTÁ" sem garantia ou responsabilidade. Livre para ser usado desde que você mantenha esta nota intacta.*
 * Este código foi baixado de Robojax.com 
 * Este programa é software livre: você pode redistribuí-lo e/ou modificá-lo sob os termos da Licença Pública Geral GNU, conforme publicado pela Free Software Foundation, seja a versão 3 da Licença, ou (a seu critério) qualquer versão posterior.
 * 
 * Este programa é distribuído na esperança de que seja útil, mas SEM QUALQUER GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou ADEQUAÇÃO A UM PROPÓSITO ESPECÍFICO. Veja a Licença Pública Geral GNU para mais detalhes.
 * 
 * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este programa. Se não, veja <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()

Coisas que você pode precisar

Recursos e referências

Ainda não há recursos.

Arquivos📁

Folha de dados (pdf)

Arquivo Fritzing

Outros arquivos