ESP32 - 28BYJ-48 Schrittmotor ULN2003-Treiber

In diesem Tutorial werden wir die folgenden Themen behandeln:

ESP32 ULN2003 28BYJ-48 Schrittmotor

Schrittmotoren zeichnen sich durch präzise Positionsregelung aus, da sie eine vollständige Umdrehung in diskrete Schritte unterteilen. Diese Motoren finden Anwendung in einer Vielzahl von Geräten, einschließlich Druckern, 3D-Druckern, CNC-Maschinen und industriellen Automatisierungssystemen.

Eine erschwingliche Methode, um Einblicke in Schrittmotoren zu gewinnen, besteht darin, mit 28BYJ-48-Schrittmotoren zu experimentieren. Typischerweise werden diese Motoren mit Treiberplatinen geliefert, die auf dem ULN2003 basieren, wodurch ihre Nutzung erheblich erleichtert wird.

Erforderliche Hardware

1×ESP32 ESP-WROOM-32 Entwicklungsmodul
1×USB-Kabel Typ-A zu Typ-C (für USB-A PC)
1×USB-Kabel Typ-C zu Typ-C (für USB-C PC)
1×28BYJ-48 stepper motor + ULN2003 Driver Module
1×5V Netzteil
1×DC-Stromanschluss
1×Verbindungskabel
1×(Empfohlen) Schraubklemmen-Erweiterungsboard für ESP32
1×(Empfohlen) Breakout Expansion Board for ESP32
1×(Empfohlen) Stromverteiler für ESP32

Oder Sie können die folgenden Kits kaufen:

1×DIYables ESP32 Starter-Kit (ESP32 enthalten)
1×DIYables Sensor-Kit (30 Sensoren/Displays)
1×DIYables Sensor-Kit (18 Sensoren/Displays)
Offenlegung: Einige der in diesem Abschnitt bereitgestellten Links sind Amazon-Affiliate-Links. Wir können eine Provision für Käufe erhalten, die über diese Links getätigt werden, ohne zusätzliche Kosten für Sie. Wir schätzen Ihre Unterstützung.

Über den 28BYJ-48-Schrittmotor

Laut dem Datenblatt bewegt sich der 28BYJ-48-Motor im Vollschrittbetrieb in 11,25-Grad-Schritten, was 32 Schritte pro vollständiger Umdrehung ergibt (wie berechnet: 360°/11,25° = 32).

Außerdem verfügt der Motor über ein 1/64-Reduktionsgetriebe, das die Schrittzahl effektiv auf 32 × 64 erhöht und so 2048 Schritte pro Umdrehung ergibt. Jeder dieser 2048 Schritte entspricht einer Drehung von 360°/2048, was etwa 0,1758° pro Schritt ergibt.

Schlussfolgerung: Wenn der Motor 2048 Schritte macht (im Vollschrittmodus), dreht sich der Motor um eine Umdrehung.

Pinbelegung

Der 28BYJ-48-Schrittmotor verfügt über 5 Pins. Wir müssen uns nicht um die Details dieser Pins kümmern. Wir müssen ihn nur an den Anschluss des ULN2003-Motortreibers anschließen.

28BYJ-48 Schrittmotor

Über ULN2003-Schrittmotor-Treiber-Modul

Der ULN2003 zeichnet sich als weit verbreitetes Motortreiber-Modul für Schrittmotoren aus. Zu den wichtigsten Eigenschaften des Moduls gehören:

  • Vier LEDs, die aufleuchten, um die Aktivität der vier Steuereingänge anzuzeigen und damit effektiv den aktuellen Schaltzustand des Motors widerzuspiegeln. Diese LEDs dienen nicht nur einem praktischen Zweck, sondern verleihen dem Schrittmotor auch ein visuelles Element des Schaltvorgangs.
  • Ein ON/OFF-Jumper ist in das Modul integriert, der die Stromzufuhr zum angeschlossenen Schrittmotor isolieren kann. Diese Funktion bietet eine bequeme Möglichkeit, die Stromversorgung des Motors zu steuern und eine effiziente Energieverwaltung zu ermöglichen.

ULN2003 Pinbelegung

ULN2003-Schrittmotortreiber-Pinbelegung

ULN2003-Modul enthält 6 Pins und einen weiblichen Steckverbinder:

  • IN1-Pin: Wird verwendet, um den Motor anzusteuern. Verbinden Sie ihn mit einem Ausgangspin des ESP32.
  • IN2-Pin: Wird verwendet, um den Motor anzusteuern. Verbinden Sie ihn mit einem Ausgangspin des ESP32.
  • IN3-Pin: Wird verwendet, um den Motor anzusteuern. Verbinden Sie ihn mit einem Ausgangspin des ESP32.
  • IN4-Pin: Wird verwendet, um den Motor anzusteuern. Verbinden Sie ihn mit einem Ausgangspin des ESP32.
  • GND-Pin: Ist ein gemeinsamer Massepin. Er muss mit beiden Massen des ESP32 und der externen Stromversorgung verbunden werden.
  • VDD-Pin: Versorgt den Motor mit Strom. Verbinden Sie ihn mit der externen Stromversorgung.
  • Motoranschluss: Hier wird der Motor eingesteckt.

