Klipper Z-Offset speichern ohne Auswirkung

  • Servus zusammen.

    Folgendes Problem stört mich etwas:

    Mein FLSUN Q5 (Delta Drucker) mit Klipper hat einen Probe Sensor und ich habe Probe Calibrate sowohl vor dem Delta Calibrate, als auch danach durchgeführt (nachdem ich in der Dokumentation gelesen hatte, dass Änderungen, die durch ein Delta Calibrate stattfinden können, das Probe Calibrate nichtig machen und dieses danach erneut durchzuführen sei).
    Als letztes führe ich dann die Bed Mesh Erstellung aus.

    Gemäß Klipper Dokumentation führe ich alles kalt durch und setze dann später für versch. Heizbett-Temperaturen ein Offset auf Z.

    Das funktioniert grundsätzlich auch wunderbar, aber nun wollte ich eigentlich das bei mir gängigste Szenario (60°C auf dem Bett für PLA) fest als Z-Offset speichern, damit ich weder im Startcode vom Slicer, noch per Makro in Klipper daran danken muss für PLA das Offset zu laden.

    Klipper bietet unter Mainsail OS ja auch einen Speichern-Button für das neue Offset an.
    Ich sehe auch, dass Klipper daraufhin in der printer.cfg den Wert für das Z Offset der Probe ändert (natürlich nach Save Config).

    Lediglich an der tatsächlichen Nozzlehöhe beim ersten Layer ändert das rein gar nichts.

    Da ich davon ausgehe, dass das kein Bug ist, sondern die Funktion bzw. Klipper selbst einfach anders agiert, als ich es interpretiere, wollte ich hier mal nach den Ursachen bzw. einer Lösung fragen.

    Weder ein neues Probe Calibrate bei 60°C, noch das Speichern eines passenden Offsets führen zu einer korrekten Druckhöhe, obwohl in der printer.cfg unten (bei do not edit this part) das Z_Offset der Probe geändert wird.

    Überschreibt evtl. das Bed Mesh alle nachträglich geänderten Z-Offset Werte der Probe?
    Würde es helfen das Mesh nochmal zu löschen und erneut durchzuführen?

    Falls ja, muss denn dass Delta_Calibrate auch neu durchgeführt werden (dürfte ja eigentlich nicht, denn laut Dokumentation ist es ja so, dass ein Probe_Calibrate erneut durchgeführt werden muss, wenn z.B. ein Delta Calibrate durchgeführt wurde).

  • BK-Morpheus:

    Ich benutze die Sonde in meinem Q5 eigentlich gar nicht. Ich habe die Daten für die manuelle Netzbettnivellierung für meine häufig verwendeten Temperaturen in der Datei printer.cfg gespeichert und dafür gesorgt, dass START_PRINT automatisch die richtigen Daten auswählt. Im Slicer habe ich nur (Prusa Slicer) diesen Startcode::








    Code
    M104 S0 ;Dummy
    M190 S0 ;Dummy
    START_PRINT BED_TEMP=[first_layer_bed_temperature] EXTRUDER_TEMP=[first_layer_temperature]


    Wenn du nur den Z-Offset willst, kannst du einfach den GCODE_OFFSET mit der gleichen Struktur setzen.

    Ich habe eine 4-Punkt-Nivellierung im kalten Zustand und dann die Netzbett-Nivellierung bei den folgenden Temperaturen durchgeführt: 50/200, 51/270 (Nylon), 60/200, 80/240, 90/240, 100/250, 110/250

    Hier ist mein START_PRINT:









  • Leider kenne ich mich mit Deltas nicht aus. Aber bei kartesischen Druckern und bei Core-XY ist es so, dass ein Mesh nicht neu aufgezeichnet wrden muss wenn man den Z Offset verändert.

    Vielleicht eine Altrnative: Im Filamentprofil von Prusa und Superslicer kannst Du auch G Code hinterlegen, und da zB eine Justierung von -0,03mm eintragen. Hilft dir das was?

    Aktive Drucker: Voron V2.4 und V0.1

  • Ist halt unverständlich, warum man über die babysteps ein neues Offset setzen und über den Speichern-Button im Webinterface auch als Standard speichern kann. Der probe z offset verändert sich dann auch brav in der Config, aber der First Layer startet trotzdem immer unverändert.

    Wenn man danach nochmal ein Mesh erstellt, sieht dieses aus, als sei das Bett überall deutlich zu hoch...das war mir dann zu blöd.

    Derzeit bin ich daher dazu übergangen im Prusaslicer beim Filament den custom Gcode für +0.32mm Z-Offset zu hinterlegen.

    Das funktioniert prima, jedoch greift dieses erst nach dem Printer Start-Code...daher wird meine Purge-Line vor dem Druck eigentlich zu tief ausgeführt, aber hier kann ich die Purge-Line entweder mit in den Custom Gcode vom Filament verschieben, oder ich lasse das Z-Offset statt per Filament Code über den Printer Startcode setzen.

    Ist ja alles kein Beinbruch, immerhin läuft der Drucker gut, aber die Intention des Z-Offset Speichern Buttons in der Mainsail OS Oberfläche macht halt nicht das, was es soll (bzw. hat es keine Auswirkung).

    Ich drucke heute erst mal das Testobjekt für eine enhanced delta calibration. Dann wird die Maßhaltigkeit der Drucke evtl. noch etwas besser. Die ist derzeit schon recht brauchbar, aber bei einem 10cm breiten Teil, bei dem links und rechts außen jeweils ein 3,1mm Loch für eine M3 Schraube und eine Aussparung für eine M3 Mutter ist, hat sich gezeigt, dass Schraube+Mutter auf einer Seite des gedruckten Teils perfekt passt und auf der anderen Seite ist das Loch+Aussparung minimal zu eng/klein.

    Also ist nicht generell auf X/Y etwas zu klein/groß (denn das könnte man ggfs. auch per Sclicer kompensieren), sondern je nach dem, ob ich es weiter rechts oder links auf dem Bett drucke, ist das Ergebnis auch unterschiedlich (wir sprechen aber von deutlich weniger als 0,1mm Differenz bei dem 10cm breiten Teil, also idR nicht so tragisch).

    Bin mal gespannt, ob die erweiterte Kalilbrierung mit dem Testdruck hier noch was raus holen kann.
    Das ist bei Deltas halt immer etwas schwierig...da muss nur ein Gestänge oder ein Winkel von den Towern minimal abweichen, schon wird's schwer, relativ hohe Druckgenauigkeiten einzuhalten bzw. die Ursache zu finden und zu korrigieren.
    Dafür kann der aber zügig drucken und liefert gerade für den Preis echt schöne Ergebnisse.

    Ein guter CoreXY Drucker mit Liniearführungen wäre mir am liebsten, aber die fertigen am Markt sind entweder keine echten CoreXY, Bastelbuden oder sehr teuer.

  • BK-Morpheus:

    Warum postest du nicht deine printer.cfg und eine kleine g-code Datei, die von Prusa generiert wurde, damit wir sehen können, was wirklich vor sich geht.

    Wie ich bereits sagte, verwende ich die Sonde nicht, da ich ursprünglich bemerkte, dass die Sonde nicht immer wiederholbar ist (wegen der magnetischen Befestigung). Außerdem ist das Bett fixiert, also bewegt sich nicht viel auf dem Drucker, außer den thermischen Änderungen, also ist es viel wichtiger, diese Änderungen zu berücksichtigen. Deshalb habe ich die Nivellierung des Maschenbetts bei verschiedenen Temperaturen manuell vorgenommen und eine automatische Auswahl des richtigen Netzes in das start_print-Skript aufgenommen. Der einzige Z-Offset, den ich brauche, ist -0,1 mm, um das Papier zu berücksichtigen, das ich bei der Bed Mesh Leveling verwendet habe.

    Es stimmt, dass bei einem Delta die Genauigkeit und Wiederholbarkeit der Endanschlagschalter noch kritischer ist als bei einem kartesischen System, da jeder Schalter jede Koordinate im System beeinflusst und die Referenzpunktposition weit vom Bett entfernt ist. Daher ist es eine gute Idee, die ENDSTOP_PHASE_CALIBRATION auf einem mit TMC-Stepper ausgestatteten System auszuführen, bevor man eine andere Kalibrierung vornimmt. Vielleicht sogar ein paar Mal in Abständen, um zu sehen, dass die Ergebnisse konsistent bleiben.

    https://www.klipper3d.org/Endstop_Phase.html

    Wenn du darauf bestehst, die Sonde zu verwenden, solltest du sie jetzt kalibrieren:

    https://www.klipper3d.org/Probe_Calibrate.html

    Wenn du dann die Deltakalibrierung durchführst, wie hier erklärt:

    https://www.klipper3d.org/Delta_Calibrate.html

    Du wirst feststellen, dass die Kalibrierung neue, virtuelle Endanschlagspositionen in der printer.cfg als Teil der Kompensationen für die mechanischen Unzulänglichkeiten erzeugt.

    Wenn du dann für die Kalibrierung des Bettnetzes bereit bist, findest du die Informationen hier:

    https://www.klipper3d.org/Bed_Mesh.html

    Wenn du die Delta-Kalibrierung noch einmal durchführst, werden die Bettgitterdaten ungültig, so dass du die Bettgitterkalibrierung erneut durchführen musst. Hier erweist sich die automatische Sondierung als nützlich.

    Bis jetzt haben wir den GCODE_OFFSET noch gar nicht berührt, da auf der G-Code-Ebene noch nichts passiert ist. Es funktioniert alles über die Einstellung der virtuellen Endanschläge.

    SET_GCODE_OFFSET Z=... ist ein Wert, der zu den Z-Werten im G-CODE hinzugefügt wird, wenn dieser ausgeführt wird. Wenn du einen neuen SET_GCODE_OFFSET Z=... ausführst, während die Maschine druckt, ersetzt der neue Offset-Wert den alten Wert, wenn der Befehl die Ausführungsphase in der Warteschlange erreicht und wirkt sich auf die nächste absolute Z-Bewegung danach aus. Mit dem Befehl SET_GCODE_OFFSET Z_=.. kannst du den aktuellen Offset-Wert addieren oder subtrahieren. Wenn du MOVE=1 nach dem ADJUST angibst, bewegt sich der Werkzeugkopf, um die Änderung zu berücksichtigen. Wenn du auch MOVE_SPEED=.. angibst, wird die Geschwindigkeit der Bewegung bestimmt. Wenn MOVE=1 nicht angegeben wird, erfolgt die Anpassung bei der nächsten absoluten Z-Bewegung im G-Code wie beim Offset.

    Die Einstellung des G-Code-Offsets überlebt die Referenzfahrt (G28), nicht aber einen Neustart des Druckers.

    Wenn du ein Probe verwendest und immer das gleiche Babystepping machen musst, kannst du nach der Anpassung den Befehl Z_OFFSET_APPLY_PROBE geben und dann SAVE_CONFIG, um die Änderungen in der Konfiguration dauerhaft zu machen. Der G-Code-Offset wird dann vom Sonden-Offset in der Konfiguration abgezogen.

    Bei mir funktioniert es wie erwartet, die Bed Mesh-Werte, die geladen werden, nachdem ich den Offset eingestellt habe, berücksichtigen den Offset.

    Übersetzt mit http://www.DeepL.com/Translator (kostenlose Version)

  • jorkki Die Links von dir sind mir alle bekannt.

    Da meine Stepper im Standalone Mode laufen, ist die Endstop Phase Kalibrierung nicht möglich (natürlich ist sie möglich, aber dann müsste man aus dem Standalone Mode erstmal raus).

    Anbei ist meine Config und der PrusaSlicer gcode, welcher bereits ein 0.3mm Z-Offset enthält.

    Die printer.cfg habe ich in printer.cfg.gcode umbenannt, damit ich diese hier hochladen kann.

    Ich kann dieses 0.3mm Z Offset auch dauerhaft in der Config speichern, dabei ändert sich dann aber einfach nur der z_offset Wert unter [probe] ganz unten in der Config:

    #*# <---------------------- SAVE_CONFIG ---------------------->
    #*# DO NOT EDIT THIS BLOCK OR BELOW. The contents are auto-generated.
    #*# [probe]
    #*# z_offset = 20.880



    Eine Änderung dieses z_offset Wertes verändert aber rein gar nichts an der Höhe des ersten Layers.

  • BK-Morpheus:

    Ok, ich sehe immer noch nicht alles, wie du sagst, ist das Babystepping irgendwo gespeichert? Ich selbst verwende Mainsail" nicht, vielleicht steht also etwas in der mainsail.cfg?

    Wie auch immer, das Babystepping ist wirklich als einmalige, auftragsbezogene Anpassung während des Drucks gedacht, so dass es am besten wäre, die Grundeinstellungen anders vorzunehmen. Ich bin kein Makrospezialist, aber es ist sicherlich möglich, Werte auf der SD-Karte zu speichern, um sie später zu verwenden, wenn du das möchtest.

    https://www.klipper3d.org/Command_Templates.html

    Du solltest die Einstellung des Z-Offsets in deinem Startup-Code haben, aber wie du bemerkt hast, kommen die filamentbasierten Einstellungen zu spät für die Purge-Zeile.
    Ich würde wirklich vorschlagen, den gesamten Startup-Code in die printer.cfg zu verschieben, wie ich es getan habe. Auf diese Weise hast du die volle Kontrolle in Klipper.

    Mein Startup-Code im PrusaSlicer ist einfach:








    Code
    M104 S0 ;dummy
    M190 S0 ;dummy
    START_PRINT BED_TEMP=[first_layer_bed_temperature] EXTRUDER_TEMP= first_layer_temperature]


    und der Endcode ist einfach:
    END_PRINT

    Du kannst dann mein Mesh-auswahlskript modifizieren, um deinen Offset basierend auf den Temperaturen einzustellen, z.B. (nicht getestet, nur aus meinem Code editiert:









  • Danke für den Tipp.

    Den Startcode in die printer.cfg zu übertragen und dort mit den Commands/Variablen anhand der Bett-Temperatur das Offset zu laden ist eine gute Idee.

    Für den Anfang habe ich mich jetzt aber erst mal dazu entschieden mit einem delayed_gcode das Macro für mein 60° Offset zu laden.

    So brauche ich für PLA weder für den Drucker, noch für das Filament per Gcode eine Offset setzen und ich kann es auch nicht versehentlich vergessen.

  • Falls du dich entscheidest, den UART auf dem TMC2208 zu implementieren, solltest du sicherstellen, dass du 5V tolerante I/O Pins auf der CPU wählst. Im Robin Nano V2.0 gibt es einen Spannungswähler für die Treiber, in der V1.2 noch nicht. Ich habe den Extruder-Treiber auf E1 verschoben, da die E0-Pins 5-Volt-tolerant sind.

    Du kannst meine Verdrahtung hier sehen:

    https://drucktipps3d.de/forum/topic/flsun-q5/#postid-109139

    Die von mir verwendeten Pins sind hier:










    Die Lage der Pins auf der Platine ist hier zu sehen:

    https://github.com/makerbase-m…Nano%20V1.2_004%20PIN.pdf

    PE5 ist der zweite Pin von unten in der Reihe der 6 Pins. Man kann das auf meinem Bild nicht wirklich sehen.

  • du kannst den z offset auch im Slicer beim G-Code je Filament mitschicken. Musst halt die START_PRINT Zeile um den Parameter erweitern anpassen und den Wert dann im START_PRINT Makro von Klipper auswerten. Ist mMn die elegantere Methode ;)

  • Quote

    Zitat von cobra427 am 05.11.2021, 00:25 Uhr


    du kannst den z offset auch im Slicer beim G-Code je Filament mitschicken. Musst halt die START_PRINT Zeile um den Parameter erweitern anpassen und den Wert dann im START_PRINT Makro von Klipper auswerten. Ist mMn die elegantere Methode ?


    Das ist wahr und das ist es, was BK-Morpheus tat, aber es kommt zu spät für seine Reinigungszeile.

    Den Startcode in Klipper zu haben, ist auch insofern gut, als dass alle meine Slicer die gleichen Start- und Endcodes für alle meine Drucker haben.

  • was ich meine ... du kannst ja MIT dem slicer verschiedene Parameter an Klipper übergebn.

    Was ich z.B. jetzt gemacht habe ist es ein Mesh nur über den tatsächlichen Druckbereich zu erstellen.

    Im Slicer erweiterst du da nur die START_PRINT Zeile um die jeweiligen Parameter

    START_PRINT BED_TEMP=[first_layer_bed_temperature] EXTRUDER_TEMP=[first_layer_temperature] MIN_0=[first_layer_print_min_0] MIN_1=[first_layer_print_min_1] MAX_0=[first_layer_print_max_0] MAX_1=[first_layer_print_max_1]

    In Klipper wertest du dann eben diese zusätzlichen Parameter aus. In meinem Fall für das Mesh (nachdem das Bett aufgeheizt ist)


    {% set MIN_0 = params.MIN_0|default(20)|float %}

    {% set MIN_1 = params.MIN_1|default(20)|float %}

    {% set MAX_0 = params.MAX_0|default(215)|float %}



    {% set MAX_1 = params.MAX_1|default(180)|float %}

    und eben nach dem Befehl fürs Bett ..


    BED_MESH_CLEAR

    G28

    BED_MESH_CALIBRATE MESH_MIN={MIN_0},{MIN_1} MESH_MAX={MAX_0},{MAX_1}

    Das alles kannste eben auch je Filament machen. ACHTUNG! Für default Values hat sich die Syntax geändert! ==> https://docs.mainsail.xyz/faq/…rameter_-for-gcode-macros


    EDIT: START_PRINT in Klipper um folgendes erweitern ... ud du hast je Filament deinen gewünschten Offset

    {% set OFFSET = params.FILA_OFFSET|default(0)|float %}

    ....

    SET_GCODE_OFFSET Z={OFFSET}

    und beim Filament G-CODE im Slicer fügst du nur ein:

    FILA_OFFSET=###dein Wert####




  • btw ... wenn man dann auch mal Pressure Advance von Klipper verwendet, dann musst du es sogar so machen. Also je Filament die jeweiligen Werte an Klipper übergeben ;)

  • Quote

    Zitat von cobra427 am 05.11.2021, 00:58 Uhr


    was ich meine ... du kannst ja MIT dem slicer verschiedene Parameter an Klipper übergebn.


    Entschuldigen für meine mangelnden Sprachkenntnisse, ich habe es falsch verstanden. Ich habe deinen Tipp bereits in einer anderen Nachricht gesehen und ihm auch einen Daumen nach oben gegeben.
    Aus den Prusa/Super-Slicern kann man ganz schön viel rausholen.

  • Quote

    Zitat von jorkki am 05.11.2021, 01:15 Uhr


    Aus den Prusa/Super-Slicern kann man ganz schön viel rausholen.


    Da hast Du absolut Recht! Ich stehe da auch noch am Anfang mit den ganzen Standardparametern für G-Codes, die Prusa-/Superslicer schon von sich aus bieten. Klipper Macros .. da habe ich zum Glück zwei Leute, die ich Notfalls um Hilfe fragen kann *g*

    Habe auch noch viel zu lernen um die ganzen Möglichkeiten voll zu Nutzen!


  • Haha, ich schätze, "Default:" zu schreiben war zu einfach für die Jinja2-Meister. Ich komme aus dem Zeitalter der Assembler-Programmierung und der Eingabe von Adressen und Daten in binärer Form mit Schaltern, daher habe ich in der Makrosprache noch etwas zu verdauen. :roll:

  • Quote

    Zitat von jorkki am 05.11.2021, 01:44 Uhr


    Ich komme aus dem Zeitalter der Assembler-Programmierung und der Eingabe von Adressen und Daten in binärer Form mit Schaltern


    Ich doch auch als Baujahr 1967 *gg*

  • Danke nochmal an alle.

    Ich habe jetzt folgendes Macro in meiner Printer.cfg


    [gcode_macro START_PRINT]
    gcode:
    # Adjust the Z-offset based on the temperature
    {% set BED_TEMP = params.BED_TEMP|default(60)|float %}
    {% if BED_TEMP|int() >= '100'|int() %}
    {% set select_zo ='0.7' %}
    {% elif BED_TEMP|int() >= '70'|int() %}
    {% set select_zo ='0.4' %}
    {% elif BED_TEMP|int() >= '50'|int() %}
    {% set select_zo ='0.25' %}
    {% else %}
    {% set select_zo ='0.2' %}
    {% endif %}
    SET_GCODE_OFFSET Z={select_zo}
    set_accelerations


    Die Werte für PETG/ABS bzw. >=70°C und >=100°C sind nur ausgedacht, die muss ich erst noch austesten.

    Im PrusaSlicer habe ich den Custom Gcode vom Filament entfernt und stattdessen im generellen Startcode folgendes eingefügt:

    START_PRINT BED_TEMP=[first_layer_bed_temperature]



    Das Ganze funktioniert wunderbar und ich kann auch nicht mehr vergessen meine auf Qualität getesteten Acceleration-Werte per Macro zu laden, da das Acceleration Macro Beim Druckstart ja auch ausgeführt wird.



    Weiß jemand zufällig, wie die Variable für die Firstlayer-Bett-Temperatur in S3D und Cura heißen, falls ich diese Slicer auch nochmal verwende?

  • Quote

    Zitat von jorkki am 05.11.2021, 01:44 Uhr



    Haha, ich schätze, "Default:" zu schreiben war zu einfach für die Jinja2-Meister. Ich komme aus dem Zeitalter der Assembler-Programmierung und der Eingabe von Adressen und Daten in binärer Form mit Schaltern, daher habe ich in der Makrosprache noch etwas zu verdauen. ?


    Ich benutze immer noch Klipper 9.x, also funktioniert die alte Syntax noch für mich. Wie auch immer, ich habe meinen START_PRINT aktualisiert - jetzt ist der Anfang wie folgt:










    Scheint zu funktionieren, auch ohne den Wert einer Variable mit einem anderen Namen zuzuordnen.

Disclaimer:
*Externe Links enthalten Affiliate Daten. Wird über diese Links etwas bestellt, erhalten wir eine kleine Provision, Euch kostet es nichts Extra.
**Als Amazon-Partner verdienen wir an qualifizierten Verkäufen.

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!

Unread Threads

    1. Title
    2. Replies
    3. Last Reply
    1. Meine Erfahrung mit dem Neptune 4 Pro 30

      • Toadie
    2. Replies
      30
      Views
      852
      30
    3. Dimaso

    1. Tronxy X5SA 500 Pro 2 E Probleme beim Einrichten 95

      • MS 500 Pro
    2. Replies
      95
      Views
      1k
      95
    3. MS 500 Pro

    1. Statt geschlossener Körper nur Liniendruck 4

      • PrintStef
    2. Replies
      4
      Views
      44
      4
    3. alwaneke

    1. Frage bzgl. Farbton nach Farbwechsel bei A1 Combo 15

      • Semmi
    2. Replies
      15
      Views
      303
      15
    3. Zabulon

    1. Creality Print Profile importieren 2

      • BlueMC
    2. Replies
      2
      Views
      51
      2
    3. BlueMC