Tutorial · Mittelstufe · 30 Min.
Homing mit Endschaltern: Maschinen- und Werkstückkoordinaten
Eine ungeregelte Maschine wacht auf und weiß nicht, wo sie ist. Referenzieren: dreiphasige Suche, Softlimits und warum Maschinennull nicht Werkstücknull ist.
Das Problem, das Referenzieren löst
Eine Schrittmotorachse im offenen Kreis hat ein perfektes Gedächtnis für alles, was man ihr befahl, und keinerlei Wissen darüber, wo sie ist. Einschalten und ihr interner Positionszähler liest null – nicht weil der Schlitten auf null steht, sondern weil sich ein Integer so initialisiert.
Schlimmer: Der Zähler kann falsch liegen, während die Maschine läuft. Ein verlorener Schritt ist lautlos: Der Treiber zählt weiter Impulse, die Firmware glaubt sie weiter, und der Schlitten liegt nun dauerhaft um ein Vielfaches von vier Vollschritten daneben. Nichts in der Regelschleife bemerkt es je – denn es gibt keine Schleife.
Referenzieren antwortet auf beides. Es ist der eine Moment im Maschinenbetrieb, in dem Position aus der physischen Welt gemessen statt aus einem Zählwert aufsummiert wird – und alles Nachgelagerte hängt daran.
Die dreiphasige Suche
Auf den Schalter zufahren, bei Auslösen stoppen, das null nennen. Das funktioniert – und wiederholt auf etwa einen halben Millimeter, was nutzlos ist. Jede echte Maschine tut es in drei Durchgängen:
- Schnelle Suche. Auf den Schalter zufahren mit Tempo für Ungeduld, nicht Präzision. Dieser Durchgang existiert nur, um nahezukommen – und darf die volle Achsenlänge fahren.
- Zurückweichen. Wenige Millimeter zurück, bis der Schalter freigibt. Das macht den dritten Durchgang erst möglich – und beweist außerdem, dass der Schalter ein Schalter ist und kein klemmender Eingang.
- Langsame Neusuche. Erneut mit kleinem Bruchteil des ersten Tempos anfahren und den Auslösepunkt aufzeichnen. Das ist die Messung.
Warum der langsame Durchgang zählt, ist mechanisch. Ein Hebel-Mikroschalter löst aus, wenn sein Stößel eine bestimmte Strecke verfahren ist – doch der Schlitten fährt weiter, während die Firmware reagiert und während die Achse bremst. Bei 50 mm/s mit 2 ms Erkennungsverzögerung fährt der Schlitten 0,1 mm am Auslösepunkt vorbei, bevor es jemand weiß. Bei 2 mm/s fährt er 0,004 mm. Der langsame Anlauf verwandelt die Eigenwiederholbarkeit des Schalters – wenige Mikrometer an einem ordentlichen Mikroschalter – in Maschinenwiederholbarkeit, statt die Bremsstrecke dominieren zu lassen.
Typische Einstellungen sehen so aus:
| Parameter | Typisch | Warum |
|---|---|---|
| Schnelle Suchfahrt | 30–50 mm/s | Schnell genug, um nicht zu nerven |
| Rückweichstrecke | 3–5 mm | Genug, um den Schalter voll freizugeben |
| Langsame Suchfahrt | 1–3 mm/s | Bremsstrecke wird vernachlässigbar |
| Abrücken nach Referenz | 1–5 mm | Lässt den Schalter freigegeben, damit er auch Grenze sein kann |
Einen Endschalter verdrahten
Der Schalter selbst ist derselbe Hebel-Mikroschalter, den ein Roboter als Bumper nutzt – und die Verdrahtungsregel dieselbe:
const int X_MIN_PIN = 9;
void setup() {
pinMode(X_MIN_PIN, INPUT_PULLUP); // NO to ground, pin pulled up
}
bool endstopTriggered() {
return digitalRead(X_MIN_PIN) == LOW;
}
COM an Masse und NO an den Pin verdrahten, mit internem Pull-up an. Ein gebrochener Draht liest dann als „nicht ausgelöst“ – was für einen Referenzschalter der sichere Fehler ist: Die Maschine findet Referenz nicht und stoppt, statt zu beschließen, sie sei bereits dort.
Das ist umgekehrt zur Regel für einen Not-Halt, wo man Öffner will, damit ein durchtrennter Draht die Maschine stoppt. Ein Referenzschalter und ein Not-Halt haben gegensätzliche sichere Zustände – beide gleich zu verdrahten ist ein echter Fehler statt Stilfrage.
Zwei Details, die den meisten Endschalterärger verursachen:
- Entprellen. Ein einzelner Druck erzeugt etwa neun Übergänge über 4,7 ms. Beim Referenzieren pollt man in enger Schleife – die erste Flanke ist also die gewollte und alles danach sollte wenige Millisekunden ignoriert werden. Nie einen Interrupt dranhängen, der Flanken zählt.
- Die Endschalterleitung weg von den Motorleitungen führen. Eine lange ungeschirmte Leitung parallel zu einem zerhackenden Schrittmotorkabel fängt exakt die Art Rauschen auf, die wie Schalterauslösung aussieht. Funktioniert Referenzieren bei abgeschalteten Motoren und scheitert bei laufenden, ist das der Grund.
Maschinenkoordinaten und Werkstückkoordinaten
Referenziert kennt die Maschine eine Sache präzise: wo der Endschalter ist. Dieser Punkt plus fester Offset definiert Maschinennull – in G-Code das G53-Koordinatensystem. Es ist eine Eigenschaft des Rahmens. Es bewegt sich nicht und ist nach jedem Referenzzyklus dasselbe.
Dort will man seine Arbeit fast nie vermessen. Maschinen halten also einen zweiten, beweglichen Ursprung: das Werkstückkoordinatensystem, G54 bis G59, definiert als Offset von Maschinennull.
| Maschinenkoordinaten (G53) | Werkstückkoordinaten (G54…) | |
|---|---|---|
| Ursprung | Per Endschalter und Rahmen fest | Wo immer du ihn setzt |
| Gesetzt per | Referenzfahrt | Dir, pro Job |
| Überlebt Neustart | Ja, nach Neu-Referenzieren | Ja, im Controller gespeichert |
| Verwendet für | Softlimits, Werkzeugwechsel, Parkpositionen | Jede Zeile des eigentlichen Jobs |
| Ändert sich beim Umspannen | Nein | Ja – das ist der Sinn |
Die Trennung verdient sich, sobald man denselben Job zweimal fährt. Der G-Code sagt „zeichne ein 50-mm-Quadrat ab X0 Y0“. Das Papier irgendwo bequem festkleben, zu seiner Ecke joggen, dort die Werkstückkoordinaten nullen und fahren. Das Papier versetzen, neu nullen, dieselbe Datei fahren. Das Programm änderte sich nie; der Offset tat es.
Maschinennull ist, was der Rahmen weiß. Werkstücknull ist, was der Job weiß. Beide getrennt zu halten heißt: Keine Datei editieren, um ein Teil zu versetzen.
Softlimits
Mit bekanntem Maschinenursprung kann die Firmware Fahrten verweigern, die die Hülle verlassen würden – bevor der Schlitten dort ist. Das sind Softlimits, und sie sind strikt besser als die Hardwareart – denn sie stoppen die Maschine geplant abbremsend statt per Kollision.
; GRBL
$20=1 ; soft limits on
$130=200.0 ; X max travel, mm
$131=200.0 ; Y
$132=60.0 ; Z
Eine Maschine mit aktivierten Softlimits und ohne Referenzzyklus ist eine Maschine mit Softlimits, die sie nicht durchsetzen kann – denn die Hülle wird ab einem Ursprung gemessen, den sie nicht hat. Die meiste Firmware verweigert daher den Lauf bis referenziert – und die Fehlermeldung, die das erzeugt, ist keine Belästigung, sondern die Verriegelung bei der Arbeit.
Hardware-Endschalter am fernen Ende jeder Achse sind ein separater, gröberer Rückhalt für den Fall falscher Softlimits. Viele kleine Maschinen lassen sie weg und verlassen sich allein auf Softlimits – ein vernünftiger Tausch, wenn nichts an der Maschine dir wehtun kann.
Die Zustandsmaschine
Referenzieren ist natürlicherweise eine kleine endliche Zustandsmaschine – und als eine geschrieben hält sie das Timeout-Handling ehrlich:
enum HomeState { IDLE, SEEK_FAST, BACK_OFF, SEEK_SLOW, HOMED, FAILED };
HomeState state = IDLE;
long stateStartedAt = 0;
void homingStep() {
switch (state) {
case SEEK_FAST:
if (endstopTriggered()) { stopNow(); enter(BACK_OFF); }
// an axis that never finds its switch must give up, not grind
else if (travelled() > AXIS_LENGTH_MM + 10) enter(FAILED);
break;
case BACK_OFF:
if (!endstopTriggered() && travelled() >= BACKOFF_MM) enter(SEEK_SLOW);
break;
case SEEK_SLOW:
if (endstopTriggered()) {
stopNow();
machinePosition = HOME_OFFSET_MM; // the one real measurement
enter(HOMED);
} else if (travelled() > BACKOFF_MM * 2) enter(FAILED);
break;
}
}
Die FAILED-Äste sind der kopierenswerte Teil. Eine Achse, die sucht und nie auslöst, hat einen abgezogenen Schalter, einen klemmenden Schlitten oder verliert jeden Schritt, den sie bekommt – und in allen drei Fällen ist die richtige Antwort: stoppen und sagen. Eine Referenzroutine ohne Timeout mahlt fröhlich einen Schlitten in einen Rahmen, solange man sie lässt.
Wenn es schiefgeht
| Symptom | Ursache | Lösung |
|---|---|---|
| Referenziert jedes Mal etwas woanders | Kein langsamer zweiter Durchgang, oder zu schnell | Neusuche hinzufügen; auf 1–3 mm/s senken |
| Fährt falschherum und kracht | Referenz- oder Motorrichtung invertiert | Richtungseinstellung kippen oder ein Spulenpaar umkehren |
| „Endschalter ausgelöst“, bevor er fährt | Schalter Öffner verdrahtet oder klemmt | NO gegen NC prüfen; bestätigen, dass der Pin freigegeben high liest |
| Kalt in Ordnung, scheitert sobald Motoren laufen | Endschalterleitung fängt Treiberrauschen | Weg von Motorkabeln verlegen; 100 nF gegen Masse dazu |
| Referenziert gut, dann ist jede Bewegung versetzt | HOME_OFFSET oder Abrückung falsch |
Vom Schalter bis dorthin messen, wo null sein soll |
| Maschine verweigert Fahrt nach Einschalten | Softlimits an, nicht referenziert | Referenzieren – das ist die Verriegelung, kein Fehler |
| Wiederholt gut, aber das Teil liegt falsch | Werkstückoffset, nicht Referenz | G54 dort neu nullen, wo der Job wirklich ist |
| Z referenziert ins Bett | Z-Richtung invertiert oder Tasteroffset ungesetzt | Richtung prüfen, bevor man irgendeinem Offset traut |
Wo das passt
Referenzieren ist, wie eine ungeregelte Maschine das eine zurückgewinnt, was sie strukturell nicht messen kann. Es lohnt Klarheit, was es kauft und was nicht: Es macht die Maschinenposition zum Jobstart korrekt, sonst nichts. Verliert die Achse mitten im Job Schritte, weil Stromgrenze oder Beschleunigungsprofil falsch sind, setzt Referenzieren zwischen Läufen den Fehler nur jedes Mal auf null, ohne ihn je zu beheben.
Das Kennzeichen ist einfach. Eine Maschine, die genau referenziert und einen Job am falschen Ort beendet, hat ein Bewegungsproblem, kein Referenzproblem.
Den Graphen erkunden
Teil dieser Bauprojekte
Projekte und Lernpfade, die dieses Tutorial enthalten.
Weiterführende Literatur