19.01.2026

Schrittmotor und Schrittmotortreiber – Ein vollständiger Leitfaden

Qwiic
Inkplate
Arduino
Stepper motor and Stepper Motor Driver - A Full Guide

Table of contents

Einführung Wie funktioniert ein Schrittmotor? Wichtige Eigenschaften von Schrittmotoren Ansteuerung des Motors Steuerung des Motors mit einem Joystick, Projekt
Table of contents
Einführung Wie funktioniert ein Schrittmotor? Wichtige Eigenschaften von Schrittmotoren Ansteuerung des Motors Steuerung des Motors mit einem Joystick, Projekt

Einführung

Heute findet man Schrittmotoren in einer Vielzahl von Geräten, bei denen eine präzise Steuerung und Rotation erforderlich ist. Sie werden in 3D-Druckern, CNC-Maschinen und Scannern eingesetzt und können sogar zur Steuerung automatischer Vorhangsysteme in deinem Zuhause verwendet werden. Was sie so beliebt macht, ist ihre Fähigkeit, sich in sehr kleinen, kontrollierten Schritten zu bewegen, wodurch Ingenieure und Hobbyisten Dinge äußerst genau positionieren können.

In diesem Artikel schauen wir uns an, was Schrittmotoren sind, wie sie funktionieren und warum sie eine so gute Wahl für Projekte sind, die präzise Bewegungen erfordern. Der in diesem Artikel verwendete Schrittmotor mit Treibermodul macht den Einstieg besonders einfach. Der Treiber ermöglicht die vollständige Kontrolle über den Motor, sodass wir uns auf die Erzeugung einer gleichmäßigen und präzisen Bewegung konzentrieren können.

Wie funktioniert ein Schrittmotor?

Ein Schrittmotor ist ein bürstenloser Elektromotor, der sich in einzelnen Schritten statt in einer kontinuierlichen Drehbewegung wie bei Gleichstrommotoren bewegt. Dadurch ist eine kontrollierte Positionierung ohne Rückmeldesensor möglich. Dies wird erreicht, indem elektrische Impulse gesendet werden, die die Spulen des Motors in einer bestimmten Reihenfolge erregen. Es gibt zwei Haupttypen von Schrittmotoren.

  • Bipolare Schrittmotoren (der in diesem Artikel verwendete Typ) haben zwei Spulen und benötigen eine H-Brücken-Ansteuerung, um die Stromrichtung in jeder Spule umzukehren. Vier NPN-Transistoren können verwendet werden, um diese Steuerung zu realisieren.
  • Unipolare Schrittmotoren haben eine Mittelanzapfung an jeder Spule, wodurch sie einfacher angesteuert werden können, allerdings sind sie weniger effizient.

Bipolare Schrittmotoren bieten ein höheres Drehmoment, eine bessere Effizienz und höhere Geschwindigkeit, benötigen jedoch einen komplexeren Treiber, da sie eine Umkehr des Stroms erfordern. Sie werden in der Regel für Anwendungen bevorzugt, die ein höheres Drehmoment und eine bessere Effizienz verlangen, vor allem in Systemen zur präzisen Bewegungssteuerung, in der Robotik und in Präzisionssystemen. Unipolare Motoren hingegen sind aufgrund ihrer einfacheren Ansteuerungsschaltung simpler und günstiger, haben aber ein geringeres Drehmoment und eine geringere Effizienz, da sie immer nur die Hälfte ihrer Wicklungen nutzen. Sie werden in kostengünstigen und weniger anspruchsvollen Anwendungen eingesetzt, zum Beispiel in einfacher Automatisierung und in Druckern.

Unten siehst du eine Darstellung, wie die verschiedenen Spulen nacheinander aktiviert werden, um die Welle zu drehen.

Jede Spule im Motor wird von einem NPN-Transistor gesteuert, wobei jeder Transistor mit einem der Pins auf der Platine (IN1 bis IN4) verbunden ist. In dieser Schaltung arbeiten die Transistoren wie Schalter. Wenn ein Pin einen elektrischen Impuls erhält, lässt der Transistor den Strom durch die entsprechende Spule fließen. Durch das sequenzielle Ein- und Ausschalten der Transistoren werden die Spulen nacheinander bestromt, was dazu führt, dass sich der Schrittmotor Schritt für Schritt bewegt.

Wichtige Eigenschaften von Schrittmotoren

Eine der wichtigsten Eigenschaften eines Schrittmotors ist sein Nennstrom. Dieser gibt an, wie viel Strom jede Spule sicher verkraften kann, was sich direkt auf das Drehmoment des Motors auswirkt. Eine weitere wichtige Kenngröße ist die Nennspannung, die bei Schrittmotoren häufig angegeben ist. Treiber verwenden in der Regel eine deutlich höhere Versorgungsspannung und regeln den Strom elektronisch, wodurch der Motor bei unterschiedlichen Geschwindigkeiten besser arbeiten kann. Die letzte häufig betrachtete Eigenschaft ist der Schrittwinkel des Motors, der angibt, wie weit sich der Motor bei jedem vollen Schritt dreht. Der in diesem Beispiel verwendete Schrittmotor 28BYJ-48 hat ein eingebautes Getriebe mit einem Übersetzungsverhältnis von 64 zu 1 und einen Schrittwinkel von 5,625°, was bedeutet, dass 2048 Schritte notwendig sind, damit die Abtriebswelle eine vollständige Umdrehung macht.

