Suchcode

Wie man den MOSFET-Optokoppler HW-532 verwendet, um mit einem Arduino die Drehzahl eines bis zu 30 V DC-Motors oder eine Last zu steuern

Wie man den MOSFET-Optokoppler HW-532 verwendet, um mit einem Arduino die Drehzahl eines bis zu 30 V DC-Motors oder eine Last zu steuern

Diese Projektanleitung zeigt, wie man einen vielseitigen Drehzahlregler für Gleichstrommotoren mit einem Arduino und dem HW-532-MOSFET-Modul mit Optokoppler baut. Der MOSFET kannFR120N , LR7843 oder D4184.Damit können Sie die Geschwindigkeit und den Ein-/Aus-Zustand eines Gleichstrommotors bei Spannungen bis zu 30 V steuern. Das HW-532-Modul bietet Schutz und Isolation und ist damit sicherer und zuverlässiger als das direkte Anschließen des Motors an den Arduino.

Dieses Projekt ist für verschiedene Anwendungen wertvoll. Hier sind einige Beispiele:

  • Präzise Steuerung der Geschwindigkeit eines Roboterarms
  • Bau eines drehzahlgeregelten Lüfters für Kühlsysteme
  • Entwicklung automatisierter Maschinen mit einstellbarer Bewegung
  • Entwicklung einer motorisierten Ventilsteuerung für Flüssigkeitssysteme

Hardware/Komponenten

Die Kernkomponenten sind das Arduino, das HW-532 optokopplierte MOSFET-Modul (mit MOSFET-Optionen wie D4184, LR7843 oder FR120N), ein Gleichstrommotor (Nennspannung ≤ 30 V), Verbindungsdrähte und optional ein Potentiometer sowie ein Drucktastenschalter für erweiterte Steuerung (im Video bei 19:34).

Die Wahl des MOSFETs im HW-532-Modul hängt von Ihren Stromanforderungen ab (im Video bei 01:24). Das Video bietet einen detaillierten Vergleich der verschiedenen MOSFETs (im Video bei 06:50) und deren Eignung für verschiedene Anwendungen (im Video bei 09:45). Denken Sie daran, zum Schutz des Moduls eine Diode für induktive Lasten wie Gleichstrommotoren einzubauen (im Video bei 06:00 und 22:02).

Verdrahtungsanleitung

Die grundlegende Verkabelung verbindet den Pluspol des Motors mit dem Ausgang des HW-532, den Minuspol des Motors mit der Masse des HW-532 und den Steuerpin des HW-532 mit einem digitalen Pin des Arduino (im Video bei 11:16).

Arduino wriing for HW-532 MOFET motor driver
Für eine fortgeschrittene Steuerung mit einem Potentiometer und einem Drucktaster wird ein detailliertes Verdrahtungsdiagramm im Video gezeigt (im Video bei 19:44).

Code-Erklärung

Der bereitgestellte Code bietet drei Ebenen der Steuerung:

Schematic for HW-532 using FR120N MOSFET
  1. Ein/Aus-Steuerung:Dieser einfache Code (im Video bei 15:05) verwendet einen digitalen Pin, um den Motor ein- und auszuschalten. Der vom Benutzer konfigurierbare Teil ist derMOTOR_OUT_PINKonstante, die definiert, welcher Arduino-Pin das HW-532-Modul steuert.
  2. PWM-Geschwindigkeitsregelung:Dieser Code (im Video bei 15:39) verwendet Pulsweitenmodulation (PWM), um die Drehzahl des Motors zu steuern. Der Benutzer kann Anpassungen vornehmen.SPEED_MAXundSPEED_MINum die oberen und unteren Grenzen der Geschwindigkeitsregelung festzulegen, und diemotorControl()undstopMotor()Funktionen werden verwendet, um den Motor zu steuern bzw. anzuhalten.
  3. Potentiometer- und Drucktastensteuerung:Dieser Code (im Video bei 22:12) ermöglicht die Steuerung der Motordrehzahl mit einem Potentiometer und das Starten/Stoppen über einen Drucktaster. Vom Benutzer konfigurierbare Teile umfassenPOT_PIN(Anschlussstift des Potentiometers),MOTOR_OUT_PIN(PWM-Steuerpin),START_STOP_PIN(Druckknopfstift),SPEED_MAX, undSPEED_MIN.

Live-Projekt/Demonstration

Das Video demonstriert die Funktionsweise aller drei Codebeispiele. Die Ein-/Aus-Steuerung wird gezeigt (im Video bei 11:41), gefolgt von der PWM-Geschwindigkeitsregelung (im Video bei 16:53) und schließlich der Steuerung mit Potentiometer und Drucktaster (im Video bei 23:02).

