Come usare il MOSFET optoaccoppiato HW-532 per controllare, con Arduino, la velocità di un motore in corrente continua fino a 30 V o un carico
Questa guida al progetto dimostra come costruire un versatile controllore di velocità per motori DC utilizzando un Arduino e il modulo MOSFET HW-532 con accoppiamento ottico. Il MOSFET può essereFR120N , LR7843 o D4184.Questo ti permette di controllare la velocità e l'accensione/spegnimento di un motore in corrente continua con tensioni fino a 30 V. Il modulo HW-532 offre protezione e isolamento, rendendolo più sicuro e affidabile rispetto al collegamento diretto del motore all'Arduino.

Questo progetto è utile per varie applicazioni. Ecco alcuni esempi:
- Controllare con precisione la velocità di un braccio robotico
- Costruire un ventilatore a velocità variabile per sistemi di raffreddamento
- Creazione di macchinari automatizzati con movimento regolabile
- Sviluppo di un controllo motorizzato per valvole in sistemi fluidi
Hardware/Componenti
I componenti principali sono l'Arduino, il modulo MOSFET optoaccoppiato HW-532 (con opzioni MOSFET come D4184, LR7843 o FR120N), un motore DC (tensione nominale ≤ 30V), i cavi di collegamento e, opzionalmente, un potenziometro e un interruttore a pulsante per un controllo avanzato (nel video a 19:34).
La scelta del MOSFET all'interno del modulo HW-532 dipende dalle tue esigenze di corrente (nel video a 01:24). Il video fornisce un confronto dettagliato dei diversi MOSFET (nel video a 06:50) e della loro idoneità per varie applicazioni (nel video a 09:45). Ricorda di includere un diodo per carichi induttivi, come i motori DC, per proteggere il modulo (nel video a 06:00 e 22:02).
Guida al cablaggio
Il cablaggio di base collega il terminale positivo del motore all'uscita dell'HW-532, il terminale negativo del motore a massa dell'HW-532 e il pin di controllo dell'HW-532 a un pin digitale di Arduino (nel video a 11:16).

Spiegazione del codice
Il codice fornito offre tre livelli di controllo:

