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.
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.
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.
| Druck | AC | BD | AC − BD | Winkel |
|---|---|---|---|---|
| 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.
Anzeige · Affiliate-Link – kaufst du darüber, erhalte ich ggf. eine Provision. Für dich ändert sich am Preis nichts.
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:
# 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.
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_CONFIGWichtiger 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.
[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 F5000Der 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.
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
| Was | vorher | nachher | Warum |
|---|---|---|---|
| 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.
Anzeige · Affiliate-Link – kaufst du darüber, erhalte ich ggf. eine Provision. Für dich ändert sich am Preis nichts.