Kapitel

  • [00:00] Einführung und Projektübersicht
  • [01:24] HW-532-Modul und MOSFET-Optionen
  • [03:23] Schaltplan und Erklärung
  • [05:11] Komponentendetails
  • [06:50] Analyse des MOSFET-Datenblatts
  • [11:16] Grundlegende Verdrahtung und Ein-/Aus-Demonstration
  • [15:05] Arduino-Code für Ein/Aus-Steuerung
  • [15:39] Arduino-Code für PWM-Geschwindigkeitsregelung
  • [19:34] Verdrahtung mit Potentiometer und Drucktaster
  • [22:12] Arduino-Code mit Potentiometer und Drucktaster

Bilder

Schematische Darstellung für HW-532 mit FR120N MOSFET
Schematische Darstellung für HW-532 mit 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
Sprache: C++
/*
 * Lektion 108-1: In dieser Lektion lernen wir, wie man das Modul mit FR120N, LR7843 und D4184 MOSFET verwendet, um eine Gleichstromlast von bis zu 10 A ein- und auszuschalten. HW-532 optisch isoliert von 5V bis 30V, Last bis zu 10A, je nach Modul. Schaltplan gezeigt, Verdrahtungsdiagramm erklärt, verschiedene Verdrahtungsmethoden mit Druckknopf und Potentiometer ebenfalls gezeigt. Video https://youtu.be/eqXaqRFAWrA
 * 
 * Geschrieben von Ahmad Shamshiri für RoboJax.com
 * // Veröffentlicht am 25. August 2022 in Aajx, ON, Kanada.
 * 
 * Projekt 1: Ein-/Ausschalten eines Motors oder einer Last (dieses Projekt) 
 * Projekt 2: Geschwindigkeitsregelung mit Arduino-Code 
 * Projekt 3: Geschwindigkeitsregelung mit Potentiometer und einem Druckknopf
 * 
 * Videoanleitung für diesen Code ansehen: https://youtu.be/eqXaqRFAWrA
 * 
 * Dieser Code ist Teil des Arduino Step by Step Kurses, der hier beginnt: https://youtu.be/-6qSrDUA5a8
 * 
 * Für die Bibliothek dieses Codes besuchen Sie http://robojax.com/
 * 
 * Wenn Sie dieses Tutorial hilfreich fanden, unterstützen Sie mich bitte, damit ich weiterhin Inhalte wie diesen erstellen kann. Machen Sie eine Spende über PayPal mit Kreditkarte https://bit.ly/donate-robojax
 * 
 * Dieser Code ist "AS IS" ohne Gewährleistung oder Haftung. Frei zu verwenden, solange Sie dieses Hinweisblatt unverändert lassen.* 
 * Dieser Code wurde von Robojax.com heruntergeladen. 
 * Dieses Programm ist freie Software: Sie können es unter den Bedingungen der GNU-General Public License, wie sie von der Free Software Foundation veröffentlicht wurde, weiterverteilen und/oder ändern, entweder Version 3 der Lizenz oder (nach Ihrer Wahl) eine spätere Version.
 * 
 * Dieses Programm wird in der Hoffnung verteilt, dass es nützlich sein wird, 
 * aber OHNE JEDE GARANTIE; sogar ohne die implizierte Garantie der 
 * VERMARKTBARKEIT oder EIGNUNG FÜR EINEN BESTIMMTEN ZWECK. Siehe die 
 * GNU-General Public License für weitere Details.
 * 
 * Sie sollten eine Kopie der GNU-General Public License zusammen mit diesem Programm erhalten haben. Falls nicht, siehe <https://www.gnu.org/licenses/>.
 */
const int MOTOR_OUT_PIN=2;


void setup() {
 // Robojax MOSFET Motorsteuerungs-Code
  Serial.begin(9600);
  Serial.println("Robojax LR7834 ,  Arduino");

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


}

 // die Schleifenroutine läuft immer wieder und wieder für immer:
void loop() {


 // Robojax XY-GMOS MOSFET Motorsteuerungscode
} // Schleifenende
793-Code 2- PWM: Optocoupled HW-532 to control using MOSFET FR120N , LR7843
Sprache: C++
# include <Arduino_LSM6DS3.h>

