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() {
 // Código do controlador de motor MOSFET Robojax
  Serial.begin(9600);
  Serial.println("Robojax LR7834 ,  Arduino");

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


}

 // a rotina de loop executa-se repetidamente para sempre:
void loop() {


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

/*
 * Aula 108-2: Nesta aula, aprendemos como usar o módulo com FR120N, LR7843 e D4184 MOSFET para ligar/desligar cargas DC de até 10A. HW-532 isolado opticamente 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 o código 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: Ligar/desligar 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 à instrução em vídeo para este código: https://youtu.be/eqXaqRFAWrA
 * 
 * Este código faz 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 uso desde que você mantenha esta nota intacta.* 
 * Este código foi baixado do Robojax.com 
 * Este programa é software livre: você pode redistribuí-lo e/ou modificá-lo 
 * de acordo com 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 sua escolha) qualquer versão posterior.
 * 
 * Este programa é distribuído na esperança de que seja útil, 
 * mas SEM QUAISQUER GARANTIAS; sem mesmo a garantia implícita de 
 * COMERCIALIZAÇÃO ou ADEQUAÇÃO A UMA FINALIDADE PARTICULAR. 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 MOTOR_OUT_PIN = 3;

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

const int STOP=0;
const int RUN=1;
int motorState=RUN;
int motorSpeed = 0; // entre 0 a 100%.
 // instrução em vídeo https://youtu.be/eqXaqRFAWrA


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

  pinMode(MOTOR_OUT_PIN, OUTPUT);


} // configuração termina

 // a rotina de loop executa repetidamente para sempre:
void loop() {


 // video https://youtu.be/eqXaqRFAWrA
  motorControl(50); // execute o motor a 50%
  delay(5000); // mantenha-o funcionando por 5000ms ou 5 segundos
   stopMotor(); // desligue o motor
  delay(3000); // mantenha-o parado por 5000ms ou 5 segundos

  for(int i=0; i<100; i++)
  {
    motorControl(i);
    delay(200);
  }
  stopMotor(); // parar motor
  delay(3000); // mantenha-o parado por 5000ms ou 5 segundos

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

 // Código do driver de motor MOSFET Robojax LR7843
} // fim do loop


/*
 * motorControl(int s)
 * @brief controla o motor com o valor s
 * @param não retorna nada
 * @param "tipo" é carácter
 * em 08 de maio de 2020 às 02:36 em Ajax, Ontário, Canadá
 */
void motorControl(int s)
{
 // Código do driver de motor MOSFET Robojax LR7843
 // 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);
} // controleMotor


/*
 * stopMotor()
 * @breve para de motor
 * @param não retorna nada
 * @param
 * em 08 de maio de 2020 às 02:36 em Ajax, Ontário, Canadá
 */
void stopMotor(){
 // Código do driver de motor 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
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; // pode mudar
const int MOTOR_OUT_PIN = 3; // ~
const int START_STOP_PIN=2; // para interruptor de botão pressionado

const int SPEED_MAX = 100; // em %
const int SPEED_MIN = 0; // em %
 // instrução em vídeo https://youtu.be/eqXaqRFAWrA

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

void pushButton();
void setup() {
 // Código do driver de motor Robojax XY-GMOS MOSFET
  Serial.begin(9600);
  Serial.println("Robojax XY-GMOS Motor,  Arduino");
  pinMode(START_STOP_PIN, INPUT_PULLUP);
  pinMode(MOTOR_OUT_PIN, OUTPUT);
 // instrução em vídeo https://youtu.be/eqXaqRFAWrA


}

 // a rotina do loop é executada repetidamente para sempre:
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 do driver de motor Robojax XY-GMOS MOSFET
 // instrução em vídeo https://youtu.be/eqXaqRFAWrA
} // fim do loop


/*
 * motorControl(int s)  
 * @brief controla o motor com o valor s  
 * @param não retorna nada  
 * @param "type" é um caractere  
 * em 08 de maio de 2020 às 02:36 em Ajax, Ontário, Canadá  
 */
void motorControl(int s)
{
 // Código do driver de motor MOSFET Robojax LR7843
 // instrução em 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);
} // controle de motor



/*
 * stopMotor()
 * @brief para o motor
 * @param não retorna nada
 * @param 
 * em 08 de maio de 2020 às 02:36 em Ajax, Ontário, Canadá
 */
void stopMotor(){
 // Código do driver de motor Robojax XY-GMOS MOSFET
 // instrução em vídeo https://youtu.be/eqXaqRFAWrA
  analogWrite( MOTOR_OUT_PIN, 0);
  Serial.println("STOPPED");
} // stopMotor()



/*
 * pushButton()
 * @breve lê o botão de pressão
 * @param retorna nada
 * @param 
 * em 08 de maio de 2020 às 02:36 em Ajax, Ontario, Canadá
 */
void pushButton()
{
 // Código do driver de motor Robojax XY-GMOS MOSFET
 // instrução em vídeo 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