Arduino Nano ESP32 - Schrittmotor

In diesem Tutorial lernen wir, wie man den Arduino Nano ESP32 verwendet, um den Schrittmotor zu steuern:

Die Anleitung kann auf jeden bipolaren Schrittmotor (4 Drähte) angewendet werden. Die Anleitung verwendet als Beispiel einen NEMA-17-Schrittmotor.

Arduino Nano ESP32 Schrittmotor

Erforderliche Hardware

1×Arduino Nano ESP32
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×Stepper Motor Nema 17
1×L298N Motortreiber-Modul
1×12V Netzteil
1×DC-Stromanschluss
1×Verbindungskabel
1×(Empfohlen) Schraubklemmen-Erweiterungsboard für Arduino Nano
1×(Empfohlen) Breakout-Erweiterungsboard für Arduino Nano
1×(Empfohlen) Stromverteiler für Arduino Nano ESP32

Oder Sie können die folgenden Kits kaufen:

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 Schrittmotor

Es gibt zwei gängige Typen von Schrittmotoren:

  • Bipolar: Diese Motoren haben 4 Drähte.
  • Unipolar: Unipolare Motoren können entweder 5 oder 6 Drähte haben. Im Fall eines 6-drahtigen unipolaren Schrittmotors können Sie effektiv vier von den sechs Drähten verwenden, um ihn zu steuern, als wäre er ein bipolarer Schrittmotor.

Wenn Sie sich speziell für einen 5-Draht-Unipolar-Schrittmotor interessieren, können Sie auf das Tutorial mit dem Titel Arduino Nano ESP32 - Steuerung des 28BYJ-48-Schrittmotors mit ULN2003-Treiber verweisen.

Dieses Tutorial widmet sich jedoch ausschließlich bipolaren Schrittmotoren.

Pinbelegung eines bipolaren Schrittmotors

Ein bipolarer Schrittmotor hat vier Anschlüsse, und diese Anschlüsse können je nach Hersteller unterschiedlich benannt sein. Nachfolgend finden Sie eine Tabelle mit einigen gängigen Anschlussbezeichnungen:

PIN NO Naming 1 Naming 2 Naming 3
1 A+ A A
2 A- A C
3 B+ B B
4 B- B D
Pinbelegung des bipolaren Schrittmotors

Die Anordnung der Pins, die Bezeichnungen der Drähte und die Farben der Drähte können von einem Hersteller zum anderen variieren. Um zu verstehen, wie die Drahtfarben den Pin-Bezeichnungen entsprechen, ist es wichtig, das vom Hersteller bereitgestellte Datenblatt oder Benutzerhandbuch zu konsultieren. Das obige Bild veranschaulicht die Spezifikationen zweier unterschiedlicher Motoren, die jeweils ihre eigenen Bezeichnungs- und Drahtfarbenkonventionen haben.

Schritte pro Umdrehung

Die Spezifikation des Motors gibt den Grad pro Schritt an (nennen wir ihn DEG_PER_STEP). Je nach Regelungsmethode wird die Schrittzahl pro Umdrehung (nennen wir STEP_PER_REVOLUTION) gemäß der folgenden Tabelle berechnet:

Control method Steps per Revolution Real degree per step
Full-step STEP_PER_REVOLUTION = 360 / DEG_PER_STEP DEG_PER_STEP
Half-step STEP_PER_REVOLUTION = (360 / DEG_PER_STEP) * 2 DEG_PER_STEP / 2
Micro-step (1/n) STEP_PER_REVOLUTION = (360 / DEG_PER_STEP) * n DEG_PER_STEP / n

Zum Beispiel, falls das Datenblatt des Motors 1,8° pro Schritt angibt:

Control method Steps per Revolution Real degree per step
Full-step 200 steps/revolution 1.8°
Half-step 400 steps/revolution 0.9°
Micro-step (1/n) (200 * n) steps/revolution (1.8 / n)°

So steuern Sie einen Schrittmotor mit dem Arduino Nano ESP32

Der Arduino Nano ESP32 kann Signale erzeugen, um den Schrittmotor zu steuern, doch diese Signale könnten nicht die erforderliche Spannung und Stromstärke aufweisen, die der Schrittmotor benötigt. Daher wird ein Zwischen-Hardwaretreiber benötigt, um die Lücke zwischen dem Arduino Nano ESP32 und dem Schrittmotor zu überbrücken. Dieser Treiber erfüllt zwei Hauptfunktionen:

  • Verstärkung der Steuersignale: Es erhöht den Strom und die Spannung der Steuersignale, die vom ESP32 ausgehen, und sorgt dafür, dass sie den Anforderungen des Schrittmotors entsprechen.
  • Schutz des ESP32: Gleichzeitig schützt es den Arduino Nano ESP32 vor den höheren Strom- und Spannungspegeln, die zum Betrieb des Schrittmotors verwendet werden, und verhindert potenzielle Schäden.

