Arduino - Steuert den 28BYJ-48-Schrittmotor mit ULN2003-Treiber

In diesem Tutorial lernen wir:

Arduino ULN2003 28BYJ-48 Schrittmotor

Schrittmotoren sind großartige Motoren für die Positionsregelung. Die Schrittmotoren teilen eine vollständige Umdrehung in eine Anzahl gleicher Schritte auf. Sie werden in vielen Geräten eingesetzt, wie Druckern, 3D-Druckern, CNC-Maschinen und in der industriellen Automatisierung.

Eine der kostengünstigen Möglichkeiten, sich mit Schrittmotoren vertraut zu machen, besteht darin, 28BYJ-48-Schrittmotoren zu verwenden. Sie werden in der Regel mit einer ULN2003-basierten Treiberplatine geliefert, die die Bedienung super einfach macht.

Erforderliche Hardware

1×Arduino Uno R3
1×USB 2.0 Kabel Typ A/B (für USB-A PC)
1×USB 2.0 Kabel Typ C/B (für USB-C PC)
1×28BYJ-48 stepper motor + ULN2003 Driver Module
1×5V Netzteil
1×DC-Stromanschluss
1×Verbindungskabel
1×(Empfohlen) Schraubklemmenblock-Shield für Arduino Uno
1×(Empfohlen) Breadboard-Shield für Arduino Uno
1×(Empfohlen) Gehäuse für Arduino Uno
1×(Empfohlen) Prototyping-Grundplatte & Breadboard-Kit für Arduino Uno

Oder Sie können die folgenden Kits kaufen:

