Tutorial · Einsteiger · 25 Min.

Schritte pro Millimeter: Riemen, Leitspindeln, Auflösung

Woher 80 und 400 Schritte/mm kommen, warum Riemen und Spindel Auflösung gegen Tempo tauschen und wie man die Zahl mit einem Lineal kalibriert.

Eine Zahl, eine Formel

Ein Schrittmotortreiber zählt Impulse. Deine Maschine bewegt sich in Millimetern. Die Zahl, die zwischen beiden umrechnet, sind Schritte pro Millimeter – und jede andere Kalibrierung an der Maschine hängt davon ab, dass sie stimmt.

Die Formel ändert sich nie:

steps/mm = (full steps per revolution × microstepping) ÷ travel per revolution

Der Zähler steht per Motor und Treiber fest – ein 1,8°-Motor bei 1/16-Schritt liefert 200 × 16 = 3200 Mikroschritte pro Umdrehung, immer. Der Nenner ist der einzige Teil, der von deiner Maschine abhängt – und er ist eine Mechanikfrage: Wie weit fährt die Achse, wenn sich die Welle einmal dreht?

Zwei gestapelte Felder. Das obere Feld zeigt eine zwanzigzähnige GT2-Scheibe mit abgehendem Zahnriemen, einer markierten Zwei-Millimeter-Teilung zwischen zwei Riemenzähnen, und der Rechnung zwanzig Zähne mal zwei Millimeter gleich vierzig Millimeter pro Umdrehung, dann 200 mal 16 geteilt durch 40 gleich 80 Schritte pro Millimeter. Das untere Feld zeigt eine T8-Leitspindel mit vier verschiedenfarbigen Gewindegängen und darauf laufender Mutter, einer markierten Acht-Millimeter-Steigung, und der Rechnung 200 mal 16 geteilt durch 8 gleich 400 Schritte pro Millimeter.
Die zwei Mechanismen, die fast jede Hobbymaschine nutzt, und die zwei Zahlen, die du schon in einer Konfigurationsdatei sahst. Nur der Nenner ändert sich je. SVG herunterladen

Riemen

Für einen Zahnriemen ist Weg pro Umdrehung schlicht Zähne auf der Scheibe mal Riementeilung. GT2-Riemen hat 2 mm Teilung, und eine 20-Zahn-Scheibe ist Standard auf fast jeder Hobbymaschine:

travel  = 20 teeth × 2 mm = 40 mm per revolution
steps/mm = (200 × 16) ÷ 40 = 80

Da sind sie – die 80 Schritte/mm in jeder 3D-Drucker-X- und Y-Konfiguration. Keine magische Konstante; es sind 20-Zahn-GT2 bei Sechzehntelschritt – und mit 16-Zahn-Scheibe werden es 100.

Scheibe Weg pro Umdr. Schritte/mm bei 1/16 Auflösung
16-Zahn-GT2 32 mm 100 0,010 mm
20-Zahn-GT2 40 mm 80 0,0125 mm
30-Zahn-GT2 60 mm 53,33 0,019 mm
20-Zahn-GT3 (3 mm) 60 mm 53,33 0,019 mm

Beachte: Die 30-Zahn-Zeile teilt sich nicht glatt. 53,333… Schritte/mm sind völlig legal – Firmware speichert sie als Float und sammelt Bruchschritte auf –, heißt aber: Keine Position liegt je exakt auf einer Schrittgrenze. Ein kleines Argument für die Zähnezahlen, die alle anderen verwenden.

Leitspindeln

Für eine Spindel ist Weg pro Umdrehung die Steigung – und Steigung ist nicht Teilung. Das ist der häufigste Fehler im ganzen Thema.

  • Teilung ist der Abstand benachbarter Gewindegänge.
  • Steigung ist, wie weit die Mutter pro Umdrehung fährt.
  • Steigung = Teilung × Gangzahl.

Eine eingängige Spindel hat Steigung gleich Teilung. Aber die ubiquitäre „T8“-Spindel hat 2 mm Teilung mit vier separaten nebeneinander gewundenen Gewindehelices – eine Umdrehung schiebt die Mutter also um vier Gänge vor:

lead     = 2 mm pitch × 4 starts = 8 mm per revolution
steps/mm = (200 × 16) ÷ 8 = 400

Und da ist die andere Zahl, die du sahst. Wer die Gewindeteilung einer T8 mit Messschieber misst, bekommt 2 mm, rechnet 1600 Schritte/mm – und jede Bewegung kommt viermal zu kurz heraus. Die Gewindegänge am Spindelende zählen – man sieht die vier separaten Helices –, oder sie einfach eine volle Umdrehung gegen ein Lineal drehen.

