ESP32 - Schrittmotor

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

Dieses Tutorial kann auf jede Art von bipolarem Schrittmotor (4 Drähte) angewendet werden. Das Tutorial wird einen NEMA-17-Schrittmotor als Beispiel verwenden.

ESP32-Schrittmotor

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×Stepper Motor Nema 17
1×L298N Motortreiber-Modul
1×12V 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 Schrittmotor

Es gibt zwei gängige Typen von Schrittmotoren:

  • Bipolare: Diese Motoren verfügen über 4 Drähte.
  • Unipolare: Unipolare Motoren können entweder 5 oder 6 Drähte haben. Im Fall eines 6‑Draht‑Unipolar‑Schrittmotors können Sie effektiv vier der sechs Drähte 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 sich das Tutorial mit dem Titel ESP32 - Control 28BYJ-48 Stepper Motor Using ULN2003 Driver ansehen.

Dieses Tutorial ist jedoch ausschließlich bipolaren Schrittmotoren gewidmet.

Pinbelegung eines bipolaren Schrittmotors

Ein bipolarer Schrittmotor hat vier Pins, und diese Pins können je nach Hersteller unterschiedlich benannt sein. Im Folgenden finden Sie eine Tabelle mit einigen gängigen Pin-Bezeichnungen:

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 eines bipolaren Schrittmotors

Die Anordnung der Pins, die Namen der Drähte und die Drahtfarben können von Hersteller zu Hersteller unterschiedlich sein. Um zu verstehen, wie die Drahtfarben den Pin-Bezeichnungen entsprechen, ist es wichtig, das vom Hersteller bereitgestellte Datenblatt oder die Bedienungsanleitung zu konsultieren. Das oben gezeigte Bild veranschaulicht die Spezifikationen von zwei unterschiedlichen Motoren, von denen jeder seine eigenen Bezeichnungen für Drähte und Drahtfarben verwendet.

Schritte pro Umdrehung

Die Spezifikation des Motors gibt den Grad pro Schritt an (wir nennen ihn DEG_PER_STEP). Je nach Steuermethode wird die Anzahl der Schritte pro Umdrehung (wir nennen ihn 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 einen Schrittwinkel von 1,8 Grad 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)°

Wie man einen Schrittmotor mit dem ESP32 steuert

Der ESP32 kann Signale erzeugen, um den Schrittmotor anzusteuern, doch diese Signale erreichen möglicherweise nicht die erforderlichen Spannungs- und Strompegel, die der Schrittmotor benötigt. Daher wird ein Zwischen-Hardwaretreiber benötigt, der die Lücke zwischen dem ESP32 und dem Schrittmotor überbrückt. Dieser Treiber erfüllt zwei Hauptfunktionen:

  • Verstärkung der Steuersignale: Es erhöht den Strom und die Spannung der Steuersignale, die vom ESP32 stammen, und stellt sicher, dass sie den Anforderungen des Schrittmotors entsprechen.
  • Schutz des ESP32: Gleichzeitig schützt es den ESP32 vor den höheren Strom- und Spannungspegeln, die zum Antrieb des Schrittmotors verwendet werden, und verhindert potenzielle Schäden.

Verschiedene Hardware-Treiber stehen zur Steuerung von Schrittmotoren 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. Er kann zwischen 5 und 35 V liegen.
  • GND-Pin: ist ein gemeinsamer Massepin, der mit GND (0 V) verbunden werden muss.
  • 5V-Pin: versorgt das L298N-Modul mit Strom. Es kann vom ESP32 mit 5V versorgt werden.
  • IN1, IN2, IN3, IN4-Pins: sind mit den Pins des ESP32 verbunden, um das Steuersignal zum Ansteuern des Schrittmotors zu empfangen.
  • OUT1, OUT2, OUT3, OUT4-Pins: sind mit dem Schrittmotor verbunden.
  • ENA, ENB-Jumper: werden verwendet, um den Schrittmotor zu aktivieren. Sie müssen beide ENA- und ENB-Jumper an ihrem Platz belassen.
  • 5V-EN-Jumper: Bleibt der 5V-EN-Jumper gesetzt, bezieht das L298N-Modul seine Versorgung aus VCC, und es muss nichts an den 5V-Pin angeschlossen werden. Entfernen wir den 5V-EN-Jumper, muss das L298N-Modul über den 5V-Pin mit Strom versorgt werden.

Wie oben beschrieben hat der L298N-Treiber 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 in der Position belassen wird, muss dieser Pin nicht mit irgendetwas verbunden werden.

Verdrahtungsdiagramm

ESP32-Schrittmotor-L298N-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.

※ Notiz:

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

Verdrahtungstabelle zwischen ESP32 und L298N-Treiber

ESP32 pins L298N pins
7 IN1
6 IN2
5 IN3
4 IN4

Verdrahtungstabelle zwischen L298N-Treiber und Schrittmotor