1×DIYables STEM V3 Starter-Kit (Arduino 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 entspricht der 28BYJ-48-Motor im Vollschrittbetrieb jeder Schritt einer Drehung von 11,25°. Das bedeutet, dass es 32 Schritte pro Umdrehung gibt (360°/11,25° = 32).

Außerdem hat der Motor ein 1:64-Untersetzungsgetriebe. Das bedeutet, dass er tatsächlich 32 × 64 = 2048 Schritte hat. Jeder Schritt entspricht 360°/2048 = 0,1758°.

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

Pinbelegung

Der 28BYJ-48-Schrittmotor verfügt über 5 Pins. Wir müssen uns nicht im Detail um diese Pins kümmern. Wir müssen sie einfach an den Anschluss des ULN2003-Motortreibers anschließen.

28BYJ-48-Schrittmotor

Über ULN2003-Schrittmotor-Treiber-Modul

Der ULN2003 ist eines der gängigsten Motortreiber-Module für Schrittmotoren.

  • Das Modul verfügt über vier LEDs, die die Aktivität von vier Steuereingangslinien anzeigen (zur Anzeige des Schrittzustands). Sie erzeugen beim Schrittvorgang einen beeindruckenden Effekt.
  • Das Modul kommt außerdem mit einem ON/OFF-Jumper, um die Stromversorgung zum Schrittmotor zu isolieren.

ULN2003 Pinbelegung

Pinbelegung des ULN2003-Schrittmotor-Treibers

ULN2003-Modul umfasst 6 Pins und einen weiblichen Steckverbinder:

  • IN1-Pin: Wird verwendet, um den Motor anzusteuern. Schließen Sie ihn an einen Ausgangspin des Arduino an.
  • IN2-Pin: Wird verwendet, um den Motor anzusteuern. Schließen Sie ihn an einen Ausgangspin des Arduino an.
  • IN3-Pin: Wird verwendet, um den Motor anzusteuern. Schließen Sie ihn an einen Ausgangspin des Arduino an.
  • IN4-Pin: Wird verwendet, um den Motor anzusteuern. Schließen Sie ihn an einen Ausgangspin des Arduino an.
  • GND-Pin: Ist ein gemeinsamer Massepin. Er muss sowohl mit dem GND des Arduino als auch mit dem GND der externen Stromversorgung verbunden werden.
  • VDD-Pin: Versorgt den Motor mit Strom. Schließen Sie ihn an die externe Stromversorgung an.
  • Motoranschluss: Hier wird der Motor eingesteckt.

※ Notiz:

  • Die Spannung des externen Netzteils sollte der Spannung des Schrittmotors entsprechen. Zum Beispiel arbeitet ein Schrittmotor mit 12 V DC; wir benötigen eine 12-V-Spannungsversorgung. Im Fall des 28BYJ-48-Schrittmotors funktioniert dieser mit 5 V DC; wir verwenden eine 5-V-Spannungsversorgung.
  • Selbst wenn ein Schrittmotor eine 5-V-Spannungsversorgung benötigt, verbinden Sie den VDD-Pin NICHT mit dem 5-V-Pin des Arduino. Stattdessen schließen Sie ihn an eine externe 5-V-Spannungsversorgung an. Das liegt daran, dass der Schrittmotor zu viel Strom zieht.

Verdrahtungsdiagramm

Arduino-Schrittmotor ULN2003-Treiber Verdrahtungsdiagramm

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

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

Wie man programmiert, um einen Schrittmotor zu steuern

Es gibt drei Methoden, einen Schrittmotor zu steuern:

  • Vollschritt
  • Halbschritt
  • Mikroschritt

Für einfache Anwendungen können wir das Vollschritt-Verfahren verwenden. Die Details der drei Methoden werden im letzten Teil dieses Tutorials erläutert. Die Programmierung dieser Methoden ist kompliziert. Glücklicherweise gibt es viele Bibliotheken, die das für uns erledigt haben. Wir müssen nur eine Bibliothek verwenden.

Die Arduino-IDE verfügt über eine integrierte [Stepper]-Bibliothek. Wir empfehlen Ihnen jedoch nicht, diese Bibliothek zu verwenden, weil:

  • Die Bibliothek blockiert. Das bedeutet, dass sie Arduino daran hindert, andere Aufgaben auszuführen, während sie den Schrittmotor steuert.
  • Sie bietet nicht genügend Funktionen.

Stattdessen empfehlen wir Ihnen, die AccelStepper Bibliothek zu verwenden. Diese Bibliothek unterstützt:

  • Beschleunigung
  • Verzögerung.
  • Vollschritt- und Halbschrittbetrieb.
  • Mehrere Schrittmotoren gleichzeitig, mit unabhängiger, gleichzeitiger Schrittfolge bei jedem Motor.
  • Nachteil: Mikroschrittbetrieb wird nicht unterstützt

Arduino-Code

/* * Dieser Arduino Code wurde von newbiely.de entwickelt * Dieser Arduino 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/arduino/arduino-controls-28byj-48-stepper-motor-using-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, 11, 9, 10, 8); 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

  • Gehe zum Bibliotheken-Symbol in der linken Leiste der Arduino-IDE.
  • Suche „AccelStepper“, und finde anschließend die AccelStepper-Bibliothek von Mike McCauley.
  • Klicke auf die Schaltfläche Installieren, um die AccelStepper-Bibliothek zu installieren.
Arduino AccelStepper-Bibliothek
  • Kopieren Sie den obigen Code und öffnen Sie ihn mit der Arduino IDE
  • Klicken Sie in der Arduino IDE auf die Schaltfläche Hochladen, um den Code auf den Arduino zu übertragen
  • Sie sollten sehen, wie sich der Motor dreht. Er sollte:
    • Eine Umdrehung im Uhrzeigersinn durchführen, und dann
    • Zwei Umdrehungen gegen den Uhrzeigersinn durchführen, und dann
    • Zwei Umdrehungen im Uhrzeigersinn durchführen.

    Dieser Prozess wird unendlich oft wiederholt.

    • Siehe das Ergebnis im Serial Monitor
    COM6
    Send
    Autoscroll Show timestamp
    Clear output
    9600 baud  
    Newline  

Wie man mehrere 28BYJ-48-Schrittmotoren steuert

Lernen wir, wie man zwei Schrittmotoren gleichzeitig unabhängig voneinander steuert.

Verdrahtungsdiagramm für zwei 28BYJ-48-Schrittmotoren

Arduino zwei Schrittmotoren ULN2003-Treiber-Schaltplan

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

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

/* * Dieser Arduino Code wurde von newbiely.de entwickelt * Dieser Arduino 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/arduino/arduino-controls-28byj-48-stepper-motor-using-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, 11, 9, 10, 8); AccelStepper stepper_2(FULLSTEP, 7, 5, 6, 4); 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()); }

Zusätzliches Wissen

1. Schrittmotor vibriert während der Bewegung

Machen Sie sich keine Sorgen, wenn der Schrittmotor während der Bewegung vibriert. Dies ist eine Eigenschaft des Schrittmotors. Wir können die Vibration durch die Mikroschrittsteuerung reduzieren.

Außerdem kann der Schrittmotor, wenn wir ihn richtigsteuern, musikalische Klänge erzeugen, als wäre er ein Musikinstrument. Sie können dieses Projekt auf dem Arduino Project Hub sehen.

2. Methode zur Steuerung von Schrittmotoren

  • Vollschritt: Die Bewegungseinheit ist ein Schritt, der dem im Datenblatt oder Handbuch des Schrittmotors angegebenen Gradwert entspricht.
  • Halbschritt: Teilt jeden Vollschritt in zwei kleinere Schritte. Die Bewegungseinheit ist die Hälfte des Vollschritts. Diese Methode ermöglicht dem Motor, sich mit doppelter Auflösung zu bewegen.
  • Mikroschritt: Teilt jeden Vollschritt in viele kleinere Schritte. Die Bewegungseinheit ist ein Bruchteil des Vollschritts. Der Bruchteil kann 1/4, 1/8, 1/16, 1/32 oder noch mehr sein. Diese Methode ermöglicht es dem Motor, sich mit höherer Auflösung zu bewegen. Sie sorgt auch dafür, dass der Motor bei niedrigen Geschwindigkeiten gleichmäßiger läuft. Je feiner die Unterteilung, desto höher die Auflösung und desto gleichmäßiger die Bewegung.

Zum Beispiel, wenn das Datenblatt des Motors 1,8 Grad/Schritt angibt:

  • Vollschritt: Der Motor kann sich mit 1,8 Grad pro Schritt bewegen <⇒ 200 Schritte pro Umdrehung
  • Halbschritt: Der Motor kann sich mit 0,9 Grad pro Schritt bewegen <⇒ 400 Schritte pro Umdrehung
  • Mikroschritt: Der Motor kann sich mit 0,45, 0,225, 0,1125, 0,05625 Grad pro Schritt bewegen <⇒ 800, 1600, 3200, 6400... Schritte pro Umdrehung

Der obige Code verwendete die Vollschrittsteuerung.

3. Resonanzproblem

Dies sind die fortgeschrittenen Anwendungen. Die Anfänger müssen dabei NICHT darauf achten. Dies geschieht in einem Geschwindigkeitsbereich, in dem die Schrittfrequenz der natürlichen Frequenz des Motors entspricht. Es kann zu einer hörbaren Veränderung des vom Motor erzeugten Geräuschs kommen, ebenso wie zu einer Zunahme der Vibration. In realen Anwendungen sollte der Entwickler auf dieses Problem achten.

Video Tutorial

Wir erwägen die Erstellung von Video-Tutorials. Wenn Sie Video-Tutorials für wichtig halten, abonnieren Sie bitte unseren YouTube-Kanal , um uns zu motivieren, die Videos zu erstellen.

WARNING

Bitte beachten Sie, dass dieses Tutorial unvollständig ist. Wir werden auf unserer Facebook-Seite posten, wenn das Tutorial vollständig ist. Liken Sie sie, um auf dem Laufenden zu bleiben.

※ 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!