Seite 1 von 2

Z-Kompensation, dünne erste Layer und der Start-GCode

Verfasst: So 27. Dez 2015, 14:41
von rf1k_mjh11
Es gibt im Forum schon viele Beiträge bzgl. dem Zusammenspiel der Z-Kompensation und die Höhe des ersten Layers (einige der Beiträge, zum Beispiel einen sehr langen Thread hier, und weitere hier und hier).

Es scheint sich herausgestellt zu haben, dass sich ein dünnes erstes Layer (Höhe <0.2mm) oft schwer herstellen lässt, aus dem folgenden Grund:
Wird der Z-Endschalter einmal freigegeben, nachdem die Z-Kompensation eingeschaltet wurde (mittels "M3001"), weigert sich der Drucker, neuerlich Z-Werte unter "0" anzufahren.
Stimmt es überhaupt
Ich muss zugeben, ich bin noch immer nicht 100%ig sicher, dass diese Aussage stimmt. Die Bestätigung/Widerlegung stellt sich als recht schwierig heraus. Die Anzeige am Drucker zeigt nämlich die korrekten Soll-Werte für Z an, ohne dass sich das Bett merklich bewegt. Man würde eine Messuhr benötigen, um die notwendige Messgenauigkeit zu erreichen. Zusätzlich reagiert der Drucker anders auf manuell eingegebene Befehle, als auf eine GCode-Datei. Damit erschwert sich die Fehlersuche.
Zwei Punkte müssen also erfüllt sein, damit sich das Problem herausbildet:
  1. Ein negativer Z-Wert wäre anzufahren
    und
  2. Der Z-Endschalter wurde seit dem Einschalten der Z-Kompensation freigegeben
Zum ersten Punkt: da lässt sich wenig machen, denn dummerweise verlangt die vorhandene Bett-Geometrie (=Unebenheit), bei vielen RF1000-Besitzern an mehreren Stellen negative Z-Werte. Man kann sich etwas helfen, indem man den Endschalter so einstellt, dass die Düse sehr knapp an der Bettoberfläche positioniert wird, und nicht, wie in der Anleitung, mit ca. 0.5mm Abstand (siehe auch hier). Wie im verlinkten Betrag aber verwiesen wird, ist diese Methode mit Vorsicht zu genießen.

Wieso wird aber der Z-Endschalter 'vorzeitig' freigegeben, was hier als zweite Bedingung angeführt ist?
Nun ja, im Start-GCode der meisten Forums-User hier, vor Allem, wenn diese von der von Conrad mitgelieferten Dateien abgeleitet wurde, wird unter Anderem eine 'Primer'-Linie, Pumpe-Linie, Start-Linie, oder wie es auch immer genannt wird, ausgeführt. Hierbei wird die Düse auf eine Z-Höhe angehoben, wo der Z-Endschalter freigegeben wird. Auch hier gibt es Ansätze, das Problem durch eine geringere Höhe zu umgehen (hier, zum Beispiel). Wenn man nun eine sehr geringe Layerhöhe für die 'Pumpe-Linie' vorgibt, können sich andere Probleme ergeben (hier). Man kann natürlich die Extrusionsmenge drastisch reduzieren, aber das umgeht den eigentlichen Zweck der Primer-/Pumpe-Linie völlig. Hier sollte viel, und relativ rasch gefördert werden, damit eventuelle Lufteinschlüsse in der Düse beseitigt werden.

Ich möchte hier einen GCode-Schnipsel vorschlagen, womit richtig dünne erste Layer möglich sein sollten. Ich fange einfach mit dem Code, wie er auf der SD-Karte für das 'Herz' mitgeliefert wird. (Das sind allesamt Befehle, wie sie im Start-GCode vorkommen. Das eigentliche Druckobjekt taucht hier noch gar nicht auf.)
Hier der Ausschnitt:
G28 ; home all axes (alle Achsen auf 'Null')
G1 Z5 F5000 ; lift nozzle (Düse um 5mm hoch - wieso?)
M109 S230 ; wait for extruder temp to be reached (warte bis Extruder Temp. erreicht)
M3001 ; Aktiviere Z-Kompensation ab hier sollte der Z-Schalter nicht mehr freigegeben werden
G90 ; use absolute coordinates (absolute Koordinaten)
M82 ; use absolute distances for extrusion (absolute Extrusionslängen)
G92 E0 ; start line (Extruderkoordinate auf "0" setzen)
G1 F300 E-0.5 ; (einen halben mm Filament zurückziehen)
G1 X230 Y25 Z0.35 F5000 ; zum Beginn der Primer-Line fahren [bei Z=0.35mm] PECH: hier wird der Schalter wahrscheinlich freigegeben, durch die Höhe von Z=0.35mm
G1 F800 E8 ; (hier wird 8mm Filament gefördert, damit der Extruder voll ist?)
G1 X20 E25 F1000 ; (hier wird die Primer-Linie gefahren, dabei 25mm Filament gefördert)
; Acceleration up to...
; Acc printing
M201 X6000 Y6000 Z1000 ; (Beschleinigungswerte, Druckbetrieb)
; Acc travel
M202 X6000 Y6000 Z1000 ; (Beschleinigungswerte, Leerfahrten)
; Move Z-axis n-steps up (see manual)
M3004 S0 ; + n-steps bed down // - n-steps bed up! (ACHTUNG!! spätere Firmware-Versionen verwenden M3006 zum Feintunen der Z-Höhe)
; So, jetzt geht es endlich los:
M3000 ; hier schalten wir kurzzeitig wieder die Z-Kompensation AUS
G1 X15 Z2 ; hier fahren wir hoch genug, dass der Z-Schalter garantiert frei ist
; nebenbei fahren wir von der dicken Raupe ein Stück weg.

