devmaker.net
start/ 3d-druck/ klipper-skew-correction-xy-schraege
3D Druck

Klipper skew_correction: XY-Schräge messen und ausgleichen

Ein X-Balken, der 0,30 Grad schief steht, macht aus jedem Quadrat ein Parallelogramm – mit exakt gleich langen Seiten. Wer nur Kantenlängen misst, findet den Fehler deshalb nie. Dieser Artikel zeigt, wie ich die Schräge meines HevORT mit einem gedruckten Testrahmen und einem Messschieber gemessen habe, wie man vor der Korrektur prüft, ob die Schräge überhaupt stabil ist, und wie Klippers skew_correction eingebunden wird, ohne dass die Purge-Linie hinter den Anschlag fährt. Du brauchst einen Messschieber und Klipper-Grundkenntnisse.

Harry_im_Homelab31 (Portrait)
Harald
2026-10-17 · ~8 Min. Lesezeit
Diagonale messen: Testrahmen im Messschieber, Außenecke zu Außenecke
Diagonale messen: Testrahmen im Messschieber, Außenecke zu Außenecke

Zweimal derselbe Testrahmen, 68 × 68 mm mit Diagonalkreuz, gemessen von Außenecke zu Außenecke. Beim ersten sind die Diagonalen einen halben Millimeter verschieden lang: Der Rahmen ist kein Quadrat, sondern ein Parallelogramm. Beim zweiten sind sie auf den Hundertstel gleich – AC = BD = 95,15 mm.

Die Vorgeschichte steht im Artikel über die zwei Y-Endschalter, die beim Homing gegeneinander kämpften. Seit der zweite Schalter abgeschaltet ist, zieht niemand mehr den X-Balken gerade. Die Frage war also: Wie schief steht er – und lässt sich das in Software ausgleichen?

Schief ist nicht verdreht

Die naheliegende Hoffnung: Wenn der Balken nicht genau rechtwinklig steht, liegt das Werkstück eben etwas verdreht auf dem Bett, bleibt aber in sich maßhaltig. Das stimmt nicht, und der Grund ist einfach.

Die Y-Richtung wird von den beiden Y-Schienen festgelegt, und die sind gerade. Die X-Richtung legt der Balken fest. Steht er schief, sind nicht beide Achsen gedreht, sondern nur eine. Jede Fahrt in X bekommt einen kleinen Anteil in Y dazu. Aus einem Quadrat wird ein Parallelogramm: alle vier Seiten gleich lang, aber keine Ecke hat 90 Grad, und die Diagonalen unterscheiden sich.

Seitenlängen sagen nichts

Ein Parallelogramm hat dieselben Seitenlängen wie das Quadrat, aus dem es entstanden ist. Wer nur Kantenlängen misst, findet einen schiefen Drucker nie. Nur die Diagonalen zeigen es.

Messen mit dem, was da ist

Der Testrahmen ist 68 × 68 mm groß, die Diagonale misst 96,2 mm – das passt in einen gewöhnlichen 150-mm-Messschieber. Dazu kommt ein Diagonalkreuz aus zwei 3 mm breiten Streben, damit sich der dünne Rahmen unter den Messschenkeln nicht zusammendrückt. Die Streben enden innen an den Ecken, die Außenecken bleiben als Messpunkte frei. Die Ecken tragen eingravierte Buchstaben in genau der Anordnung, die Klippers Dokumentation verwendet: A vorn links, AD entlang X.

Die Auflösung reicht: Bei 68 mm Kante bringt jedes Zehntelgrad Schräge rund 0,17 mm Diagonalenunterschied – weit über dem, was ein Messschieber auflöst.

Testrahmen
Der 68-mm-Testrahmen: Diagonalkreuz gegen das Zusammendrücken, Ecken mit eingravierten Buchstaben wie in Klippers Doku

Ist die Schräge stabil?

Das erste Ergebnis: AC 95,15 mm, BD 94,65 mm. Ein halber Millimeter Unterschied, das sind 0,30 Grad. Über die Länge des Balkens von rund 400 mm steht das rechte Ende damit gut zwei Millimeter weiter hinten als das linke.

Bevor man so etwas in Software ausgleicht, muss eine Frage beantwortet sein. Mit nur einem Schalter hält niemand den Balken in Position, sobald die Motoren stromlos sind – am Druckende, nach dem Leerlauf-Timeout, nach jedem Neustart. Der Balken pendelt sich dann dort ein, wo sich die Kräfte der beiden Riemen ausgleichen. Kommt er jedes Mal an derselben Stelle an, ist die Schräge eine Eigenschaft der Maschine. Kommt er irgendwo an, ist jede Korrektur beim nächsten Druck falsch.

Der Test: Motoren stromlos, Balken von Hand mehrfach vor und zurück geschoben, losgelassen, neu gedruckt.

DruckACBDAC − BDWinkel
1 · ohne Ausgleich 95,15 94,65 0,50 0,30°
2 · Balken dazwischen frei bewegt 95,30 94,80 0,50 0,30°
3 · mit Ausgleich 95,15 95,15 0,00 0,00°

Die beiden ersten Drucke liegen im Absolutwert 0,15 mm auseinander – das ist Druck- und Messstreuung. Die Differenz ist auf den Hundertstel dieselbe. Der Balken findet also zuverlässig in dieselbe Lage zurück, und erst das rechtfertigt eine Software-Korrektur.

Ausgleich in Klipper