Für die Steuerung von Schrittmotoren stehen verschiedene Hardware-Treiber zur Verfügung, und eine häufig verwendete Option ist der L298N-Treiber.

Über den L298N-Treiber

Ein einzelner L298N-Treiber kann verwendet werden, um zwei Gleichstrommotoren oder einen Schrittmotor zu steuern. In diesem Tutorial lernen wir, wie man ihn verwendet, um den Schrittmotor zu steuern.

L298N Treiber-Pinbelegung

L298N Treiber-Pinbelegung

Der L298N-Treiber hat 11 Pins und drei Jumper:

  • VCC-Pin: versorgt den Motor mit Strom. Es kann irgendwo zwischen 5 und 35 V liegen.
  • GND-Pin: ist ein gemeinsamer Massepin und muss mit GND (0 V) verbunden werden.
  • 5V-Pin: versorgt das L298N-Modul mit Strom. Es kann durch 5 V vom Arduino Nano ESP32 versorgt werden.
  • IN1, IN2, IN3, IN4-Pins: sind mit Pins des ESP32 verbunden, um das Steuersignal zu empfangen, mit dem der Schrittmotor gesteuert wird.
  • OUT1, OUT2, OUT3, OUT4-Pins: sind mit dem Schrittmotor verbunden.
  • ENA, ENB-Jumper: werden verwendet, um den Schrittmotor zu aktivieren. Sie müssen beide Jumper (ENA und ENB) an Ort und Stelle belassen.
  • 5V-EN-Jumper: Wenn wir den 5V-EN-Jumper belassen, wird die Stromversorgung für das L298N-Modul aus dem VCC bezogen; wir müssen nichts an den 5V-Pin anschließen. Entfernen wir den 5V-EN-Jumper, müssen wir das L298N-Modul über einen 5V-Pin mit Strom versorgen.

Wie oben beschrieben verfügt der L298N-Treiber über zwei Eingangsspannungen:

  • Eine Versorgung für den Schrittmotor (VCC- und GND-Pins): von 5 bis 35 V.
  • Eine Versorgung für den internen Betrieb des L298N-Moduls (5V- und GND-Pins): von 5 bis 7 V. Wenn der 5V-EN-Jumper belassen wird, muss dieser Pin nicht mit irgendetwas verbunden werden.

Verdrahtungsdiagramm

Arduino Nano ESP32 Schrittmotor L298N-Treiber Verdrahtungsdiagramm

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

※ Notiz:

  • Bitte belassen Sie alle drei Jumper auf dem L298N-Modul an Ort und Stelle (falls die Stromversorgung des Motors ≤ 12 V).
  • Die Reihenfolge der Pins bei Schrittmotoren kann von Hersteller zu Hersteller variieren. Bitte prüfen Sie die untenstehende Tabelle auf die korrekte Verkabelung.

Verdrahtungstabelle zwischen Arduino Nano ESP32 und L298N-Motortreiber

Arduino Nano ESP32 pins L298N pins
D5 IN1
D4 IN2
D3 IN3
D2 IN4

Verdrahtungstabelle zwischen L298N-Treiber und Schrittmotor

Wichtig!: Bitte kümmern Sie sich nicht um die Drahtreihenfolge des Schrittmotors im obigen Verdrahtungsdiagramm. Es ist nur ein Beispiel. Die Reihenfolge der Pins bei Schrittmotoren kann zwischen Herstellern variieren. Stellen Sie sicher, dass Ihre Verdrahtung der untenstehenden Tabelle folgt.

L298N pins Stepper motor pins Or Or
OUT1 A+ A A
OUT2 A- A C
OUT3 B+ B B
OUT4 B- B D

Bevor Sie einen Schrittmotor kaufen, empfehlen wir Ihnen, das Datenblatt, die Spezifikationen oder das Handbuch des Schrittmotors zu prüfen. Stellen Sie sicher, dass sie die Zuordnung zwischen der Pinfarbe und der Bezeichnung angeben. Zum Beispiel bietet dieses Schrittmotor die Zuordnung wie im untenstehenden Bild gezeigt.

Schrittmotor-Spulenfarbzuordnung

Basierend auf dieser Zuordnung sieht die Verdrahtungstabelle folgendermaßen aus:

L298N pins stepper motor pins wire color
OUT1 A black wire
OUT2 C green wire
OUT3 B red wire
OUT4 D blue wire

※ Notiz:

In allen oben genannten Verdrahtungstabellen zwischen dem Schrittmotor und dem L298N-Treiber können wir OUT1 mit OUT2 sowie OUT3 mit OUT4 vertauschen. Daher gibt es mehr Möglichkeiten, die Verdrahtung vorzunehmen. Wenn wir sie jedoch vertauschen, kann sich die Drehrichtung der Motoren ändern (im Uhrzeigersinn bzw. im Gegenuhrzeigersinn).

So steuern Sie einen Schrittmotor mit einem L298N-Treiber.

Die Steuerung eines Schrittmotors ist keine einfache Aufgabe, insbesondere wenn man ihn nicht blockierend steuern möchte. Glücklicherweise wird dank der AccelStepper-Bibliothek die Steuerung des Schrittmotors zu einem Kinderspiel.

Der Arduino IDE verfügt auch über eine integrierte Stepper-Bibliothek. Allerdings empfehlen wir nicht, diese Bibliothek zu verwenden, weil:

  • Die Bibliothek bietet die blockierende Funktion.
  • Das bedeutet, dass es den Arduino Nano ESP32 daran hindert, andere Arbeiten auszuführen, während es den Schrittmotor steuert.
  • Es verfügt nicht über ausreichende Funktionen.

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

  • Beschleunigung
  • Verlangsamung.
  • Vollschritt- und Halbschrittbetrieb.
  • Mehrere gleichzeitig betriebene Schrittmotoren, jeweils mit unabhängiger, gleichzeitiger Schrittbewegung.
  • Nachteil: Mikroschrittbetrieb wird nicht unterstützt

So steuern Sie die Position des Schrittmotors über den L298N-Treiber

Wir können den Schrittmotor in die gewünschte Position bewegen, indem wir Folgendes verwenden:

stepper.moveTo(desiredPosition); // Bewege den Motor um eine Umdrehung

※ Notiz:

Die Funktion stepper.moveTo() ist nicht blockierend. Das ist ein großer Vorteil der Bibliothek. Allerdings müssen wir bei der Verwendung dieser Funktion aufmerksam sein:

  • Rufen Sie 'stepper.run()' so häufig wie möglich auf. Es sollte in der void loop() Funktion aufgerufen werden.
  • Verwenden Sie während der Motorbewegung NICHT die delay() Funktion.
  • Sie sollten während der Motorbewegung NICHT die Funktionen Serial.print() und Serial.println() verwenden. Diese Funktionen verlangsamen den Schrittmotor.

Wie man die Geschwindigkeit des Schrittmotors über den L298N-Treiber steuert

Wir können nicht nur die Geschwindigkeit, sondern auch die Beschleunigung und Abbremsung durch einige einfache Funktionen steuern.

stepper.setAcceleration(50.0); // Beschleunigung/Verzögerung festlegen stepper.setSpeed(200); // Gewünschte Geschwindigkeit festlegen

Wie man die Richtung des Schrittmotors über den L298N-Treiber steuert

Wenn Sie die Verkabelung wie oben vornehmen, dreht sich der Motor in:

  • Uhrzeigersinn: wenn wir den Motor von einer Position zu einer höheren Position steuern (Positionsinkrement)
  • Gegen den Uhrzeigersinn: wenn wir den Motor von einer Position zu einer niedrigeren Position steuern (Positionsdekrement)

Zum Beispiel:

  • Wenn die aktuelle Position 100 beträgt und wir den Motor auf 200 steuern, dreht sich der Motor im Uhrzeigersinn
  • Wenn die aktuelle Position -200 beträgt und wir den Motor auf -100 steuern, dreht sich der Motor im Uhrzeigersinn
  • Wenn die aktuelle Position 200 beträgt und wir den Motor auf 100 steuern, dreht sich der Motor gegen den Uhrzeigersinn
  • Wenn die aktuelle Position -100 beträgt und wir den Motor auf -200 steuern, dreht sich der Motor gegen den Uhrzeigersinn

※ Notiz:

Wie bereits erwähnt, falls Sie OUT1 mit OUT2 vertauschen oder OUT3 mit OUT4, kann die Erhöhung der Position gegen den Uhrzeigersinn erfolgen und die Verringerung der Position im Uhrzeigersinn erfolgen.

Wie man einen Schrittmotor stoppt

  • Der Schrittmotor stoppt automatisch, nachdem die gewünschte Position erreicht wurde.
  • Der Schrittmotor kann jederzeit durch Aufruf der Funktion stepper.stop() sofort gestoppt werden.