M99 S1 Z ; hier wird der Z-Motor für 1 Sekunde ausgeschalten
; damit stellen wir sicher, dass die Z-Kompensation neu 'anfangen' muss, da der
; Drucker nicht 'weiß', wo Z ist

G4 P250 ; sicherheitshalber warten wir eine viertel Sekunde
G28 Z0 ; hier 'homen' wir nur die Z-Achse neu - deswegen sind wir von der dicken
; Raupe weg gefahren - sonst wäre die Düse jetzt dort hinein getaucht

M400 ; hier warten wir sicherheitshalber alle Bewegungen ab
M3001 ; und schalten die Z-Kompensation wieder EIN
; Aber ACHTUNG:
; hat jemand ein Bett, wo die linke vordere Ecke der höchste Punkt ist,
; bzw. wo ein POSITIVER Z-Wert bei der Kompensation verwendet wird, dann wird die Düse
; das Bett berühren. (Es sollte nicht zum Bruch kommen, da es nur max. 0.5mm sein werden.)

Der zusätzliche Code kostet 2-3 Sekunden mehr an Zeit, sollte aber sehr dünne Layer wieder ordentlich zulassen. Notwendig sind nur die letzten 7 GCode-Befehle. Die sollten die allerletzten Befehle im Start-GCode sein.

mjh11
Nachträglicher EDIT
Heute habe ich den Code in einer simplen GCode-Datei eingefügt und ein 'Musterstück' gedruckt. Die Vorgabe war ein einzelnes Layer mit 0.09mm Dicke. Heraus kam ein Teil mit einer gemessenen Dicke zwischen 0.09 und 0.14mm
Unerwartetes Verhalten
Für die, die schon viel mit der Z-Kompensation herum experimentiert haben, muss ich ein eventuell unerwartetes Verhalten erklären:
Beim neuerlichen Einschalten der Z-Kompensation würde man erwarten, dass sich das Bett entsprechend der Kompensations-Matrix ein wenig bewegt. Das tut es nicht. Aber beim Anfahren der nächsten Z-Koordinate macht der Drucker dies. Da der Start-Gcode mit einem Z-Wert von Z=0 abschließt, wird angenommen, dass eine 'neue Z-Koordinate mit dem eigentlichen GCode kommen wird (denn bei Z=0 zu drucken ist ein wenig doof).

Re: Z-Kompensation, dünne erste Layer und der Start-GCode

Verfasst: Mo 28. Dez 2015, 21:58
von Stefan baut Zeug
Sollte schon gehen der Startcode...

Ich bin der keep it simple Typ und mein Endschalter ist auf ca. 0,1mm Abstand eingestellt..

Darum funktioniert bei mir defakto jeder Startcode :)

mfg,
Stefan

Z-Kompensation, S3D sequentielle Objekte, Heizbett sehr wellig

Verfasst: Mo 8. Feb 2016, 07:47
von tron
erstmal vielen Dank für die Zusammenfassung.
Ich habe aktuell das Problem, dass ich viele kleine Objekte sequentiell Drucken will (S3D eigener Prozess sequentiell drucken)
Hat jemand aus dem Stehgreif eine Idee, wie ich die leider vorhandene Delle in der Mitte (ja, ich haette das Pertinax wohl besser heiss aufgeklebt..) auch beim Wechsel der Objekte mittels HBS/Z-Komp. ausgleichen kann ?
Ich probiere jetzt einfach ein zusätzliches M3001 vor jedem G1 Z0.160 F1000 - werde gleich mal berichten ...
Na, das klappt schon mal nicht (Wurst "fällt" aus 0.5mm aufs Druckbett) ... - jemand eine Idee ?

Re: Z-Kompensation, dünne erste Layer und der Start-GCode