※ Notiz:

Wenn es um die Stromversorgung von Schrittmotoren geht, ist es wichtig, diese Richtlinien zu beachten:

  • Stellen Sie sicher, dass die Spannung des externen Netzteils den Spannungsanforderungen des Schrittmotors entspricht. Zum Beispiel, wenn Ihr Schrittmotor mit 12 V Gleichspannung betrieben wird, ist es entscheidend, ein 12-V-Netzteil zu verwenden. Im Fall des 28BYJ-48-Schrittmotors, der mit 5 V Gleichspannung betrieben wird, ist es zwingend erforderlich, ein 5-V-Netzteil zu verwenden.
  • Es ist wichtig zu beachten, dass selbst wenn ein Schrittmotor für den Betrieb mit einer 5-V-Stromversorgung ausgelegt ist, der VDD-Pin nicht mit dem 5-V-Pin des ESP32 verbunden werden sollte. Stattdessen verbinden Sie den VDD-Pin mit einer externen 5-V-Stromquelle. Diese Vorsichtsmaßnahme ist wichtig, da Schrittmotoren eine beträchtliche Leistung ziehen können, die die Leistungsfähigkeit der Stromversorgung des ESP32 übersteigen könnte und dadurch Probleme oder Schäden verursachen könnte.

Verdrahtungsdiagramm

ESP32-Schrittmotor ULN2003-Treiber Verdrahtungsdiagramm

Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.

Wenn Sie nicht wissen, wie Sie ESP32 und andere Komponenten mit Strom versorgen, finden Sie Anleitungen im folgenden Tutorial: Wie man ESP32 mit Strom versorgt.

Bitte beachten Sie, dass wir uns nicht um die Drahtfarbe des Schrittmotors kümmern müssen. Wir müssen lediglich den männlichen Stecker (beim 28BYJ-48-Schrittmotor) an den weiblichen Stecker (am ULN2003-Treiber) anschließen.

So programmieren Sie, um einen Schrittmotor zu steuern

Bei der Steuerung eines Schrittmotors gibt es drei Hauptmethoden:

  • Vollschritt
  • Halbschritt
  • Mikroschritt

Für grundlegende Anwendungen ist der Vollschrittbetrieb oft ausreichend. Allerdings werden im letzten Teil dieses Tutorials detaillierte Erklärungen zu allen drei Methoden gegeben. Es ist zu beachten, dass die Programmierung dieser Methoden komplex sein kann. Die gute Nachricht ist, dass es viele Bibliotheken gibt, die diese Komplexität für uns bewältigen. Alles, was wir tun müssen, ist die entsprechende Bibliothek zu verwenden, um die Steuerung von Schrittmotoren in unseren Projekten zu vereinfachen.

Die Arduino-IDE enthält eine integrierte Stepper-Bibliothek, aber wir raten davon ab, sie aus folgenden Gründen zu verwenden:

  • Blockierende Natur: Diese Bibliothek arbeitet blockierend, was bedeutet, dass sie die Ressourcen des ESP32 monopolisiert und daran hindert, während der Schrittmotor gesteuert wird, andere Aufgaben auszuführen.
  • Begrenzte Funktionalität: Die eingebaute Stepper-Bibliothek bietet möglicherweise nicht alle Funktionen und Merkmale, die Sie für Ihr Projekt benötigen.

Stattdessen empfehlen wir, die AccelStepper Bibliothek zu verwenden. Diese Bibliothek bietet mehrere Vorteile, darunter:

  • Beschleunigung und Abbremsung: AccelStepper unterstützt eine sanfte Beschleunigung und Abbremsung, wodurch eine präzisere Steuerung ermöglicht wird.
  • Vollschritt- und Halbschrittbetrieb: Sie können zwischen Vollschritt- und Halbschrittbetriebsmodi für Ihren Schrittmotor wählen.
  • Mehrere Schrittmotoren gleichzeitig: AccelStepper ermöglicht die Steuerung mehrerer Schrittmotoren gleichzeitig, wobei jeder Schrittmotor unabhängig und gleichzeitig läuft.

Es ist jedoch wichtig zu beachten, dass die Bibliothek einen Nachteil hat: Sie unterstützt keinen Mikroschrittbetrieb.

ESP32-Code

