Код для поиска

How to use Mosfet Optocoupled HW-532 to control up to 30V DC Motor Speed or load using Arduino

How to use Mosfet Optocoupled HW-532 to control up to 30V DC Motor Speed or load using Arduino

This project guide demonstrates how to build a versatile DC motor speed controller using an Arduino and the HW-532 optocoupled MOSFET module. The mosfet may be FR120N , LR7843 or D4184. This allows you to control the speed and on/off state of a DC motor with voltages up to 30V. The HW-532 module offers protection and isolation, making it safer and more reliable than directly connecting the motor to the Arduino.

This project is valuable for various applications. Here are a few examples:

  • Precisely controlling the speed of a robotic arm
  • Building a variable-speed fan for cooling systems
  • Creating automated machinery with adjustable movement
  • Developing a motorized valve control for fluid systems

Hardware/Components

The core components are the Arduino, the HW-532 optocoupled MOSFET module (with MOSFET options like D4184, LR7843, or FR120N), a DC motor (voltage rating ≤ 30V), connecting wires, and optionally, a potentiometer and push-button switch for advanced control (in video at 19:34).

The choice of MOSFET within the HW-532 module depends on your current requirements (in video at 01:24). The video provides a detailed comparison of the different MOSFETs (in video at 06:50) and their suitability for various applications (in video at 09:45). Remember to include a diode for inductive loads like DC motors to protect the module (in video at 06:00 and 22:02).

Wiring Guide

The basic wiring connects the motor's positive terminal to the HW-532's output, the motor's negative terminal to the HW-532's ground, and the HW-532's control pin to an Arduino digital pin (in video at 11:16).

Arduino wriing for HW-532 MOFET motor driver
For more advanced control using a potentiometer and push button, a detailed wiring diagram is shown in the video (in video at 19:44).

Code Explanation

The provided code offers three levels of control:

Schematic for HW-532 using FR120N MOSFET
  1. On/Off Control: This simple code (in video at 15:05) uses a digital pin to switch the motor on and off. The user-configurable part is the MOTOR_OUT_PIN constant, which defines which Arduino pin controls the HW-532 module.
  2. PWM Speed Control: This code (in video at 15:39) uses Pulse Width Modulation (PWM) to control the motor's speed. The user can adjust SPEED_MAX and SPEED_MIN to set the upper and lower limits of the speed control, and the motorControl() and stopMotor() functions are used to control the motor and stop it, respectively.
  3. Potentiometer and Push-Button Control: This code (in video at 22:12) allows controlling the motor speed with a potentiometer and starting/stopping it with a push button. User-configurable parts include POT_PIN (potentiometer pin), MOTOR_OUT_PIN (PWM control pin), START_STOP_PIN (push button pin), SPEED_MAX, and SPEED_MIN.

Live Project/Demonstration

The video demonstrates the operation of all three code examples. The on/off control is shown (in video at 11:41), followed by PWM speed control (in video at 16:53), and finally, the potentiometer and push-button control (in video at 23:02).

Chapters

  • [00:00] Introduction and Project Overview
  • [01:24] HW-532 Module and MOSFET Options
  • [03:23] Circuit Schematic and Explanation
  • [05:11] Component Details
  • [06:50] MOSFET Datasheet Analysis
  • [11:16] Basic Wiring and On/Off Demonstration
  • [15:05] Arduino Code for On/Off Control
  • [15:39] Arduino Code for PWM Speed Control
  • [19:34] Wiring with Potentiometer and Push Button
  • [22:12] Arduino Code with Potentiometer and Push Button

Изображения

