Cerca codice

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

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).

Arduino wriing for HW-532 MOFET motor driver
Per un controllo più avanzato con un potenziometro e un pulsante, nel video è mostrato uno schema di cablaggio dettagliato (a 19:44).

Spiegazione del codice

Il codice fornito offre tre livelli di controllo:

Schematic for HW-532 using FR120N MOSFET
  1. 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 è laMOTOR_OUT_PINcostante, che definisce quale pin di Arduino controlla il modulo HW-532.
  2. 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ò regolareSPEED_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.
  3. 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 includonoPOT_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

Immagini

Schema per HW-532 utilizzando MOSFET FR120N
Schema per HW-532 utilizzando 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
Lingua: C++
/*
 * 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() {
 // Codice del driver per motori MOSFET Robojax
  Serial.begin(9600);
  Serial.println("Robojax LR7834 ,  Arduino");

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


}

 // la routine del ciclo viene eseguita ripetutamente per sempre:
void loop() {


 // Codice del driver per motori MOSFET Robojax XY-GMOS
} // fine ciclo
793-Code 2- PWM: Optocoupled HW-532 to control using MOSFET FR120N , LR7843
Lingua: C++
# include <Arduino_LSM6DS3.h>

/*
 * Lezione 108-2: In questa lezione impariamo come usare il modulo con FR120N, LR7843 e D4184 MOSFET per accendere/spegnere un carico DC fino a 10A. HW-532 otticamente isolato da 5V a 30V per carichi 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 carico (questo progetto) 
 * Progetto 2: Controllare la velocità usando il codice Arduino 
 * Progetto 3: Controllare la velocità usando 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, per favore supportami affinché possa continuare a creare contenuti come questo. Fai una donazione usando PayPal con carta di credito https://bit.ly/donate-robojax 
 * * Questo codice è "COSÌ COM'È" senza garanzia o responsabilità. Libero di essere usato purché tu tenga intatta questa nota.* 
 * Questo codice è stato scaricato da Robojax.com 
 * Questo programma è software libero: puoi ridistribuirlo e/o modificarlo sotto i termini della GNU General Public License come pubblicata dalla Free Software Foundation, sia nella versione 3 della Licenza, o (a tua scelta) in qualsiasi versione successiva. 
 * 
 * Questo programma è distribuito con la speranza che sarà utile, ma SENZA ALCUNA GARANZIA; senza nemmeno la garanzia implicita di COMMERCIABILITÀ o IDONEITÀ PER UN PARTICOLARE SCOPIO. Vedi la GNU General Public License per ulteriori dettagli.
 * 
 * Dovresti aver ricevuto una copia della GNU General Public License insieme a questo programma. Se non l'hai ricevuta, vedi <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; // tra il 0 e il 100%.
 // Istruzioni video https://youtu.be/eqXaqRFAWrA


void setup() {
 // Codice del driver del motore MOSFET Robojax XY-GMOS
  Serial.begin(9600);
  Serial.println("Robojax XY-GMOS Motor,  Arduino");

  pinMode(MOTOR_OUT_PIN, OUTPUT);


} // fine dell'installazione

 // la routine del loop viene eseguita ripetutamente all'infinito:
void loop() {


 // video https://youtu.be/eqXaqRFAWrA
  motorControl(50); // eseguire il motore al 50%
  delay(5000); // mantienilo in funzione per 5000ms o 5 secondi
   stopMotor(); // ferma il motore
  delay(3000); // tienilo fermo per 5000 ms o 5 secondi

  for(int i=0; i<100; i++)
  {
    motorControl(i);
    delay(200);
  }
  stopMotor(); // ferma il motore
  delay(3000); // tienilo fermo per 5000 ms o 5 secondi

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

 // Codice del driver del motore MOSFET Robojax LR7843
} // fine ciclo


/*
 * motorControl(int s)
 * @brief controlla il motore con il valore s
 * @param non restituisce nulla
 * @param "tipo" è un carattere
 * l'8 maggio 2020 alle 02:36 ad Ajax, Ontario, Canada
 */
void motorControl(int s)
{
 // Codice del driver del motore 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);
} // controlomotore


/*
 * stopMotor()
 * @breve ferma il motore
 * @param restituisce nulla
 * @param 
 * l'8 maggio 2020 alle 02:36 ad Ajax, Ontario, Canada
 */
void stopMotor(){
 // Codice del driver del motore MOSFET Robojax XY-GMOS
  analogWrite( MOTOR_OUT_PIN, 0);
  Serial.println("STOPPED");
} // stopMotore()

794-Code 3- Potentiometer: Optocoupled HW-532 to control using MOSFET FR120N , LR7843
Lingua: C++
/*
 * 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; // può cambiare
const int MOTOR_OUT_PIN = 3; // ~
const int START_STOP_PIN=2; // per interruttore a pulsante

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

const int STOP=0;
const int RUN=1;
int motorState=RUN;
int motorSpeed = 0; // tra il 0 e il 100%.

void pushButton();
void setup() {
 // Codice del driver per motore MOSFET Robojax XY-GMOS
  Serial.begin(9600);
  Serial.println("Robojax XY-GMOS Motor,  Arduino");
  pinMode(START_STOP_PIN, INPUT_PULLUP);
  pinMode(MOTOR_OUT_PIN, OUTPUT);
 // istruzione video https://youtu.be/eqXaqRFAWrA


}

 // la routine del ciclo si ripete di continuo per 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);
 // Codice del driver per motore MOSFET Robojax XY-GMOS
 // istruzione video https://youtu.be/eqXaqRFAWrA
} // fine ciclo


/*
 * motorControl(int s) 
 * @brief controlla il motore con il valore s 
 * @param non restituisce nulla 
 * @param "tipo" è carattere 
 * l'8 maggio 2020 alle 02:36 ad Ajax, Ontario, Canada
 */
void motorControl(int s)
{
 // Codice driver per motore MOSFET Robojax LR7843
 // istruzione 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);
} // controllo del motore



/*
 * stopMotor()
 * @brief ferma il motore
 * @param non restituisce nulla
 * @param 
 * l'8 maggio 2020 alle 02:36 ad Ajax, Ontario, Canada
 */
void stopMotor(){
 // Codice del driver per motore MOSFET Robojax XY-GMOS
 // istruzione video https://youtu.be/eqXaqRFAWrA
  analogWrite( MOTOR_OUT_PIN, 0);
  Serial.println("STOPPED");
} // stopMotore()



/*
 * pushButton()
 * @brief legge il pulsante di attivazione
 * @param non restituisce nulla
 * @param
 * l'8 maggio 2020 alle 02:36 ad Ajax, Ontario, Canada
 */
void pushButton()
{
 // Codice del driver per motore MOSFET Robojax XY-GMOS
 // istruzione video https://youtu.be/eqXaqRFAWrA
  if(digitalRead(START_STOP_PIN) ==LOW)
  {
    motorState =!motorState;
    delay(100);
  }

} // pushButton()

Cose di cui potresti avere bisogno

Risorse e riferimenti

Nessuna risorsa ancora.

File📁

Scheda tecnica (pdf)

File Fritzing

Altri file