Ansteuerung des Motors

Jetzt, da du weißt, wie Schrittmotoren funktionieren, ist es Zeit, einen zu benutzen. Zusammen mit dem Schrittmotor und dem Treibermodul haben wir auch eine spezielle Arduino-Bibliothek für eine einfache Einrichtung und Steuerung. Legen wir los.

Beispiel: Einfache Vorwärts und Rückwärtsbewegung

Als Einstieg drehen wir den Motor einfach um eine bestimmte Anzahl von Schritten vorwärts und, sobald er diese Bewegung abgeschlossen hat, um die gleiche Anzahl von Schritten wieder rückwärts.

#include "Basic-Stepper-Driver-SOLDERED.h"

BasicStepper stepper;

void setup()

{

// Change these to suit your stepper if you want

stepper.setMaxSpeed(500);

stepper.setAcceleration(100);

stepper.moveTo(700);

}


void loop()

{

// If at the end of travel go to the other end

if (stepper.distanceToGo() == 0)

stepper.moveTo(-stepper.currentPosition());


stepper.run();

}

Steuerung des Motors mit einem Joystick, Projekt

Um unserem Projekt etwas mehr Kontrolle zu geben, binden wir ein Joystick-Modul ein, um die Geschwindigkeit und die Richtung des Motors zu steuern. Außerdem haben wir eine speziell angepasste, 3D-gedruckte Motorhalterung hinzugefügt, die unter folgendem Link verfügbar ist: https://www.thingiverse.com/thing:3593641

Dieses Projekt ermöglicht es dir, einen Schrittmotor mit einem Joystick zu steuern. Durch Bewegen des Joysticks nach links oder rechts auf der X-Achse kannst du sowohl die Geschwindigkeit als auch die Richtung des Motors steuern. Je weiter du den Joystick in eine Richtung drückst, desto schneller dreht sich der Motor. Das System beinhaltet außerdem eine sanfte Beschleunigung und Verzögerung. Eine Taste am Joystick ermöglicht es, den Motor ein und auszuschalten, was das System flexibler macht.

Verwendete Komponenten:

  • ESP32
  • Joystick-Modul
  • Schrittmotor und Treiber

Hier ist der Hauptteil des Codes, der die Richtung und die Geschwindigkeit des Motors basierend auf der Position des Joysticks festlegt.

void loop()

{

// Toggle Run/Stop

if (btn.isPressed)

{

btn.isPressed = false;

runMotor = !runMotor;

}


// Read joystick value -> target_speed

bool inDeadband = false;

if (runMotor)

{

int x = constrain(analogRead(POSX), X_MIN, X_MAX);

if (x > X_CENTER + CENTER_OFFSET)

{

long mag = map(x, X_CENTER + CENTER_OFFSET, X_MAX, 0, (long)MAX_SPEED);

if (mag < 0) mag = 0;

target_speed = (float)mag;

}

else if (x < X_CENTER - CENTER_OFFSET)

{

long mag = map(x, X_CENTER - CENTER_OFFSET, X_MIN, 0, (long)MAX_SPEED);

if (mag < 0) mag = 0;

target_speed = -(float)mag;

}

else

{

// stick centered -> gentle coast to stop

inDeadband = true;

target_speed = 0;

}

}

else

{

target_speed = 0; // disabled -> gentle coast to stop

}


// Time-based smooth stop (deceleration) when not using joystick

unsigned long now = millis();

float dt = (now - last_update_ms) / 1000;

if (dt <= 0) { dt = 0.001; }

last_update_ms = now;


float diff = target_speed - current_speed; // Gap between target and current speed

bool reversing = (current_speed * target_speed) < 0; // Switch from '+' to '-' or '-' to '+'

bool speedingUp = ((diff > 0 && current_speed >= 0) || (diff < 0 && current_speed <= 0)); // If true - accelerate


float accel;

if (!runMotor || inDeadband) { accel = SMOOTH_DECEL; } // If stick centered or motor disabled - SMOOTH DECELERATE

else if (reversing || speedingUp) { accel = ACCEL_UP; } // If accelerating or reversing - ACCEL_UP

else { accel = ACCEL_DOWN; } // ACCEL_DOWN


float maxDelta = accel * dt; // Maximum allowed speed

if (diff > maxDelta) { current_speed += maxDelta; } // Increase speed

else if (diff < -maxDelta) { current_speed -= maxDelta; } // Decrease speed

else { current_speed = target_speed; }


// Avoid "drift", set near zero values to zero

if (current_speed > -0.5f && current_speed < 0.5f && target_speed > -0.5f && target_speed < 0.5f)

{

current_speed = 0;

}


// Drive motor at current speed

stepper.setSpeed(current_speed);

stepper.runSpeed();

}


 

In diesem Artikel erwähnte Produkte

Verwandte Artikel