Spindel Teilung Gänge Steigung Schritte/mm bei 1/16
T8, 4-gängig („T8x8“) 2 mm 4 8 mm 400
T8, 2-gängig („T8x4“) 2 mm 2 4 mm 800
T8, eingängig („T8x2“) 2 mm 1 2 mm 1600
M5-Gewindestange 0,8 mm 1 0,8 mm 4000
Kugelgewindetrieb 1605 5 mm 1 5 mm 640

Zwischen beiden wählen

Auflösung ist nicht gratis. Eine Spindel mit zehnfacher Auflösung eines Riemens braucht für dieselbe Strecke auch zehnmal so viele Impulse – bei fester Maximal­schrittrate also zehnmal langsamer. Das ist der Tausch – und er ist hart:

GT2-Riemen, 20Z T8-Leitspindel
Weg pro Umdrehung 40 mm 8 mm
Auflösung bei 1/16 0,0125 mm 0,0025 mm
Schritte/s für 100 mm/s 8 000 40 000
Praktisches Toptempo 300+ mm/s ~30 mm/s
Kraft an der Achse Niedrig – Riemen dehnt sich Hoch – 5× mechanischer Vorteil
Hält stromlos Position Nein Meist ja (selbsthemmend)
Spiel Niedrig, wenn gespannt Real, und in der Mutter
Dafür verwenden X und Y – schnell, leicht Z – langsam, schwer, darf nicht absacken

Genau darum nutzt ein 3D-Drucker Riemen für X und Y und eine Spindel für Z. X und Y fahren schnell und tragen fast nichts. Z fährt langsam, trägt das Gewicht von Bett oder Portal und darf stromlos nicht absacken – und der flache Steigungswinkel einer T8 macht sie selbsthemmend, sodass sie unter Last nicht rücktreibt.

Die 40 000 Schritte/s in dieser Tabelle sind außerdem eine echte Decke, keine theoretische. Ein Arduino Uno, der Schrittimpulse bitbangt, deckelt bei rund 10 000 bis 15 000 pro Sekunde, bevor die Schleife nicht mehr mitkommt – was auf T8 bei 1/16-Schritt etwa 30 mm/s sind. Muss eine Spindelachse schneller fahren, lauten die Antworten: weniger Mikroschritte, schnelleres Board oder Hardwaretimer – nicht größerer Motor.

Drehmoment, und was die Tabelle nicht sagt

Der Mechanismuswechsel ändert die Last, die der Motor sieht, nicht nur Tempo. Eine Leitspindel multipliziert Kraft um grob 2π × Radius ÷ Steigung – eine T8 verwandelt also bescheidenes Motordrehmoment in erhebliche Axialkraft: weshalb eine Z-Achse mit kleinem Motor ein schweres Bett heben kann.

Der Riemen tut das Gegenteil. Eine 20-Zahn-GT2-Scheibe hat 12,7 mm Teilkreisdurchmesser – Riemenzug ist also Motordrehmoment geteilt durch 6,4 mm. Ein Motor mit 0,3 N·m erzeugt etwa 47 N am Riemen – und das ist alles. Springt deine X-Achse beim Anstoßen Schritte, liegt es an dieser Rechnung.

Die reflektierte Trägheit ändert sich ebenfalls, in dieselbe Richtung: Je feiner der Mechanismus, desto weniger zählt die Schlittenmasse für den Motor – weshalb eine Spindelachse aggressive Beschleunigung verträgt, die eine Riemenachse nicht verträgt. Den Effekt sieht man direkt im Schrittmotorsimulator: Mechanismus von Riemen auf Leitspindel umschalten bei sonst konstant allem und dem Lastwinkel zusehen.

Kalibrieren, nicht trauen

Die errechnete Zahl ist ein Startpunkt, keine Antwort. Riemen dehnen sich, Scheiben haben Fertigungstoleranz, und Spindeln werden mit optimistischen Beschreibungen verkauft. Messen:

  1. Den Schlitten gegen eine feste Referenz markieren. Ein Klebestreifen und scharfe Bleistiftlinie.
  2. Eine lange Bewegung befehlen – 100 mm, nicht 10 mm. Fehler ist ein Prozentsatz – eine längere Bewegung misst ihn also präziser.
  3. Mit Messschieber oder Stahlmaß messen, was wirklich geschah.
  4. Per Verhältnis korrigieren:
new steps/mm = old steps/mm × (commanded ÷ measured)

100 mm befohlen, 98,4 mm gemessen, aktuell auf 80: 80 × 100 ÷ 98,4 = 81,3 Schritte/mm.

Dann die Messung zur Bestätigung wiederholen. Eine einzelne Korrektur, die nicht konvergiert, heißt: Der Fehler ist kein Maßstabsfehler – und der Unterschied ist diagnostisch:

Messmuster Ursache
Bei jeder Strecke um konstanten Prozentsatz daneben Falsche Schritte/mm – die Rechnung oben behebt es
Um konstanten Betrag daneben egal welche Strecke Spiel oder lose Scheibenmadenschraube
Jedes Mal um anders viel daneben Schrittverlust – Strom, Tempo oder Beschleunigung
Eine Richtung korrekt, die andere kurz Spiel, und du maßest in beide Richtungen
Exakt 2×, 4× oder 16× falsch Mikroschrittjumper passen nicht zur Firmware
Exakt 4× zu kurz auf Spindelachse Teilung verwendet, wo Steigung nötig war

Diese letzten zwei Zeilen fangen die meisten Erstbauten – und beide sind Rechnung statt Mechanik.

Drehachsen: Schritte pro Grad

Nicht jede Achse ist linear. Ein Drehtisch, ein Filamentextruder, eine Kameraslider-Schwenkachse und ein Robotergelenk haben alle dieselbe Frage mit anderem Nenner – und für eine Drehachse ist der Nenner meist eine Untersetzung statt Mechanismus:

steps/degree = (full steps × microstepping × gear ratio) ÷ 360

Ein 1,8°-Motor bei 1/16 durch 5:1-Untersetzung ergibt (200 × 16 × 5) ÷ 360 = 44,4 Schritte pro Grad, also 0,0225° Auflösung. Bemerkenswert: dieselbe Rechnung wie ein Riemen, mit 360 Grad stellvertretend für die Millimeter pro Umdrehung.

Der Extruder eines 3D-Druckers ist der Sonderling – denn er wird in Schritten pro Millimeter Filament angegeben, obwohl er Drehantrieb ist. Der Nenner ist der wirksame Umfang des Ritzels – nicht sein Nenndurchmesser: Die Zähne beißen ins Filament, der reale Griffradius ist also kleiner als der aufgedruckte. Darum rechnet niemand E-Steps aus und alle messen sie:

  1. Das Filament 120 mm über dem Extrudereinlass markieren.
  2. Exakt 100 mm extrudieren.
  3. Vom Einlass zur Markierung erneut messen. Liest es 27 mm, extrudiertest du 93 mm, nicht 100.
  4. neu = alt × 100 ÷ 93. Bei 93 Schritten/mm sind das 100 Schritte/mm.

Der 120-mm-Startpunkt ist Absicht: Er lässt genug Filament, dass die Markierung den Einlass nie erreicht, selbst wenn der Extruder grob überextrudiert.

Nichtganzzahlige Schritte pro Millimeter

Nach Kalibrierung hört die Zahl auf, rund zu sein – aus 80 werden 81,3, und eine 10-mm-Bewegung wird 813,0 Schritte. Firmware behandelt das korrekt – handgerollter Code meist nicht: Denn die naheliegende Implementierung wirft den Bruch bei jeder Bewegung weg:

// Wrong: truncates on every call. Two hundred 0.1 mm moves land 1.4 mm short.
long stepsFor(float mm) { return (long)(mm * stepsPerMm); }

Bei 81,3 Schritten/mm sind eine 0,1-mm-Bewegung 8,13 Schritte, was auf 8 trunkiert. Die 0,13 verfallen – und verfallen erneut bei der nächsten Bewegung, und der nächsten. Über wenige hundert kurze Segmente – exakt was eine Kurve oder ein Infillmuster ist – summiert sich der Fehler zu Sichtbarem.

Die Lösung: den Rest behalten statt die Position:

// Right: carry the fraction forward, so the error never accumulates past one step.
float carry = 0;

long stepsFor(float mm) {
  float exact = mm * stepsPerMm + carry;
  long whole = lround(exact);
  carry = exact - whole;        // always within half a step
  return whole;
}

Nun ist der schlimmste Fehler in jedem Moment ein halber Schritt – 0,006 mm auf dieser Achse –, und er wächst nie. Derselbe Trick, den Bresenham-Linienrasterung nutzt – und derselbe Grund, warum Firmware Position in Schritten statt Millimetern führt: Ein Integer-Schrittzählwert kann nicht driften, und eine Float-Millimeterposition kann.

In Firmware

Marlin wie GRBL halten die Zahl als setzbaren Parameter – Neukompilieren braucht man also selten:

; Marlin — X, Y, Z, E
M92 X80 Y80 Z400 E93
M500          ; save to EEPROM

; GRBL
$100=80       ; X steps/mm
$101=80       ; Y
$102=400      ; Z

Aufschreiben, was man setzt. Die frustrierendste Version dieses Problems ist eine Maschine, die einmal korrekt kalibriert war, neu geflasht wurde und lautlos auf Firmwaredefaults zurückfiel.

Weiter

Die Zahl oben sagt der Maschine, wie weit sie gefahren ist. Sie sagt nichts darüber, wo sie startete – und eine ungeregelte Maschine kann das beim Einschalten nicht wissen. Dafür ist Referenzieren gegen einen Endschalter da.

Den Graphen erkunden

Teil dieser Bauprojekte

Projekte und Lernpfade, die dieses Tutorial enthalten.

Weiterführende Literatur

Quellen