/* * Dieser ESP32 Code wurde von newbiely.de entwickelt * Dieser ESP32 Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/tutorials/esp32/esp32-28byj-48-stepper-motor-uln2003-driver */ // Include the AccelStepper Library #include <AccelStepper.h> // define step constant #define FULLSTEP 4 #define STEP_PER_REVOLUTION 2048 // this value is from datasheet // Pins entered in sequence IN1-IN3-IN2-IN4 for proper step sequence AccelStepper stepper(FULLSTEP, 19, 18, 17, 16); // ESP32 pin: GPIO19, GPIO18, GPIO17, GPIO16 void setup() { Serial.begin(9600); stepper.setMaxSpeed(1000.0); // set the maximum speed stepper.setAcceleration(50.0); // set acceleration stepper.setSpeed(200); // set initial speed stepper.setCurrentPosition(0); // set position stepper.moveTo(STEP_PER_REVOLUTION); // set target position: 64 steps <=> one revolution } void loop() { // change direction once the motor reaches target position if (stepper.distanceToGo() == 0) stepper.moveTo(-stepper.currentPosition()); stepper.run(); // MUST be called in loop() function Serial.print(F("Current Position: ")); Serial.println(stepper.currentPosition()); }

Schnelle Schritte

  • Wenn Sie ESP32 zum ersten Mal verwenden, lesen Sie wie man die Umgebung für ESP32 in der Arduino IDE einrichtet.
  • Schließen Sie die Verkabelung entsprechend dem obigen Bild an.
  • Schließen Sie das ESP32-Board über ein Micro-USB-Kabel an Ihren PC an.
  • Öffnen Sie die Arduino-IDE auf Ihrem PC.
  • Wählen Sie das richtige ESP32-Board (z. B. ESP32 Dev Module) und den COM-Port aus.
  • Klicken Sie auf das Bibliotheken-Symbol in der linken Leiste der Arduino IDE.
  • Suchen Sie “AccelStepper”, und finden Sie die AccelStepper-Bibliothek von Mike McCauley.
  • Klicken Sie auf die Installieren-Schaltfläche, um die AccelStepper-Bibliothek zu installieren.
ESP32 AccelStepper-Bibliothek
  • Kopiere den obigen Code und öffne ihn mit der Arduino IDE
  • Klicke in der Arduino IDE auf die Upload-Schaltfläche, um den Code auf den ESP32 hochzuladen
  • Sieh, wie sich der Motor dreht. Er sollte:
    • Drehe eine Umdrehung im Uhrzeigersinn, und dann
    • Drehe zwei Umdrehungen gegen den Uhrzeigersinn, und dann
    • Drehe zwei Umdrehungen im Uhrzeigersinn

    Dieser Prozess wird unendlich oft wiederholt.

    • Siehe das Ergebnis im seriellen Monitor.

Wie man mehrere 28BYJ-48-Schrittmotoren steuert

Lass uns lernen, wie man zwei Schrittmotoren gleichzeitig unabhängig voneinander steuert.

Schaltplan für zwei 28BYJ-48-Schrittmotoren

ESP32-Zwei-Schrittmotor-ULN2003-Treiber-Schaltplan

Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.

ESP32-Code für zwei 28BYJ-48-Schrittmotoren

/* * Dieser ESP32 Code wurde von newbiely.de entwickelt * Dieser ESP32 Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/tutorials/esp32/esp32-28byj-48-stepper-motor-uln2003-driver */ // Include the AccelStepper Library #include <AccelStepper.h> // define step constant #define FULLSTEP 4 #define STEP_PER_REVOLUTION 2048 // this value is from datasheet // Pins entered in sequence IN1-IN3-IN2-IN4 for proper step sequence AccelStepper stepper_1(FULLSTEP, 23, 22, 21, 19); AccelStepper stepper_2(FULLSTEP, 18, 5, 17, 16); void setup() { Serial.begin(9600); stepper_1.setMaxSpeed(1000.0); // set the maximum speed stepper_1.setAcceleration(50.0); // set acceleration stepper_1.setSpeed(200); // set initial speed stepper_1.setCurrentPosition(0); // set position stepper_1.moveTo(STEP_PER_REVOLUTION); // set target position: 64 steps <=> one revolution stepper_2.setMaxSpeed(1000.0); // set the maximum speed stepper_2.setAcceleration(50.0); // set acceleration stepper_2.setSpeed(200); // set initial speed stepper_2.setCurrentPosition(0); // set position stepper_2.moveTo(STEP_PER_REVOLUTION); // set target position: 64 steps <=> one revolution } void loop() { // change direction once the motor reaches target position if (stepper_1.distanceToGo() == 0) stepper_1.moveTo(-stepper_1.currentPosition()); if (stepper_2.distanceToGo() == 0) stepper_2.moveTo(-stepper_2.currentPosition()); stepper_1.run(); // MUST be called in loop() function stepper_2.run(); // MUST be called in loop() function Serial.print(F("stepper_1# current position: ")); Serial.println(stepper_1.currentPosition()); Serial.print(F("stepper_2# current position: ")); Serial.println(stepper_2.currentPosition()); }

※ UNSERE NACHRICHTEN

  • Sie können gerne den Link zu diesem Tutorial teilen. Bitte verwenden Sie jedoch unsere Inhalte nicht auf anderen Websites. Wir haben viel Mühe und Zeit in die Erstellung der Inhalte investiert, bitte respektieren Sie unsere Arbeit!