/*
 * Lektion 108-2: In dieser Lektion lernen wir, wie man das Modul mit FR120N, LR7843 und D4184 MOSFET verwendet, um eine DC-Belastung von bis zu 10A ein- und auszuschalten. HW-532 ist optisch isoliert von 5V bis 30V bei einer Belastung von bis zu 10A, abhängig vom Modul. Schaltplan gezeigt, Verkabelungsdiagramm erklärt, verschiedene Verdrahtungsmethoden mit Druckknopf und Potentiometer sind ebenfalls gezeigt. 
 * Video https://youtu.be/eqXaqRFAWrA
 * Holen Sie sich den Code für dieses Projekt von https://robojax.com/RJT797
 * 
 * Verfasst von Ahmad Shamshiri für RoboJax.com
 * // Veröffentlicht am 25. August 2022 in Aajx, ON, Kanada.
 * 
 * Projekt 1: Ein-/Ausschalten eines Motors oder einer Last (dieses Projekt)
 * Projekt 2: Geschwindigkeitsregelung mit Arduino-Code
 * Projekt 3: Geschwindigkeitsregelung mit Potentiometer und einem Druckknopf
 * Sehen Sie sich die Videoanleitung für diesen Code an: https://youtu.be/eqXaqRFAWrA
 * 
 * Dieser Code ist Teil des Arduino Schritt-für-Schritt-Kurses, der hier beginnt: https://youtu.be/-6qSrDUA5a8
 * 
 * Für die Bibliothek dieses Codes besuchen Sie http://robojax.com/
 * 
 * Wenn Sie dieses Tutorial hilfreich fanden, unterstützen Sie mich bitte, damit ich weiterhin Inhalte wie diesen erstellen kann. Tätigen Sie eine Spende über PayPal mit Kreditkarte https://bit.ly/donate-robojax 
 * * Dieser Code ist "WIE BESEHEN" ohne Gewährleistung oder Haftung. Kann frei verwendet werden, solange Sie diese Notiz unverändert lassen.* 
 * Dieser Code wurde von Robojax.com heruntergeladen
 * Dieses Programm ist freie Software: Sie können es weiterverbreiten und/oder ändern
 * unter den Bedingungen der GNU General Public License, wie sie von
 * der Free Software Foundation veröffentlicht wurde, entweder in der Version 3 der Lizenz oder
 * (nach Ihrer Wahl) in einer späteren Version.
 * 
 * Dieses Programm wird in der Hoffnung verbreitet, dass es nützlich sein wird,
 * aber OHNE JEGLICHE GEWÄHRLEISTUNG; sogar ohne die implizierte Gewährleistung der
 * MARKTGÄNGIGKEIT oder EIGNUNG FÜR EINEN BESTIMMTEN ZWECK. Siehe die
 * GNU General Public License für weitere Details.
 * 
 * Sie sollten eine Kopie der GNU General Public License
 * zusammen mit diesem Programm erhalten haben. Wenn nicht, siehe <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; // zwischen 0 und 100%.
 // Videoanleitung https://youtu.be/eqXaqRFAWrA


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

  pinMode(MOTOR_OUT_PIN, OUTPUT);


} // Setup endet

 // die Schleifenroutine läuft immer wieder unendlich oft:
void loop() {


 // video https://youtu.be/eqXaqRFAWrA
  motorControl(50); // Motor bei 50% betreiben
  delay(5000); // lass es für 5000 ms oder 5 Sekunden laufen
   stopMotor(); // Motor stoppen
  delay(3000); // halte es für 5000 ms oder 5 Sekunden stoppe

  for(int i=0; i<100; i++)
  {
    motorControl(i);
    delay(200);
  }
  stopMotor(); // Motor stoppen
  delay(3000); // halte es für 5000 ms oder 5 Sekunden stoppe

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

 // Robojax LR7843 MOSFET-Motorsteuerungs-Code
} // Schleifenende


/*
 * motorControl(int s)
 * @brief steuert den Motor mit dem Wert s
 * @param gibt nichts zurück
 * @param "type" ist Zeichen
 * am 08. Mai 2020 um 02:36 in Ajax, Ontario, Kanada
 */
void motorControl(int s)
{
 // Robojax LR7843 MOSFET-Motorsteuerungs-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);
} // motorsteuerung


/*
 * stopMotor()
 * @brief stoppt den Motor
 * @param gibt nichts zurück
 * @param 
 * am 08. Mai 2020 um 02:36 in Ajax, Ontario, Kanada
 */
void stopMotor(){
 // Robojax XY-GMOS MOSFET Motorsteuerungscode
  analogWrite( MOTOR_OUT_PIN, 0);
  Serial.println("STOPPED");
} // stopMotor()