Wichtig!: Bitte machen Sie sich keine Gedanken über die Drahtreihenfolge des Schrittmotors im obigen Verdrahtungsdiagramm. Es ist nur ein Beispiel. Die Reihenfolge der Pins an 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 Spezifikation oder das Handbuch des Schrittmotors zu prüfen. Stellen Sie sicher, dass sie die Zuordnung zwischen der Pin-Farbe und dem Namen angeben. Zum Beispiel bietet dieser Schrittmotor die Zuordnung wie im untenstehenden Bild dargestellt:

Farbzuordnung der Spulen eines Schrittmotors

Basierend auf dieser Zuordnung wird die Verdrahtungstabelle zu:

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 Verkabelung vorzunehmen. Wenn wir sie jedoch vertauschen, kann sich die Drehrichtung der Motoren ändern (von Uhrzeigersinn zu Gegenuhrzeigersinn und umgekehrt).

Wie man einen Schrittmotor mit einem L298N-Treiber steuert.

Die Steuerung eines Schrittmotors ist keine einfache Aufgabe, insbesondere wenn wir ihn auf nicht-blockierende Weise steuern möchten. Glücklicherweise macht die AccelStepper Bibliothek die Steuerung des Schrittmotors kinderleicht.

Die Arduino-IDE hat auch eine integrierte Stepper-Bibliothek. Wir empfehlen jedoch nicht, diese Bibliothek zu verwenden, weil:

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

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

  • Beschleunigung
  • Verzögerung.
  • Vollschritt- und Halbschrittbetrieb.
  • Mehrere gleichzeitig betriebene Schrittmotoren, mit unabhängiger, paralleler Schrittsteuerung pro Motor.
  • Nachteil: KEIN Mikro-Schrittbetrieb unterstützt

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

Wir können den Schrittmotor mithilfe von ... an die gewünschte Position bewegen:

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

※ Notiz:

Die Funktion stepper.moveTo() ist nicht-blockierend. Das ist ein wichtiger Punkt der Bibliothek. Allerdings müssen wir beim Verwenden dieser Funktion darauf achten:

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

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

Wir können nicht nur die Geschwindigkeit, sondern auch die Beschleunigung und Verzögerung durch den Einsatz einiger einfacher 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 du die Verdrahtung wie oben vornimmst, dreht sich der Motor in:

  • Drehrichtung im Uhrzeigersinn: wenn wir den Motor von einer Position zu einer höheren Position steuern (Positionsinkrement)
  • Drehrichtung gegen den Uhrzeigersinn: wenn wir den Motor von einer Position zu einer niedrigeren Position steuern (Positionsabnahme)

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 im Gegenuhrzeigersinn.
  • Wenn die aktuelle Position -100 beträgt und wir den Motor auf -200 steuern, dreht sich der Motor im Gegenuhrzeigersinn.

※ Notiz:

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

Wie man einen Schrittmotor stoppt

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

ESP32-Code - Schrittmotor-Code

Der unten stehende Code führt Folgendes aus:

  • Drehe den Motor eine Umdrehung im Uhrzeigersinn
  • Stoppe den Motor für 5 Sekunden
  • Drehe den Motor wieder eine Umdrehung gegen den Uhrzeigersinn
  • Stoppe den Motor für 5 Sekunden
  • Dieser Vorgang wird immer wiederholt
/* * 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-stepper-motor */ #include <AccelStepper.h> #define DEG_PER_STEP 1.8 #define STEP_PER_REVOLUTION (360 / DEG_PER_STEP) AccelStepper stepper(AccelStepper::FULL4WIRE, 19, 18, 17, 16); // ESP32 pin: GPIO19, GPIO18, GPIO17, GPIO16 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

  • Falls dies das erste Mal ist, dass Sie ESP32 verwenden, siehe wie man die Umgebung für ESP32 in der Arduino IDE einrichtet.
  • Schließen Sie die Verkabelung wie im obigen Bild.
  • Verbinden Sie das ESP32-Board über ein Micro-USB-Kabel mit Ihrem PC.
  • Öffnen Sie die Arduino IDE auf Ihrem PC.
  • Wählen Sie das richtige ESP32-Board (z. B. ESP32 Dev Module) und den COM-Port.
  • Klicken Sie auf das Bibliotheken-Symbol in der linken Leiste der Arduino IDE.
  • Suchen Sie “AccelStepper”, dann finden Sie die AccelStepper-Bibliothek von Mike McCauley.
  • Klicken Sie auf den Install-Knopf, um die AccelStepper-Bibliothek zu installieren.
ESP32 AccelStepper-Bibliothek
  • Kopieren Sie den obigen Code und öffnen Sie ihn mit der Arduino-IDE
  • Klicken Sie auf die Schaltfläche Upload in der Arduino-IDE, um den Code auf den ESP32 hochzuladen
  • Sie werden sehen:
    • Der Schrittmotor dreht sich eine Umdrehung im Uhrzeigersinn
    • Der Schrittmotor stoppt 5 Sekunden lang
    • Der Schrittmotor dreht sich eine Umdrehung entgegen dem Uhrzeigersinn zurück
    • Der Schrittmotor stoppt 5 Sekunden lang
    • Der obige Prozess wird wiederholt ausgeführt.
  • Das Ergebnis sehen Sie im Seriellen 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 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!