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:

Achsenposition in Millimetern gegen Zeit in Sekunden, die einen Referenzzyklus zeigt. Phase eins, eine schnelle Suche, fährt von 46 Millimetern hinunter zur Schalterauslöselinie bei 2,4 Millimetern. Phase zwei weicht auf 7 Millimeter zurück. Phase drei nähert sich langsam erneut und löst den Schalter wieder bei 2,55 Millimetern aus, wo die Kurve sich setzt. Eine gestrichelte rote Linie markiert Schalterauslösung, eine durchgezogene Linie bei null markiert Maschinennull G53, und eine gepunktete Linie bei 18 Millimetern markiert ein als Offset gewähltes Werkstücknull G54.
Schnell, zurückweichen, langsam. Der erste Durchgang muss den Schalter nur finden; der zweite Anlauf setzt die Zahl – und er ist langsam, genau damit der Auslösepunkt des Schalters wiederholbar ist. SVG herunterladen
  1. 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.
  2. 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.
  3. 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

Quellen