Bettnivellierung mit mehreren unabhängigen Z-Motoren (duetWifi)



  • Wer benötigt diese Modifikation:

    Ich habe meinen Drucker auf Kugelumlaufspindeln umgebaut, seit dem läuft meine Z-Achse so leicht das sich mein Druckbett verstellt sobald mein Drucker aus ist.Aus diesem Grund habe ich mir diese Modifikation eingebaut, sollte deine Z-Achse stabil sein kannst du dir diesen Mod sparen.

    ⚠ Um zu verhindern das das Druck bett in das Hotend knallt, bei dieser Modifikation bitte den Motor strom soweit reduzieren das sich die Z-Achse gerade noch so bewegen lässt. Sobald diese Modifikation funktioniert kann der Strom wieder auf normal gesetzt werden ⚠

    Bei einem Drucker, der zwei oder mehr Z-Motoren zum Anheben / Absenken des Bettes oder der Gantry verwendet, kann die Firmware das Bett prüfen und die Motoren einzeln einstellen, um ein Kippen zu vermeiden. Diese Funktion ist in der Firmware-Version 1.19 und höher implementiert.

    Voraussetzungen

    Du musst ein druck-bett oder eine Gantry haben, welche mit zwei, drei oder vier Leitspindeln oder ähnlichem angehoben / abgesenkt wird, wobei jede Spindel von einem eigenen Z-Motor angetrieben werden muss.

    Jeder Z-Motor muss über einen separaten Schrittmotorausgang angeschlossen werden, solltest du deinen Drucker auf Dual-Z umrüsten wollen kannst du den E1 Ausgang verwenden wenn dieser nicht belegt ist ansonsten benötigst du eine der optionalen DueX-Erweiterungskarten.

    Wie bei dieser Anordnung üblich, musst du das Kommando M584 verwenden, um die 2, 3 oder 4 Treiber der Z-Achse zuzuweisen, z.b. M584 X0 Y1 Z2:4 dies würde den Ausgang E1 (Port 4 ) der Z-Achse (Port 2) zuweisen.

    Verteilung der Port's Des DuetWifi Boards:

    • 0 = X-Achse
    • 1 = Y-Achse
    • 2 = Z-Achse
    • 3 = Extruder E0
    • 4 = Extruder E1

    Mit dem Befehl M671 definierst du die Position der Leitspindeln z.b. M671 X0:380 Y190:190 S2 F1.25;.
    Y entspricht der Position der Leitspindel (meist in der Mitte des Druckbett's)
    X entspricht der Position Links und rechts neben der Leitspindel.

    Der Befehl M671 muss nach dem Befehl M584 stehen und die gleiche Anzahl von X- und Y-Koordinaten so wie die Anzahl der Motoren enthalten, die der Z-Achse mit Befehl M584 zugewiesen wurden.
    Diese Koordinaten müssen in der gleichen Reihenfolge sein, wie die Treibernummern der zugehörigen Motoren im M584-Befehl. Der M671-Befehl muss auch nach jedem M667- oder M669-Befehl stehen.

    Optional kannst du im dem Befehl M671 (Parameter S) eine maximale Korrektur pro Leitspindel festlegen. Wenn du dies nicht tust, wird standardmäßig 1 mm verwendet, das Heist wenn die Abweichung größer als 1 mm Beträgt wird die Bettnivellierung mit einer Fehlermeldung abgebrochen.

    Du musst eine bed.g-Datei auf die übliche Weise mit mindestens so vielen Prüfpunkten wie Z-Motoren einrichten. Du kannst auch weitere Prüfpunkte eintragen wenn du das möchtest.
        Der Wert des S-Parameters beim letzten G30-Befehl in Bett.g muss der Anzahl der Z-Motoren entsprechen.

    So funktioniert es

    Ein gültiger M671-Befehl ermöglicht die automatische Kalibrierung der Z-Motoren. Sobald du den Befehl G32 ausführst, um eine Kalibrierung des Bettes zu Starten führt der letzte G30-Befehl (der Befehl mit dem S-Parameter) im Bett.g zu einer automatischen Kalibrierung. Die automatische Kalibrierung verwendet einen Algorithmus für kleinste Quadrate, der die Summe der Höhenfehler minimiert. Die Abweichung vor und die erwartete Abweichung nach der Kalibrierung werden angegeben.

    Wenn Du zwei Z-Motoren hast, passt der Kalibrierungsprozess die Neigung des Bettes entlang einer Linie zwischen den beiden Positionen der Leitspindel an, unter der Annahme, dass sich die Neigung im rechten Winkel dazu nicht ändert. Mit drei Motoren wird die Neigung in beide Richtungen eingestellt. Mit vier Motoren wird die Neigung in beide Richtungen und auch die Verdrehung eingestellt. Verwende keine 4 Leitspindeln mit einem Bett, das fest genug ist, um ein starkes Verdrehen zu vermeiden.

    Du kannst den Befehl G32 so oft ausführen, bis dein Druck-bett gerade ist **1
    .

    Wenn dein Bett nicht vollkommen flach ist oder die Gantry ein wenig durchhängt, wenn sich der Kopf über der Bettmitte befindet, führt der Vorgang zu einer kleinen Verschiebung in der Position Z = 0. Um dies zu korrigieren, kannst du, wenn du die Z-Sonde für die Z-Referenzfahrt verwendest, die Z-Referenz am Ende deiner bed.g-Datei neu starten.

    Empfehlungen

    Wenn du 3 oder 4 Z-Motoren hast, verwende im Bett mindestens einen Prüfpunkt in der Nähe jeder Leitspindel.
        Wenn du 2 Z-Motoren hast, einen an jedem Ende der X-Achse, stelle die Y-Koordinaten der Leitspindeln im M671-Befehl gleich ein (der Wert spielt keine Rolle, daher kannst du Null verwenden). Verwende mindestens zwei Prüfpunkte, einen an jedem Ende der X-Achse. Alle deine Prüfpunkte sollten dieselbe Y-Koordinate haben, die sich in oder nähe der Mitte des druckbaren Bereichs befinden sollten

    Beispiel für 2 Z-Motoren

    File config.g:

    ...
    M584 X0 Y1 Z2:4 ; zwei an die Treiberausgänge Z und E1 angeschlossene Z-Motoren
    M671 X-10:390 Y190:190 S2 ; Leitspindeln links und rechts von der X-Achse
    M208 X-5:205 Y0:200 ; Der X-Wagen bewegt sich von -5 bis 205, das Y-Bett von 0 bis 200
    ...
    

    File bed.g:

    G28 ; home
    M401
    G30 P0 X0 Y190 Z-99999 ; Sonde in der Nähe einer Leitspindel auf halbem Weg entlang der Y-Achse
    G30 P1 X380 Y190 Z-99999 S2 ; Sonde in der Nähe einer Leitspindel und 2 Motoren kalibrieren
    M402
    

    ⚠ Diese Nivelierung's Funktion korrigiert immer nur wenige schritte! ⚠
    D.h. es kann passieren das du nach dem ersten G32 folgendes Ergebnis bekommst:

    Leadscrew adjustments made: -0.092 -0.862, points used 2, deviation before 0.491 after 0.000 
    

    Das bedeutet das Deine Spindeln noch eine Abweichung von 0.491 mm haben, in diesem Fall musst du den G32 Befehl solange ausführen bis du z.b. dieses Ergebnis bekommst

    Leadscrew adjustments made: -0.005 -0.005, points used 2, deviation before 0.004 after 0.000
    

    Nun haben die beiden Z-Achsen eine Abweichung von 0.004 mm was ganz gut ist (die Abweichung kann größer sein wenn du z.b. einen Induktiven / Kapazitiven oder BL-Touch Sensor verwendest)

    Das Fein Tuning

    Wenn dir die Korrektur zwischen zwei G32 Kommandos zu gering ist kannst du den Korrekturfaktor F bei dem Befehl M671 in der Config.g Datei anpassen.

    Erhöhe diesen wert nur um 0.1 Schritte bis du zufrieden bist, sollte der Wert zu hoch sein kann das Bett nicht richtig Kalibriert werden. Dies erkennst du sehr leicht an den Ergebnissen welche dir nach dem G32 Befehl in der Konsole angezeigt werden z.b. sieht das dann so aus:

    22:47:49Leadscrew adjustments made: -1.003 -0.995, points used 2, deviation before 0.499 after 0.000
    22:47:39Leadscrew adjustments made: 1.003 1.003, points used 2, deviation before 0.501 after 0.000
    22:47:28Leadscrew adjustments made: -0.995 -1.015, points used 2, deviation before 0.503 after 0.000
    22:47:18Leadscrew adjustments made: 0.970 1.033, points used 2, deviation before 0.501 after 0.000
    22:47:08Leadscrew adjustments made: -0.893 -1.097, points used 2, deviation before 0.500 after 0.000
    22:46:57Leadscrew adjustments made: 0.685 1.312, points used 2, deviation before 0.523 after 0.000
    22:46:47G32
    Leadscrew adjustments made: -0.123 -1.952, points used 2, deviation before 0.692 after 0.000
    

    wie du Siehst findet hier kaum eine Korrektur statt somit ist der F wert zu hoch gewählt.

    so sollte es aussehen wenn alles passt:

    22:44:45Leadscrew adjustments made: 0.000 -0.001, points used 2, deviation before 0.001 after 0.000
    22:44:35Leadscrew adjustments made: 0.002 -0.001, points used 2, deviation before 0.002 after 0.000
    22:44:25Leadscrew adjustments made: 0.006 -0.004, points used 2, deviation before 0.005 after 0.000
    22:44:15Leadscrew adjustments made: 0.014 -0.019, points used 2, deviation before 0.016 after 0.000
    22:44:04Leadscrew adjustments made: 0.041 -0.043, points used 2, deviation before 0.042 after 0.000
    22:43:54Leadscrew adjustments made: 0.119 -0.148, points used 2, deviation before 0.134 after 0.000
    22:43:43G32
    Leadscrew adjustments made: 0.008 -0.812, points used 2, deviation before 0.575 after 0.000
    

    **1 wenn du den G32 Befehl mehrfach ausführen musst kannst du die bed.g Datei wie folgt ändern (voraussichtlich wird in der Firmware 3.0 ein weiterer befehl integriert mit dem man Die maximale Messwiederholung und / oder die gewünschte Z-Abweichung angeben kann) :

    ; bed.g
    ; called to perform automatic bed compensation via G32
    ;
    ; generated by RepRapFirmware Configuration Tool v2 on Sun Apr 21 2019 14:18:45 GMT+0200 (Mitteleuropäische Sommerzeit)
    
    M561 ; clear any bed transform
    
    G28 ; home
    
    M401
    G30 P0 X10 Y190 Z-99999 ; Sonde in der Nähe einer Leitspindel auf halbem Weg entlang der Y-Achse
    G30 P1 X380 Y190 Z-99999 S2 ; Sonde in der Nähe einer Leitspindel und 2 Motoren kalibrieren
    
    
    G30 P0 X10 Y190 Z-99999 ; Sonde in der Nähe einer Leitspindel auf halbem Weg entlang der Y-Achse
    G30 P1 X380 Y190 Z-99999 S2 ; Sonde in der Nähe einer Leitspindel und 2 Motoren kalibrieren
    
    G30 P0 X10 Y190 Z-99999 ; Sonde in der Nähe einer Leitspindel auf halbem Weg entlang der Y-Achse
    G30 P1 X380 Y190 Z-99999 S2 ; Sonde in der Nähe einer Leitspindel und 2 Motoren kalibrieren
    
    G30 P0 X10 Y190 Z-99999 ; Sonde in der Nähe einer Leitspindel auf halbem Weg entlang der Y-Achse
    G30 P1 X380 Y190 Z-99999 S2 ; Sonde in der Nähe einer Leitspindel und 2 Motoren kalibrieren
    
    G30 P0 X10 Y190 Z-99999 ; Sonde in der Nähe einer Leitspindel auf halbem Weg entlang der Y-Achse
    G30 P1 X380 Y190 Z-99999 S2 ; Sonde in der Nähe einer Leitspindel und 2 Motoren kalibrieren
    
    G30 P0 X10 Y190 Z-99999 ; Sonde in der Nähe einer Leitspindel auf halbem Weg entlang der Y-Achse
    G30 P1 X380 Y190 Z-99999 S2 ; Sonde in der Nähe einer Leitspindel und 2 Motoren kalibrieren
    
    G30 P0 X10 Y190 Z-99999 ; Sonde in der Nähe einer Leitspindel auf halbem Weg entlang der Y-Achse
    G30 P1 X380 Y190 Z-99999 S2 ; Sonde in der Nähe einer Leitspindel und 2 Motoren kalibrieren
    M402
    

    In diesem Beispiel werden 7 Mess Durchgänge über einen G32 Befehl ausgeführt, dies kannst du für deine zwecke modifizieren.

    Für diese Kalibrierung habe ich mir folgendes Macro erstellt:

    G90
    M83
    g28 ;home all
    
    M106 S0
    M140 S80 ;druckbett auf 80 Grad
    M190 S80
    M104 S130 T0 ; nozzle auf 130 Grad
    M109 S130 T0
    M300 S500 P300 ; wenn temp. erreicht ist gebe einen warnton aus
    M291 P"Bitte die Nozzle überprüfen und ggf. Filament Reste entfernen. Ok oder Abbruch?" R"Achtung" S3 ; 
    
    G32 ; kalibriere z achsen
    
    g28
    

    Die Bett Temperatur kannst du auf dein Verwendetes Filament einstellen, Die Nozzle Temp. von 130 Grad wird für den Piezo Orion Benötigt solltest du einen Anderen Sensor nutzen kannst du diese Temp. dementsprechend anpassen.



  • Wie bereits angedroht gibt es ab der Duet Firmware V3.01 die möglichkeit Scripte zu erstellen.
    hier ein Beispiel wie man die Z-Achsen mit einem Script ausrichten kann:
    Die leerzeichen bzw. tabs müssen so übernommen werden wie im Beispiel gezeigt, sonst funktioniert das script nicht!!
    So kann dann die Datei bed.g aussehen, zum Testen empfiehlt es sich erst einmal ein Macro zu verwenden bis das Script wie gewünscht funktioniert.

    ; generated by RepRapFirmware Configuration Tool v2.1.4 on Sun Jan 05 2020 16:17:09 GMT+0100 (Mitteleuropäische Normalzeit)
    M561 ; clear any bed transform
    ; If the printer hasn't been homed, home it
    if !move.axes[0].homed || !move.axes[1].homed || !move.axes[2].homed
    	G28 ; home
    
    ; Probe the bed and do auto calibration
    G1 X0 Y52 F10000        ; go to just above the first probe point
    while true
    	if iterations = 5 ;max 5 Testdurchläufe
    		abort "Zu viele Auto-Kalibrierungs Versuche"
    	G30 P0 X0 Y52 Z-99999 ; Spindel Z-1
    	if result != 0
    		continue
    	G30 P1 X380 Y190 Z-99999 ; Spindel Z-2
    	if result != 0
    		continue
    	G30 P2 X0 Y327 Z-99999 S3; Spindel Z-3
    	if result != 0
    		continue
    	if move.calibration.initial.deviation <= 0.003 ;max abweichung Je nach Z-Probe anpassen!
    		break
    	else
    		echo "wiederhole Kalibrierung da Abweichung zu hoch (" ^ move.calibration.initial.deviation ^ "mm)"
    echo "Auto kalibrierung erfolgreich, Abweichung von: ", move.calibration.initial.deviation ^ "mm"
    echo "Happy Printing"
    ; end loop
    

Log in to reply