Schematic for HW-532 using FR120N MOSFET
Schematic for HW-532 using FR120N MOSFET
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
Язык: C++
/*
 * Урок 108-1: В этом уроке мы изучим, как использовать модуль с MOSFET FR120N, LR7843 и D4184 для включения/выключения постоянной нагрузки до 10А. HW-532 оптически изолирован от 5V до 30V, нагрузка до 10А в зависимости от модуля. Схема показана, объяснена схема подключения, также показаны различные методы подключения с помощью кнопки и потенциометра. Видео https://youtu.be/eqXaqRFAWrA
 * 
 * Автор: Ахмад Шамшир для RoboJax.com
 * // Опубликовано 25 августа 2022 года в Айдже, Онтарио, Канада.
 * 
 * Проект 1: Включение/выключение мотора или нагрузки (этот проект)
 * Проект 2: Управление скоростью с помощью кода Arduino
 * Проект 3: Управление скоростью с помощью потенциометра и кнопки
 * 
 * Смотрите видеоинструкцию для этого кода: https://youtu.be/eqXaqRFAWrA
 * 
 * Этот код является частью курса Arduino "Шаг за шагом", который начинается здесь: https://youtu.be/-6qSrDUA5a8
 * 
 * Для библиотеки этого кода посетите http://robojax.com/
 * 
 * Если вы нашли этот учебник полезным, пожалуйста, поддержите меня, чтобы я мог продолжать создавать такой контент. Сделать пожертвование с помощью PayPal по кредитной карте https://bit.ly/donate-robojax
 * 
 * Этот код предоставляется "КАК ЕСТЬ" без гарантий или обязательств. Свободно использовать при условии, что вы сохраните эту заметку нетронутой.*
 * Этот код был загружен с Robojax.com
 * Эта программа является бесплатным программным обеспечением: вы можете перераспределять и/или изменять ее на условиях Общей публичной лицензии GNU, опубликованной Фондом свободного программного обеспечения, либо версии 3 этой лицензии, либо (по вашему выбору) любой более поздней версии.
 * 
 * Эта программа распространяется в надежде, что она будет полезной, но БЕЗ ЛЮБЫХ ГАРАНТИЙ; даже без подразумеваемой гарантии ПРОДОВОЛЬСТВЕННОГО ИСПОЛЬЗОВАНИЯ или ПРИГОДНОСТИ ДЛЯ КОНКРЕТНОЙ ЦЕЛИ. Смотрите Общую публичную лицензию GNU для получения дополнительных сведений.
 * 
 * Вы должны были получить копию Общей публичной лицензии GNU вместе с этой программой. Если нет, смотрите <https://www.gnu.org/licenses/>.
 */
const int MOTOR_OUT_PIN=2;


void setup() {
 // Код драйвера моторов MOSFET Robojax
  Serial.begin(9600);
  Serial.println("Robojax LR7834 ,  Arduino");

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


}

 // цикл выполняется снова и снова навсегда:
void loop() {


 // Код драйвера мотора Robojax XY-GMOS MOSFET
} // конец цикла
793-Code 2- PWM: Optocoupled HW-532 to control using MOSFET FR120N , LR7843
Язык: C++
# include <Arduino_LSM6DS3.h>

/*
 * Урок 108-2: В этом уроке мы учимся использовать модуль с MOSFET FR120N, LR7843 и D4184 для включения/выключения постоянной нагрузки до 10A. HW-532 оптически изолирован от нагрузки 5V до 30V до 10A в зависимости от модуля. Схема показана, диаграмма проводки объяснена, показаны различные методы подключения с кнопкой и потенциометром. Видео https://youtu.be/eqXaqRFAWrA Получите код для этого проекта на https://robojax.com/RJT797
 * 
 * Написано Ахмадом Шамширом для RoboJax.com 
 * // Опубликовано 25 августа 2022 года в Ааджиксе, Онтарио, Канада.
 * 
 * Проект 1: Включение/выключение мотора или нагрузки (этот проект) 
 * Проект 2: Управление скоростью с использованием кода Arduino 
 * Проект 3: Управление скоростью с использованием потенциометра и кнопки 
 * Смотрите видеоинструкцию для этого кода: https://youtu.be/eqXaqRFAWrA
 * 
 * Этот код является частью курса Arduino "Шаг за шагом", который начинается здесь: https://youtu.be/-6qSrDUA5a8
 * 
 * для библиотеки этого кода посетите http://robojax.com/
 * 
 * Если вы нашли этот учебник полезным, пожалуйста, поддержите меня, чтобы я мог продолжать создавать такой контент. Сделайте пожертвование через PayPal кредитной картой https://bit.ly/donate-robojax 
 * * Этот код предоставляется "КАК ЕСТЬ" без каких-либо гарантий. Свободно используется при условии сохранения этой заметки.* 
 * Этот код был загружен с Robojax.com 
 * Эта программа является бесплатным программным обеспечением: вы можете распространять и/или изменять её в соответствии с условиями GNU General Public License, опубликованной Фондом свободного программного обеспечения, либо версии 3 Лицензии, либо (по вашему выбору) любой более поздней версии.
 * 
 * Эта программа распространяется в надежде, что она будет полезной, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ; без даже подразумеваемой гарантии ТОРГОВОЙ ПРИГОДНОСТИ или ПРИГОДНОСТИ ДЛЯ КОНКРЕТНОЙ ЦЕЛИ. См. GNU General Public License для получения более подробной информации.
 * 
 * Вы должны были получить копию GNU General Public License вместе с этой программой. Если нет, смотрите <https://www.gnu.org/licenses/>.
 */