Verfasst: Mo 8. Feb 2016, 08:52
von rf1k_mjh11
tron,

Deine kurze Beschreibung lässt einige Fragen offen.
Du hast scheinbar eine 'Senke' mitten in der Arbeitsplatte?
Hast du den M3001-er Code per Hand in den GCode eingearbeitet?
Wenn ja, könntest du den durch einige Teile aus meinem oben angeführten Start-GCode ergänzen.

Man müsste, nachdem man an die neue Position gefahren ist, und bevor der Druck fortgesetzt wird:

M3000 ; hier schalten wir kurzzeitig wieder die Z-Kompensation AUS
G1 X15 Z2 ; hier fahren wir
(senkrecht nach oben) hoch genug, dass der Z-Schalter garantiert frei ist
; nebenbei fahren wir von der dicken Raupe ein Stück weg.
.. brauchen wir nicht
M99 S1 Z ; hier wird der Z-Motor für 1 Sekunde ausgeschaltet
; damit stellen wir sicher, dass die Z-Kompensation neu 'anfangen' muss, da der
; Drucker nicht 'weiß', wo Z ist
G4 P250 ; sicherheitshalber warten wir eine viertel Sekunde
G28 Z0 ; hier 'homen' wir nur die Z-Achse neu - deswegen sind wir von der dicken
; Raupe weg gefahren - sonst wäre die Düse jetzt dort hinein getaucht

M400 ; hier warten wir sicherheitshalber alle Bewegungen ab
M3001 ; und schalten die Z-Kompensation wieder EIN


HINWEIS: Das kann man nur beim ersten Layer machen. Macht man es danach, fährt die Düse beim Homing in das darunterliegende Duckobjekt.

Durch die Zeitverzögerung (Homing, Motor abschalten, usw.) wird die Düse vermutlich etwas sabbern. Beim allerersten Layer wird das wohl kein Problem sein, oder?

mjh11

Re: Z-Kompensation, dünne erste Layer und der Start-GCode

Verfasst: Mo 8. Feb 2016, 09:54
von tron
Vielen Dank für deine Antwort!
rf1k_mjh11 hat geschrieben: Deine kurze Beschreibung lässt einige Fragen offen.
Du hast scheinbar eine 'Senke' mitten in der Arbeitsplatte?
Ja, Die Senke entstand m.A.n. durch die Ausdehnung des Pertinax an der Unterseite. (Analog eines Bimetalles würde ich sagen)
Ich hatte die Platte nicht heiss verklebt - dadurch sollte es m.A.n. besser werden...
rf1k_mjh11 hat geschrieben: Hast du den M3001-er Code per Hand in den GCode eingearbeitet?
Ja, mittels

Code: Alles auswählen

perl -pli -e 's/G1 Z0.160 F1000/M3001\nG1 Z0.160 F1000/g' 4Haken4cCBreit.gcode
Wenn ja, könntest du den durch einige Teile aus meinem oben angeführten Start-GCode ergänzen.
Man müsste, nachdem man an die neue Position gefahren ist, und bevor der Druck fortgesetzt wird:
Ok: Teste es mal - bin gespannt ...

Code: Alles auswählen

perl -pli -e 's/M3001/G1 Z0.160 F1000\nM3000\nG1 Z2\nM99 S1 Z\nG4 P250\nG28 Z0\nM400\nM3001\n/g' 4Haken4cCBreit.gcode
-> resultiert in:
----8<----
...
; layer 20, Z = 0.16
M106 S0
; inner perimeter
G1 X124.214 Y113.944 F4800
G1 Z0.160 F1000
M3000
G1 Z2
M99 S1 Z
G4 P250
G28 Z0
M400
M3001

G1 Z0.160 F1000
G1 E0.0000 F1800
G92 E0
G1 X124.851 Y113.202 E0.0166 F518
...
Tja, leider nicht geklappt ... (Habe Std. Firmware (.48))

Habe mal ein mini Video (und png) angehangen...
Gruss
Paul

PS: mir ist nicht klar, warum nicht einfach in der Firmware bei GCodes Z < einstellbarer Wert die Z-Achsenkompensation automatisch angeschalten wird... Was spricht dagegen (das Ganze natuerlich unabhaengig vom Endschalter...)

Code: Alles auswählen

z.B.: M3001 Z0.2
hiesse dann - wenn das aktuelle Z unter die 0.2 steuern soll - rechne die HBS Matrix dazu...

Re: Z-Kompensation, dünne erste Layer und der Start-GCode

Verfasst: Mo 8. Feb 2016, 11:12
von rf1k_mjh11
tron,

Tut mir Leid, dass der Vorschlag nicht geklappt hat. Ich habe es unter Umständen wie deine nie durchgetestet.