794-Code 3- Potentiometer: Optocoupled HW-532 to control using MOSFET FR120N , LR7843
Sprache: C++
/*
 * Lektion 108-3: Steuerung der Geschwindigkeit eines Motors mit variablen Widerstand (Potentiometer) und Verwendung des Start/Stopp-Tasters mit Arduino.
 * 
 * In dieser Lektion lernen wir, wie man das Modul mit FR120N, LR7843 und D4184 MOSFET verwendet, um eine DC-Last von bis zu 10A ein- und auszuschalten. HW-532 ist optisch isoliert von 5V bis 30V bei einer Last von bis zu 10A, abhängig vom Modul. Das Schaltbild ist gezeigt, das Verdrahtungsdiagramm erklärt, verschiedene Methoden der Verdrahtung mit Taster und Potentiometer sind ebenfalls gezeigt. 
 * Video https://youtu.be/eqXaqRFAWrA
 * Holen Sie sich den Code für dieses Projekt von https://robojax.com/RJT797
 * Geschrieben von Ahmad Shamshiri für RoboJax.com
 * // Veröffentlicht am 25. August 2022 in Aajx, ON, Kanada.
 * 
 * Projekt 1: Einschalten/Ausschalten eines Motors oder einer Last
 * Projekt 2: Steuerung der Geschwindigkeit mit Arduino-Code
 * Projekt 3: Steuerung der Geschwindigkeit mit Potentiometer und einem Taster (dieses Projekt)
 * 
 * Sehen Sie sich die Videoanleitung zu diesem Code an: https://youtu.be/eqXaqRFAWrA
 * 
 * Dieser Code ist Teil des Arduino Schritt-für-Schritt-Kurses, der hier beginnt: https://youtu.be/-6qSrDUA5a8
 * 
 * Für die Bibliothek dieses Codes besuchen Sie http://robojax.com/
 * 
 * Wenn Sie dieses Tutorial hilfreich fanden, unterstützen Sie mich bitte, damit ich weiterhin Inhalte wie diesen erstellen kann. Tätigen Sie eine Spende über PayPal mit Kreditkarte https://bit.ly/donate-robojax
 * 
 * Dieser Code ist "WIE BESEHEN" ohne Gewährleistung oder Haftung. Frei verwendbar, solange Sie diese Notiz intakt halten.* 
 * Dieser Code wurde von Robojax.com heruntergeladen.
 * Dieses Programm ist freie Software: Sie können es weiterverteilen und/oder modifizieren
 * unter den Bedingungen der GNU General Public License, wie sie von
 * der Free Software Foundation veröffentlicht wurde, entweder in der Version 3 der Lizenz oder
 * (nach Ihrer Wahl) in jeder späteren Version.
 * 
 * Dieses Programm wird in der Hoffnung verteilt, dass es nützlich sein wird,
 * aber OHNE JEGLICHE GEWÄHRLEISTUNG; ohne sogar die stillschweigende Garantie für
 * MARKTGÄNGLICHKEIT oder EIGNUNG FÜR EINEN BESTIMMTEN ZWECK. Siehe die
 * GNU General Public License für weitere Details.
 * 
 * Sie sollten eine Kopie der GNU General Public License
 * mit diesem Programm erhalten haben. Wenn nicht, siehe <https://www.gnu.org/licenses/>.
 */
const int POT_PIN =A0; // kann sich ändern
const int MOTOR_OUT_PIN = 3; // ~
const int START_STOP_PIN=2; // für Drucktaste-Schalter

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

const int STOP=0;
const int RUN=1;
int motorState=RUN;
int motorSpeed = 0; // zwischen 0 und 100%.

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


}

 // die Schleifenroutine läuft immer wieder und immer wieder für immer:
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 Motorsteuerungscode
 // video Anleitung https://youtu.be/eqXaqRFAWrA
} // Schleife Ende


/*
 * motorControl(int s)
 * @brief steuert den Motor mit dem Wert s
 * @param gibt nichts zurück
 * @param "Typ" ist Zeichen
 * am 08. Mai 2020 um 02:36 in Ajax, Ontario, Kanada
 */
void motorControl(int s)
{
 // Robojax LR7843 MOSFET Motorsteuerungscode
 // video Anleitung 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);
} // motorsteuerung



/*
 * stopMotor()
 * @brief stoppt den Motor
 * @param gibt nichts zurück
 * @param 
 * am 08. Mai 2020 um 02:36 in Ajax, Ontario, Kanada
 */
void stopMotor(){
 // Robojax XY-GMOS MOSFET Motorsteuerungscode
 // video Anleitung https://youtu.be/eqXaqRFAWrA
  analogWrite( MOTOR_OUT_PIN, 0);
  Serial.println("STOPPED");
} // stopMotor()



/*
 * pushButton()
 * @brief liest die Drucktaste
 * @param gibt nichts zurück
 * @param 
 * am 08. Mai 2020 um 02:36 in Ajax, Ontario, Kanada
 */
void pushButton()
{
 // Robojax XY-GMOS MOSFET Motorsteuerungscode
 // video Anleitung https://youtu.be/eqXaqRFAWrA
  if(digitalRead(START_STOP_PIN) ==LOW)
  {
    motorState =!motorState;
    delay(100);
  }

} // pushButton()

Dinge, die Sie vielleicht brauchen

Ressourcen & Referenzen

Noch keine Ressourcen vorhanden.

Dateien📁

Datenblatt (pdf)

Fritzing-Datei

Andere Dateien