const int MOTOR_OUT_PIN = 3;

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

const int STOP=0;
const int RUN=1;
int motorState=RUN;
int motorSpeed = 0; // от 0 до 100%.
 // видеоинструкция https://youtu.be/eqXaqRFAWrA


void setup() {
 // Robojax XY-GMOS MOSFET драйвер мотора код
  Serial.begin(9600);
  Serial.println("Robojax XY-GMOS Motor,  Arduino");

  pinMode(MOTOR_OUT_PIN, OUTPUT);


} // настройка завершена

 // цикл выполняется снова и снова бесконечно:
void loop() {


 // video https://youtu.be/eqXaqRFAWrA
  motorControl(50); // запустите мотор на 50%
  delay(5000); // держите его включенным в течение 5000 мс или 5 секунд
   stopMotor(); // остановите двигатель
  delay(3000); // держите его выключенным в течение 5000 мс или 5 секунд

  for(int i=0; i<100; i++)
  {
    motorControl(i);
    delay(200);
  }
  stopMotor(); // остановить двигатель
  delay(3000); // держите его выключенным в течение 5000 мс или 5 секунд

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

 // Рободжакс LR7843 MOSFET драйвер двигателя код
} // конец цикла


/*
 * управлениеMotor(int s)  
 * @кратко управляет мотором со значением s  
 * @параметр ничего не возвращает  
 * @параметр "тип" — символ  
 * 8 мая 2020 года в 02:36 в Аякс, Онтарио, Канада  
 */
void motorControl(int s)
{
 // Рободжакс LR7843 MOSFET драйвер двигателя код
 // 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);
} // моторное управление


/*
 * stopMotor()
 * @краткое описание останавливает двигатель
 * @param ничего не возвращает
 * @param 
 * 8 мая 2020 года в 02:36 в Ajax, Ontario, Canada
 */
void stopMotor(){
 // Robojax XY-GMOS MOSFET драйвер мотора код
  analogWrite( MOTOR_OUT_PIN, 0);
  Serial.println("STOPPED");
} // остановитьДвигатель()