Hast du exakt dieselben Befehle und Befehlsfolge verwendet? Im Video geht mir die eine Sekunde Wartezeit ab, wo der Z-Motor abgeschaltet wird. Ich hatte es sicherheitshalber hinein getan, damit die Firmware den Motor wirklich als abgeschaltet registriert (mit gepufferten Befehlen in der Firmware ist es so eine Sache ...). Als weitere Sicherstellung daher auch der M400 Befehl, da laut Aussagen RF1000s zur Folge das Aktivieren der Z-Kompensation während einer Bewegung Probleme bereiten kann.

Du hast natürlich ein Heat Bed Scan, nach dem Aufkleben der DDP gemacht, dass die vorhandene Senke mit abbildet? Der Drucker kompensiert nur für 'Fehler' die er kennt.

mjh11

Re: Z-Kompensation, dünne erste Layer und der Start-GCode

Verfasst: Mo 8. Feb 2016, 11:18
von RAU
rf1k_mjh11 hat geschrieben:Du hast natürlich ein Heat Bed Scan, nach dem Aufkleben der DDP gemacht, dass die vorhandene Senke mit abbildet? Der Drucker kompensiert nur für 'Fehler' die er kennt.
Und der HBS wurde mit vorgeheiztem Druckbett gemacht? Womöglich ändert sich die Tiefe der Senke mit der Temperatur.

Re: Z-Kompensation, dünne erste Layer und der Start-GCode

Verfasst: Mo 8. Feb 2016, 11:42
von tron
mjh, Rau,

danke fuer die Antworten - ja, exakt die Befehle so drin (M99 S1 Z auch) - merke ich jedoch auch nicht so zeitlich gesehen ;) / drucke jedoch ueber SD Card - sollte die Pufferung nicht so "schwierig" sein, @Rau: ja, HBS mit Zieltemperatur mehrmals gemacht. (Merkt man auch am ersten Objekt - da passt es noch mit dem Abstand - haengt ja auch in der Senke)
Da ich mit meinem Projekt weiterkommen muss, mache ich jetzt gerade mal einen Standartdruck ohne mehrere sequentielle Objekte - einfach so, Layer fuer Layer :) Mal sehen, vielleicht passt es ja auch so halbwegs ...
Danke nochmal ! Gruss Paul

Re: Z-Kompensation, dünne erste Layer und der Start-GCode

Verfasst: Mo 8. Feb 2016, 14:01
von tron
hmmm - also bei 5 Objekten macht er den ersten Layer ok, d.h. schoen nahe am Bett - den zweiten jedoch scheint er dann auf "normal" zu setzen, d.h. es findet m.A.n. gar keine Z-Kompensation mehr statt ?! (Ich meine hier irgendwo gelesen zu haben, dass es eine maximale Kompensationshoehe in der FW gibt - 3mm oder so) Ich haette erwartet, dass alle z Werte nun bis ca. 3mm so weit "gespreizt" werden, dass 2., 3. usw auch ggfls. etwas naeher am Bett sind ... irgendwie alles k... scheint so, als ist ein 100% planes Druckbett der einzige Garant für passige Layer...
(Gerade nochmal nachgesehen - geht von Z=-0.30 beim ersten Layer auf Z=+0.30 beim 2. Layer - aber irgendwie schein die Kompensation doch noch zu laufen - schraeg ... - Im GCODE: 1.Layer 0.2 mm 2.Layer 0.4mm)

Re: Z-Kompensation, dünne erste Layer und der Start-GCode

Verfasst: Mo 8. Feb 2016, 17:06
von rf1k_mjh11
Paul/tron,

Es gibt hier im Forum einen ellenlangen Thread über das 'Problem', falls es eines ist (hier werden mich einige deswegen 'killen'). (Der Thread fängt hier an und hat über 100 Beiträge). Die Kompensation geht schon noch bis auf 3 (oder 5mm) Höhe (steht irgendwo in der FW), wobei der Korrekturwert entsprechend linear abnimmt. Dummerweise wird die FW aber bockig, wenn die angepeilte Koordinate unter Null liegt, nachdem der Z-Endschalter einmal freigegeben hat. In deinem Fall könnte das schon im zweiten Layer passieren. Wenn irgendwo an einer höheren Stelle der Z-Schalter schon einmal freigegeben hat, geht der Drucker nicht mehr unter Z=0 (='Schalter löst aus'). Bei deiner Senke würde dann nicht mehr genügend nach unten gefahren werden. Dabei darf man nicht einmal auf die Anzeige achten - die lügt einem ins Gesicht und zeigt Werte wie Z:-0.06, obwohl sich der Drucker bei Z=0 befindet.

Wie tief ist den die 'Delle'? Wenn man es sich leisten kann, sollte man die Layerhöhe etwas erhöhen, dann macht die (zeitweise) fehlende Z-Kompensation weniger aus.

mjh11