Arduino - Steuert den Schrittmotor mit dem L298N-Treiber

In diesem Tutorial werden wir lernen:

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

Arduino-Schrittmotor-L298N-Treiber

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

Es gibt zwei gängige Typen von Schrittmotoren:

  • bipolar: Dieser Motortyp hat 4 Drähte
  • unipolar: Dieser Motortyp hat 5 Drähte oder 6 Drähte.

Für einen 6-drahtigen unipolaren Schrittmotor können wir vier der sechs Drähte verwenden und ihn als bipolaren Schrittmotor steuern.

Für einen 5-Draht-Unipolar-Schrittmotor siehe Arduino - Ansteuerung des 28BYJ-48-Schrittmotors mit ULN2003-Treiber

Dieses Tutorial konzentriert sich nur auf den bipolaren Schrittmotor.

Pinbelegung des bipolaren Schrittmotors

Die Pinbelegung eines bipolaren Schrittmotors umfasst vier Pins. Je nach Hersteller haben die Pins des Motors verschiedene Bezeichnungen. Die untenstehende Tabelle zeigt einige gängige 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 Reihenfolge der Pins, die Bezeichnungen der Drähte und die Drahtfarben können je nach Hersteller variieren. Sie müssen das Datenblatt oder das Handbuch lesen, um die Zuordnung zwischen Drahtfarbe und Pin-Bezeichnung zu sehen. Das obige Bild zeigt außerdem die Spezifikation zweier unterschiedlicher Motoren mit unterschiedlichen Drahtbezeichnungen und Drahtfarben.

Schritte pro Umdrehung

Die Spezifikation des Motors gibt den Grad pro Schritt an (nennen wir DEG_PER_STEP). Je nach Steuerungsmethode wird die Schrittanzahl 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, wenn das Datenblatt des Motors 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 Arduino steuert

Arduino kann Signale erzeugen, um den Schrittmotor zu steuern. Allerdings reichen die Signale vom Arduino nicht aus, um die vom Schrittmotor benötigte Spannung und/oder den benötigten Strom bereitzustellen. Daher benötigen wir einen Hardware-Treiber zwischen dem Arduino und dem Schrittmotor. Der Treiber erledigt zwei Aufgaben:

  • Verstärke die Steuersignale vom Arduino (Strom und Spannung)
  • Schütze den Arduino vor hohen Strömen und Spannungen, die zur Versorgung des Schrittmotors verwendet werden

Es gibt viele Arten von Hardware-Treibern, die zur Steuerung von Schrittmotoren verwendet werden können. Der L298N-Treiber ist einer der am weitesten verbreiteten Hardware-Treiber zur Steuerung von Schrittmotoren.

Ü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 zur Steuerung des Schrittmotors verwendet.

L298N Treiber-Pinbelegung

L298N-Treiber-Pinbelegung

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 und muss mit GND (0 V) verbunden werden.
  • 5V-Pin: versorgt das L298N-Modul mit Strom. Es kann vom Arduino mit 5V versorgt werden.
  • IN1, IN2, IN3, IN4-Pins: sind mit den Pins des Arduino verbunden, um das Steuersignal zum Ansteuern des Schrittmotors zu empfangen.
  • OUT1, OUT2, OUT3, OUT4-Pins: sind mit dem Schrittmotor verbunden.
  • ENA- und 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 an Ort und Stelle belassen, stammt die Stromversorgung für das L298N-Modul aus dem VCC; wir müssen nichts an den 5V-Pin anschließen. Entfernen wir den 5V-EN-Jumper, muss das L298N-Modul über einen 5V-Pin mit Strom versorgt werden.

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

  • Einer für den Schrittmotor (VCC- und GND-Pins): von 5 bis 35 V.
  • Einer für den internen Betrieb des L298N-Moduls (5V- und GND-Pins): von 5 bis 7 V. Wenn der 5V-EN-Jumper belassen wird, müssen wir diesen Pin nicht mit irgendetwas verbinden.

Verdrahtungsdiagramm

Arduino-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 am L298N-Modul an Ort und Stelle (falls die Stromversorgung des Motors ≤ 12 V beträgt)
  • Die Reihenfolge der Pins bei Schrittmotoren kann zwischen Herstellern variieren. Bitte prüfen Sie die untenstehende Tabelle auf die korrekte Verkabelung.

Verdrahtungstabelle zwischen Arduino und L298N-Treiber

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

Verdrahtungstabelle zwischen dem L298N-Treiber und dem Schrittmotor