794-Code 3- Potentiometer: Optocoupled HW-532 to control using MOSFET FR120N , LR7843
Язык: C++
/*
 * Урок 108-3: Управление скоростью мотора с помощью переменного сопротивления (потенциометра) и с использованием кнопки запуска/остановки с Arduino.
 * 
 * В этом уроке мы научимся использовать модуль с FR120N, LR7843 и D4184 MOSFET для включения/выключения нагрузки постоянного тока до 10A. HW-532 оптически изолирован для нагрузок от 5V до 30V до 10A в зависимости от модуля. Схема показана, схема подключения объяснена, также показаны различные методы подключения с кнопкой и потенциометром.
 * Видео https://youtu.be/eqXaqRFAWrA
 * Получите коды для этого проекта с https://robojax.com/RJT797
 * Написано Ахмадом Шамшири для RoboJax.com
 * // Опубликовано 25 августа 2022 года в Aajx, Онтарио, Канада.
 * 
 * Проект 1: Включение/выключение мотора или нагрузки
 * Проект 2: Управление скоростью с помощью кода Arduino
 * Проект 3: Управление скоростью с помощью потенциометра и кнопки (этот проект)
 * 
 * Смотрите видеоинструкцию для этого кода: https://youtu.be/eqXaqRFAWrA
 * 
 * Этот код является частью курса Arduino Шаг за Шагом, который начинается здесь: https://youtu.be/-6qSrDUA5a8
 * 
 * для библиотеки этого кода посетите http://robojax.com/
 * 
 * Если вы нашли этот учебник полезным, пожалуйста, поддержите меня, чтобы я мог продолжать создавать
 * контент вроде этого. Сделайте пожертвование с помощью PayPal кредитной картой https://bit.ly/donate-robojax
 * 
 * Этот код предоставляется "КАК ЕСТЬ" без каких-либо гарантий или обязательств. Бесплатно для использования, пока вы сохраняете это уведомление нетронутым.*
 * Этот код был скачан с Robojax.com
 * Эта программа является бесплатным программным обеспечением: вы можете перераспределять ее и/или изменять
 * ее в соответствии с условиями Общей публичной лицензии GNU, опубликованной
 * Фондом свободного программного обеспечения, версии 3 Лицензии или
 * (по вашему выбору) любой последующей версии.
 * 
 * Эта программа распространяется с надеждой, что она будет полезной,
 * но БЕЗ ЛЮБЫХ ГАРАНТИЙ; даже без предполагаемой гарантии
 * ТОРГОВОЙ СЛАБОСТИ или ПРИГОДНОСТИ ДЛЯ КОНКРЕТНОЙ ЦЕЛИ. См.
 * Общую публичную лицензию GNU для получения подробной информации.
 * 
 * Вы должны были получить копию Общей публичной лицензии GNU
 * вместе с этой программой. Если нет, см. <https://www.gnu.org/licenses/>.
 */
const int POT_PIN =A0; // может измениться
const int MOTOR_OUT_PIN = 3; // ~
const int START_STOP_PIN=2; // для кнопочного переключателя

const int SPEED_MAX = 100; // в %
const int SPEED_MIN = 0; // в %
 // видео инструкция https://youtu.be/eqXaqRFAWrA

const int STOP=0;
const int RUN=1;
int motorState=RUN;
int motorSpeed = 0; // от 0 до 100%.

void pushButton();
void setup() {
 // Код драйвера мотора 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);
 // видео инструкция https://youtu.be/eqXaqRFAWrA


}

 // рутинная петля выполняется снова и снова вечно:
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
 // видео инструкция https://youtu.be/eqXaqRFAWrA
} // конец цикла


/*
 * motorControl(int s)  
 * @brief управляет двигателем со значением s  
 * @param ничего не возвращает  
 * @param "type" - это символ  
 * 8 мая 2020 года в 02:36 в Эйджаксе, Онтарио, Канада  
 */
void motorControl(int s)
{
 // Код драйвера мотора MOSFET Robojax LR7843
 // видео инструкция 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);
} // моторное управление



/*
 * stopMotor()
 * @краткое описание остановить двигатель
 * @param ничего не возвращает
 * @param 
 * 08 мая 2020 года в 02:36 в Ajax, Ontario, Canada
 */
void stopMotor(){
 // Код драйвера мотора Robojax XY-GMOS MOSFET
 // видео инструкция https://youtu.be/eqXaqRFAWrA
  analogWrite( MOTOR_OUT_PIN, 0);
  Serial.println("STOPPED");
} // stopMotor()



/*
 * pushButton()
 * @brief считывает кнопку
 * @param ничего не возвращает
 * @param
 * 8 мая 2020 года в 02:36 в Ajax, Онтарио, Канада
 */
void pushButton()
{
 // Код драйвера мотора Robojax XY-GMOS MOSFET
 // видео инструкция https://youtu.be/eqXaqRFAWrA
  if(digitalRead(START_STOP_PIN) ==LOW)
  {
    motorState =!motorState;
    delay(100);
  }

} // проверкаКнопки()

Вещи, которые могут вам понадобиться

Ресурсы и ссылки

Ресурсов пока нет.

Файлы📁

Технический паспорт (pdf)

Файл Fritzing

Другие файлы