Klipper bringt dafür [skew_correction] mit. Es nimmt drei Maße – beide Diagonalen und die Seite AD – und rechnet daraus einen Scherfaktor. Der Ausschnitt aus dem Klipper-Quelltext:

python
# klippy/extras/skew_correction.py
def calc_skew_factor(ac, bd, ad):
    side = math.sqrt(2*ac*ac + 2*bd*bd - 4*ad*ad) / 2.
    return math.tan(math.pi/2 - math.acos(
        (ac*ac - side*side - ad*ad) / (2*side*ad)))

Der Ausdruck im acos ist der Kosinussatz im Dreieck ACD, also der Kosinus des Winkels bei A. Heraus kommt der Kotangens dieses Winkels. Ein Blick in den Quelltext lohnt sich an einer Stelle: Das Vorzeichen hängt allein davon ab, welche Ecke A heißt. Weil der Rahmen die Buchstaben genau so trägt wie Klippers Skizze, stimmt es ohne Nachdenken.

Ein Detail passt auf den ersten Blick nicht zur Erklärung oben: Schief steht der Balken, also die X-Richtung – Klipper korrigiert aber X abhängig von Y (x' = x − y · Faktor) und lässt Y in Ruhe. Für die Form des Teils ist das gleichgültig. Beide Scherungen machen aus dem Parallelogramm wieder ein Rechteck; sie unterscheiden sich nur darin, wie das fertige Teil als Ganzes auf dem Bett liegt – hier um die 0,30 Grad verdreht, die der Balken schief steht. Ein Teil, das um drei Zehntelgrad verdreht auf dem Bett liegt, ist maßhaltig; eines mit 89,7-Grad-Ecken ist es nicht.

bash
SET_SKEW XY=95.225,94.725,67.6     # Mittel aus beiden Drucken
GET_CURRENT_SKEW
// XY Skew: 0.005265 radians, 0.30 degrees
SKEW_PROFILE SAVE=hevort
SAVE_CONFIG

Wichtiger als der Faktor ist, wann er wirkt. Klipper empfiehlt, den Ausgleich erst nach allen Bewegungen am Rand des Druckraums zu laden. Das ist hier keine Formalie: Die Purge-Linie läuft bei X 0 von Y 10 bis Y 100. Mit geladenem Ausgleich würde Klipper sie um bis zu einen halben Millimeter nach links schieben – hinter den Anschlag.

yaml
[gcode_macro START_PRINT]
SET_SKEW CLEAR=1                ; Homen, Z-Tilt, Mesh, Purge ohne Ausgleich
G28
; ... Z_TILT_SICHER, BED_MESH_CALIBRATE, Purge-Linie bei X0 ...
SKEW_PROFILE LOAD=hevort        ; erst nach der Purge-Linie

[gcode_macro END_PRINT]
SET_SKEW CLEAR=1
G1 X200 Y395 F5000
Randbedingung: −2,1 mm hinten links

Der Ausgleich verschiebt X proportional zu Y. Bei Y 400 sind das 2,1 mm. Ein Teil ganz hinten links am Rand kann dadurch jenseits von X 0 landen, und Klipper bricht mit „Move out of range“ ab.

Der Kontrolldruck lief mit dem geladenen Profil: beide Diagonalen 95,15 mm. SKEW_PROFILE LOAD meldet nichts, und END_PRINT setzt den Ausgleich am Ende zurück – der einzige Nachweis, dass er gewirkt hat, ist deshalb das Teil selbst. Das reicht aber auch.

Was ich falsch gemacht habe

Fast hätte ich ohne Stabilitätstest korrigiert

Ein einzelner Druck mit 0,50 mm Diagonalenunterschied sieht nach einem klaren Fall aus. Ohne zweiten Druck nach frei bewegtem Balken wäre aber offen geblieben, ob die Korrektur beim nächsten Einschalten noch stimmt. Erst dieser Druck – exakt dieselbe Differenz – hat den Software-Ausgleich gerechtfertigt.

Prüfstand und Geltungsbereich

Drucker: HevORT CoreXY mit vier XY-Motoren, Klipper v0.13.0-743, BTT Eddy, Phaetus Rapido 2, 0,4-mm-Düse, PETG. Slicer: OrcaSlicer 2.4.2. Testrahmen parametrisch in OpenSCAD.

Alle Zahlen stammen aus Messungen an dieser Maschine – Messschieber, Moonraker-API, Klipper-Ausgaben. Sie gelten für diesen Drucker, nicht allgemein.

Der Stand am Ende

WasvorhernachherWarum
Y1-Motor, Lagerdeckel verspannt, Motor locker neu montiert Reibung wächst mit Drehzahl
Y-Endschalter 2 (PG10, PG11) 1 (PG10) kein Gegeneinanderziehen
Homing y − y1 3–18 mm 0 Schritte gemessen, dreimal
XY-Schräge 0,30° 0,00° skew_correction, Profil hevort
max_velocity 300 mm/s 300 mm/s bleibt bis zur Warmprüfung

Langfristig könnte der zweite Endschalter zurückkommen – mechanisch so eingestellt, dass er bei geradem Balken gleichzeitig mit dem ersten schaltet. Dann würde das Homing den Balken tatsächlich richten, und die Software-Korrektur wäre überflüssig.

// verwandte beiträge

> echo "your thoughts" >> klipper-skew-correction-xy-schraege.responses

Schreibe einen Kommentar

Wird für die Bestätigung benötigt