Arduino Nano ESP32-Code – Schrittmotor-Code

Der unten stehende Code führt Folgendes aus:

  • Drehe den Motor um eine Umdrehung im Uhrzeigersinn.
  • Stoppe den Motor 5 Sekunden lang.
  • Drehe den Motor um eine Umdrehung gegen den Uhrzeigersinn zurück.
  • Stoppe den Motor 5 Sekunden lang.
  • Dieser Prozess wird immer wiederholt.
/* * Dieser Arduino Nano ESP32 Code wurde von newbiely.de entwickelt * Dieser Arduino Nano 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/arduino-nano-esp32/arduino-nano-esp32-stepper-motor */ #include <AccelStepper.h> #define DEG_PER_STEP 1.8 #define STEP_PER_REVOLUTION (360 / DEG_PER_STEP) // The Arduino Nano ESP32 pin entered in sequence IN1-IN3-IN2-IN4 for proper step sequence AccelStepper stepper(AccelStepper::FULL4WIRE, D5, D3, D4, D2); long moveToPosition = STEP_PER_REVOLUTION; void setup() { Serial.begin(9600); stepper.setAcceleration(200.0); // set acceleration stepper.setSpeed(200); // set initial speed stepper.setCurrentPosition(0); // set position to 0 stepper.moveTo(STEP_PER_REVOLUTION); // move motor one revolution, in clockwise direction Serial.println("Motor moving in clockwise direction"); } void loop() { if (stepper.distanceToGo() == 0) { Serial.println("Motor is stopped"); delay(5000); // stop 5 seconds stepper.setCurrentPosition(0); // reset position to 0 moveToPosition = -1 * moveToPosition; // reverse direction stepper.moveTo(moveToPosition); // move motor one revolution if (stepper.distanceToGo() > 0) Serial.println("Motor moving in clockwise direction"); else if (stepper.distanceToGo() < 0) Serial.println("Motor moving in anticlockwise direction"); } // Serial.print(F("position: ")); // Serial.println(stepper.currentPosition()); stepper.run(); // MUST be called as frequently as possible }

Schnelle Schritte

Um mit dem Arduino Nano ESP32 zu beginnen, befolgen Sie diese Schritte:

  • Wenn Sie neu bei Arduino Nano ESP32 sind, lesen Sie das Tutorial wie man die Entwicklungsumgebung für Arduino Nano ESP32 in der Arduino IDE einrichtet.
  • Verdrahten Sie die Komponenten gemäß dem bereitgestellten Diagramm.
  • Schließen Sie das Arduino Nano ESP32-Board mit Ihrem Computer über ein USB-Kabel an.
  • Öffnen Sie die Arduino IDE auf Ihrem Computer.
  • Wählen Sie das Arduino Nano ESP32-Board und den entsprechenden COM-Port aus.
  • Öffnen Sie den Bibliotheks-Manager, indem Sie auf das Library Manager-Symbol in der linken Navigationsleiste der Arduino IDE klicken
  • Suchen Sie “AccelStepper”, und finden Sie dann die AccelStepper-Bibliothek von Mike McCauley
  • Klicken Sie auf die Install-Schaltfläche, um die AccelStepper-Bibliothek zu installieren.
Arduino Nano ESP32 AccelStepper-Bibliothek
  • Kopieren Sie den obigen Code und öffnen Sie ihn mit der Arduino IDE
  • Klicken Sie auf die Schaltfläche Hochladen in der Arduino IDE, um den Code auf den Arduino Nano ESP32 hochzuladen.
  • Sie werden Folgendes sehen:
    • Der Schrittmotor dreht sich eine Umdrehung im Uhrzeigersinn
    • Der Schrittmotor stoppt für 5 Sekunden
    • Der Schrittmotor dreht sich eine Umdrehung gegen den Uhrzeigersinn
    • Der Schrittmotor stoppt für 5 Sekunden
    • Der oben beschriebene Prozess wird wiederholt ausgeführt.
  • Siehe das Ergebnis im Serial Monitor
COM6
Send
Motor moving in clockwise direction Motor is stopped Motor moving in anticlockwise direction Motor is stopped Motor moving in clockwise direction Motor is stopped Motor moving in anticlockwise direction Motor is stopped Motor moving in clockwise direction Motor is stopped Motor moving in anticlockwise direction Motor is stopped
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Code-Erklärung

Lies die zeilenweise Erklärung in den Kommentarzeilen des Quellcodes!

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.

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