- Controllo accensione/spegnimento:Questo semplice codice (nel video a 15:05) usa un pin digitale per accendere e spegnere il motore. La parte configurabile dall'utente è la
MOTOR_OUT_PINcostante, che definisce quale pin di Arduino controlla il modulo HW-532. - Controllo della velocità PWM:Questo codice (nel video a 15:39) utilizza la modulazione di larghezza d'impulso (PWM) per controllare la velocità del motore. L'utente può regolare
SPEED_MAXeSPEED_MINper impostare il limite superiore e il limite inferiore del controllo della velocità, e ilmotorControl()estopMotor()Le funzioni sono usate per controllare il motore e fermarlo, rispettivamente. - Controllo tramite potenziometro e pulsante:Questo codice (nel video al 22:12) consente di controllare la velocità del motore con un potenziometro e di avviarlo/arrestarlo con un pulsante. Le parti configurabili dall'utente includono
POT_PIN(pin del potenziometro),MOTOR_OUT_PIN(pin di controllo PWM),START_STOP_PIN(pin del pulsante),SPEED_MAX, eSPEED_MIN.
Progetto/Dimostrazione dal vivo
Il video dimostra il funzionamento di tutti e tre gli esempi di codice. Il controllo on/off è mostrato (nel video a 11:41), seguito dal controllo della velocità PWM (nel video a 16:53) e infine dal controllo tramite potenziometro e pulsante (nel video a 23:02).
Capitoli
- [00:00] Introduzione e panoramica del progetto
- [01:24] Modulo HW-532 e opzioni MOSFET
- [03:23] Schema del circuito e spiegazione
- [05:11] Dettagli del componente
- [06:50] Analisi della scheda tecnica del MOSFET
- [11:16] Cablaggio di base e dimostrazione di accensione/spegnimento
- [15:05] Codice Arduino per il controllo On/Off
- [15:39] Codice Arduino per il controllo della velocità PWM
- [19:34] Cablaggio con potenziometro e pulsante
- [22:12] Codice Arduino con potenziometro e pulsante
/*
* Lezione 108-1: In questa lezione impariamo come utilizzare il modulo con FR120N, LR7843 e D4184 MOSFET per accendere/spegnere un carico DC fino a 10A. HW-532 isolato otticamente da 5V a 30V, carico fino a 10A a seconda del modulo. Schema mostrato, diagramma di cablaggio spiegato, diversi metodi di cablaggio con pulsante e potenziometro mostrati. Video https://youtu.be/eqXaqRFAWrA
*
* Scritto da Ahmad Shamshiri per RoboJax.com
* // Pubblicato il 25 agosto 2022 a Aajx, ON, Canada.
*
* Progetto 1: Accensione/spegnimento di un motore o carico (questo progetto)
* Progetto 2: Controllo della velocità utilizzando codice Arduino
* Progetto 3: Controllo della velocità utilizzando potenziometro e un pulsante
*
* Guarda le istruzioni video per questo codice: https://youtu.be/eqXaqRFAWrA
*
* Questo codice è parte del Corso Arduino Passo dopo Passo che inizia qui: https://youtu.be/-6qSrDUA5a8
*
* Per la libreria di questo codice visita http://robojax.com/
*
* Se hai trovato utile questo tutorial, ti prego di supportarmi così posso continuare a creare contenuti come questo. Fai una donazione utilizzando PayPal con carta di credito https://bit.ly/donate-robojax
*
* Questo codice è "COSÌ COM'È" senza garanzia o responsabilità. Libero di essere utilizzato purché tu mantenga intatta questa nota.*
* Questo codice è stato scaricato da Robojax.com
* Questo programma è software libero: puoi redistribuirlo e/o modificarlo secondo i termini della GNU General Public License così come pubblicata dalla Free Software Foundation, sia nella versione 3 della Licenza, sia (a tua scelta) in qualsiasi versione successiva.
*
* Questo programma è distribuito nella speranza che possa essere utile, ma SENZA ALCUNA GARANZIA; senza nemmeno la garanzia implicita di COMMERCIABILITÀ o IDONEITÀ PER UN PARTICOLARE SCOPO. Vedi la GNU General Public License per ulteriori dettagli.
*
* Dovresti aver ricevuto una copia della GNU General Public License insieme a questo programma. In caso contrario, vedi <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
# 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()
/*
* Lezione 108-3: Controllo della velocità del motore usando un resistore variabile (potenziometro) e utilizzando un pulsante di avvio/arresto con Arduino.
*
* In questa lezione impariamo a utilizzare il modulo con FR120N, LR7843 e D4184 MOSFET per accendere/spegnere un carico in corrente continua fino a 10A. HW-532 otticamente isolato da 5V a 30V carico fino a 10A a seconda del modulo. Schema mostrato, diagramma di cablaggio spiegato, diversi metodi di cablaggio con pulsante e potenziometro mostrati anche.
* Video https://youtu.be/eqXaqRFAWrA
* Ottieni il codice per questo progetto da https://robojax.com/RJT797
* Scritto da Ahmad Shamshiri per RoboJax.com
* // Pubblicato il 25 agosto 2022 a Aajx, ON, Canada.
*
* Progetto 1: Accendere / spegnere un motore o un carico
* Progetto 2: Controllo della velocità usando codice Arduino
* Progetto 3: Controllo della velocità usando potenziometro e un pulsante (questo progetto)
*
* Guarda l'istruzione video per questo codice: https://youtu.be/eqXaqRFAWrA
*
* Questo codice fa parte del Corso Arduino Passo dopo Passo che inizia qui: https://youtu.be/-6qSrDUA5a8
*
* per la libreria di questo codice visita http://robojax.com/
*
* Se hai trovato utile questo tutorial, ti prego di supportarmi in modo che possa continuare a creare contenuti come questo. Fai una donazione utilizzando PayPal con carta di credito https://bit.ly/donate-robojax
*
* Questo codice è "COSÌ COM'È" senza garanzia o responsabilità. Libero di essere usato finché mantieni intatto questo avviso.*
* Questo codice è stato scaricato da Robojax.com
* Questo programma è software libero: puoi redistribuirlo e/o modificarlo
* sotto i termini della GNU General Public License come pubblicato da
* la Free Software Foundation, sia versione 3 della Licenza, o
* (a tua scelta) qualsiasi versione successiva.
*
* Questo programma è distribuito nella speranza che possa essere utile,
* ma SENZA ALCUNA GARANZIA; senza nemmeno la garanzia implicita di
* COMMERCIABILITÀ o IDONEITÀ PER UN PARTICOLARE SCOPO. Vedi la
* GNU General Public License per ulteriori dettagli.
*
* Dovresti aver ricevuto una copia della GNU General Public License
* insieme a questo programma. In caso contrario, consulta <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()
Cose di cui potresti avere bisogno
-
AmazonAcquista HW-532 da Amazonamzn.to
-
eBay
-
AliExpressAcquista il Driver per Motore FR120N da AliExpresss.click.aliexpress.com
Risorse e riferimenti
Nessuna risorsa ancora.
File📁
Scheda tecnica (pdf)
-
infineon-IRLR7843 LR7843 MOSFET scheda dati
infineon-irlr7843-datasheet-en.pdf0.37 MB
File Fritzing
-
Modulo Mosfot HW-532B
HW-532B.fzpz0.01 MB
Altri file
-
infineon-irfr120n-datasheet-en
infineon-irfr120n-datasheet-en.pdf0.39 MB -
alpha-and-Omega-AOD4184A_datasheet
alpha-and-Omega-AOD4184A_datasheet.pdf0.43 MB