Wichtig! Bitte machen Sie sich keine Gedanken über die Drahtreihenfolge des Schrittmotors auf dem oben gezeigten Verdrahtungsdiagramm. Es ist nur ein Beispiel. Die Reihenfolge der Pins bei Schrittmotoren kann zwischen Herstellern variieren. Stellen Sie sicher, dass Ihre Verkabelung 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 diese Unterlagen die Zuordnung zwischen der Farbe der Pins und den Namen der Pins angeben. Zum Beispiel liefert dieser Schrittmotor die Zuordnung wie im folgenden Bild:

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 aufgeführten 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 für die Verkabelung. 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 in einer nicht-blockierenden Weise steuern möchten. Glücklicherweise wird die Steuerung des Schrittmotors dank der AccelStepper Bibliothek zum Kinderspiel.

Die Arduino IDE hat auch eine integrierte Stepper-Bibliothek. Allerdings empfehlen wir Ihnen nicht, diese Bibliothek zu verwenden, weil:

  • Die Bibliothek stellt die blockierende Funktion bereit. Das bedeutet, dass sie Arduino daran hindert, andere Aufgaben auszuführen, während sie den Schrittmotor steuert.
  • Sie 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 Schrittmotoren gleichzeitig, mit unabhängiger, gleichzeitiger Schrittfolge an jedem Motor.
  • Nachteil: Mikroschrittbetrieb wird nicht unterstützt

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

Wir können den Schrittmotor verwenden, um die gewünschte Position zu erreichen:

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

※ Notiz:

Die stepper.moveTo()-Funktion ist nicht blockierend. Das ist ein großer Vorteil der Bibliothek. Allerdings müssen wir bei der Verwendung 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 während der Motorbewegung NICHT die delay()-Funktion.
  • Verwenden Sie während der Motorbewegung NICHT die Serial.print() und Serial.println()-Funktionen. Diese Funktionen verlangsamen den Schrittmotor.

So steuern Sie die Geschwindigkeit eines Schrittmotors über den L298N-Treiber

Wir können nicht nur die Geschwindigkeit, sondern auch die Beschleunigung und die Verlangsamung durch den Einsatz einiger einfacher Funktionen steuern.

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

So steuern Sie die Richtung eines Schrittmotors über den L298N-Treiber

Wenn Sie die Verdrahtung wie oben durchführen, dreht sich der Motor in:

  • Uhrzeigersinn: wenn wir den Motor von einer Position zu einer höheren Position steuern (Positionsanstieg)
  • 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 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, kann die Erhöhung der Position gegen den Uhrzeigersinn erfolgen, wenn Sie OUT1 mit OUT2 vertauschen oder OUT3 mit OUT4 vertauschen, und die Verringerung der Position kann im Uhrzeigersinn erfolgen.

Wie man einen Schrittmotor stoppt

  • Der Schrittmotor wird automatisch gestoppt, nachdem die gewünschte Position erreicht wurde.
  • Der Schrittmotor kann jederzeit sofort gestoppt werden, indem die Funktion stepper.stop() verwendet wird.

Arduino-Code - Schrittmotor-Code

Der folgende Code macht Folgendes:

  • Drehen Sie den Motor eine Umdrehung im Uhrzeigersinn.
  • Stoppen Sie den Motor fünf Sekunden lang.
  • Drehen Sie den Motor eine Umdrehung gegen den Uhrzeigersinn.
  • Stoppen Sie den Motor fünf Sekunden lang.
  • Dieser Prozess wird immer wiederholt.
/* * 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-stepper-motor */ #include <AccelStepper.h> #define DEG_PER_STEP 1.8 #define STEP_PER_REVOLUTION (360 / DEG_PER_STEP) AccelStepper stepper(AccelStepper::FULL4WIRE, 7, 6, 5, 4); 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

  • Navigieren Sie zum Bibliotheken-Symbol in der linken Leiste der Arduino-IDE.
  • Suchen Sie “AccelStepper”, und finden Sie dann die AccelStepper-Bibliothek von Mike McCauley
  • Klicken Sie auf die Installieren-Schaltfläche, 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 hochzuladen
  • Sie sehen:
    • Der Schrittmotor dreht eine Umdrehung im Uhrzeigersinn
    • Der Schrittmotor bleibt 5 Sekunden lang stehen
    • Der Schrittmotor dreht eine Umdrehung gegen den Uhrzeigersinn
    • Der Schrittmotor bleibt 5 Sekunden lang stehen
    • Der obige Ablauf wird wiederholt.
  • 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 Erläuterung 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!