Could this height map offset be causing first layer issues?
-
Hi All - I've been trying to print some fairly large pieces, and no matter what I do, I can't get a good first layer on the outter extremities and starting to wonder if this height map offset is the issue?
Now I'm not sure why my height map shows like this, and would love to resolve it, but here's how it looks now:
Bottom Right, Top Right, & Top Left are all 'outside' the print bed, and my print area is in inside the red box.
I've done G32 and G29 multiple times, and even though on G32, I can get a 0.00 - 0.001 across all four corners, I do not get even first layer in these corners and can visually see the height difference when printing.
I'm sure there's some wrong config, somewhere, causing this and it's probably has to do with my mesh.g file alongside my probe offsets (Hemera hotend with BLT), but if I reduce my mesh size prob points, I get unable to reach probe area and failures.
Would love some help on getting my config correct, as well as the height map as pictured correct, so I can run more G32/29 bed levelling to hopefully get consistent first layers in these outter areas.
Here's some config files for reference:
config.g
; Configuration file for Duet WiFi (firmware version 3) ; executed by the firmware on start-up ; ###################################################### ; General preferences ; ###################################################### G90 ; send absolute coordinates... M83 ; ...but relative extruder moves M550 P"Stargate SG-1 - Jackson" ; set printer name ; ###################################################### ; Global Variables ; ###################################################### global g_move_forward = 5 ; can be used to always move Z to known height global g_move_back = -{global.g_move_forward} ; can be used to always move Z to known height global g_axes_speeds = 8000 ; Speeds to move axes during homing ; Z-Lead Screw Positions global l_zlead_screw_x = 57 global r_zlead_screw_x = 353 global zlead_screw_y = 217 ; 4-P Bed Levelling Positions global fl_screw_x = 57 global fl_screw_y = 88 global fr_screw_x = 353 global fr_screw_y = 88 global bl_screw_x = 57 global bl_screw_y = 345 global br_screw_x = 353 global br_screw_y = 345 global g_print_end_mode = "HEAT OFF" ; determines if heaters are turned off when print is done global g_map_mode = "FULL" ; determines which kind of height map is created/loaded global g_probe_mode = "TWO" ; determines if z proving used consecutive or averaging global g_level_mode = "3PT" ; determines if 3 or 4 points are used for leveling ; BL-Touch Probe Offsets global probe_offset_x = 30 ; BL Touch X offset global probe_offset_y = 36 ; BL Touch Y offset global probe_offset_z = 3.906 ; BL Touch Z offset ; E-Step Settings global e_steps = 393.64774 ; ###################################################### ; Network ; ###################################################### M552 S1 ; enable network M586 P0 S1 ; enable HTTP M586 P1 S0 ; disable FTP M586 P2 S0 ; disable Telnet ; ###################################################### ; Drives ; ###################################################### M569 P0 S0 ; X drive 0 goes backwards M569 P1 S1 ; Y drive 1 goes backwards M569 P2 S1 ; Z1 drive 2 goes forwards M569 P3 S0 ; E drive 3 goes backwards M584 X0 Y1 Z2 E3 ; set drive mapping ; ###################################################### ; Movement ; ###################################################### M350 X16 Y16 Z16 E16 I1 ; configure microstepping with interpolation M92 X80.00 Y80.00 Z800.00 E{global.e_steps} ; set steps per mm M566 X900.00 Y900.00 Z300.00 E2000.00 P1 ; set maximum instantaneous speed changes (mm/min) M203 X6000.00 Y6000.00 Z900.00 E6000.00 ; set maximum speeds (mm/min) M201 X3500.00 Y3500.00 Z3500.00 E3500.00 ; set accelerations (mm/s^2) 200 M906 X800 Y800 Z800 E800 I30 ; set motor currents (mA) and motor idle factor in per cent M84 S30 ; Set idle timeout ; ###################################################### ; Pressure Advance ; ###################################################### ;M572 D0 S0.25 ; ###################################################### ; Axis Min/Max ; ###################################################### M208 S1 X5 Y0 Z-10 ; set axis minima M208 S0 X355 Y355 Z400 ; set axis maxima ; ###################################################### ; Endstops ; ###################################################### M574 X2 S1 P"xstop" ; configure active-high endstop for low end on X via pin xstop M574 Y2 S1 P"ystop" ; configure active-high endstop for low end on Y via pin ystop M574 Z1 S2 ; configure Z-probe endstop for low end on Z ; ###################################################### ; Kinematics ; ###################################################### M669 K0 ; ###################################################### ; Custom Probe config file ; ###################################################### M98 P"configs/probe_config.g" ; Config settings for my EZABL probe ; ###################################################### ; Heaters ; ###################################################### M308 S0 P"bedtemp" Y"thermistor" T100000 B4138 ; configure sensor 0 as thermistor on pin bedtemp M950 H0 C"bedheat" T0 ; create bed heater output on bedheat and map it to sensor 0 M307 H0 B0 S1.00 ; disable bang-bang mode for the bed heater and set PWM limit M140 H0 ; map heated bed to heater 0 M143 H0 S120 ; set temperature limit for heater 0 to 120C M308 S1 P"e0temp" Y"thermistor" T100000 B4138 ; configure sensor 1 as thermistor on pin e0temp M950 H1 C"e0heat" T1 ; create nozzle heater output on e0heat and map it to sensor 1 M307 H1 B0 S1.00 ; disable bang-bang mode for heater and set PWM limit M143 H1 S285 ; set temperature limit for heater 1 to 280C ; ###################################################### ; Fans ; ###################################################### M950 F0 C"nil" ; Free up pin F0 M950 F0 C"fan1" Q500 ; Assign Fan0 for Prusa Slicer and default for other slicers M106 P0 S0 H-1 M950 F1 C"nil" ; Free up pin F0 M950 F1 C"fan0" Q500 ; create fan 0 on pin fan3 and set its frequency M106 P1 S1 H1 T80 ; set fan 1 value. Thermostatic control is turned on ; ###################################################### ; Tools ; ###################################################### M563 P0 D0 H1 F0 ; define tool 0 G10 P0 X0 Y0 Z0 ; set tool 0 axis offsets G10 P0 R0 S0 ; set initial tool 0 active and standby temperatures to 0C ; ###################################################### ; Probe points for my 2x Z Lead Screws ; ###################################################### ;M671 X{global.fl_screw_x}:{global.fr_screw_x}:{global.bl_screw_x}:{global.br_screw_x} Y{global.fl_screw_y}:{global.fr_screw_y}:{global.bl_screw_y}:{global.br_screw_y} M671 X30:310:30:310 Y76.8:76.8:338:338 ; ###################################################### ; Custom Configurations ; ###################################################### ; Filament Runout Sensor M591 D0 P1 C"e0stop" S1 ; TFT Display Config M575 P1 S1 B57600 ; Miscellaneous M911 S10 R11 P"M913 X0 Y0 G91 M83 G1 Z3 E-5 F1000" ; set voltage thresholds and actions to run on power loss M501 ; load saved parameters from non-volatile memory
mesh.g
I think this likely the culprit, but when I reduced these, I get mesh errors; ###################################################### ;mesh g - manually configured ; ###################################################### M98 P"configs/zhome_config.g" ; configure z=0 datum (this still confuses me on how this is set) ; ###################################################### ; Probe bed and create Heightmap ; ###################################################### M561 ; clear any bed transform G28 Z M557 X60:380 Y90:390 P20 G29 S0 ; probe and save height map
Would love some help and thanks!
-
@timsworkshop
Your config.g says...
M98 P"configs/probe_config.g" ; Config settings for my EZABL probeYou write but you have a BLTouch.
What is the content of the probe_config.g ?
Is it a mistake and you took over the config.g from another printer that had an EZABL sample or did you switch from EZABL to BLTouch and forgot to edit the entry ?Your config.g says...
M208 S0 X355 Y355 Z400 ; set axis maxima
but your bed.g says...
M557 X60:380 Y90:390 P20Is it possible that your BLTouch is mounted to the left of the nozzle and the following command line from your config.g is therefore wrong...
global probe_offset_x = 30 ; BL Touch X offset
and it has to be -30 instead ?P.S.:
global probe_offset_y = 36 ; BL Touch Y offset
Also here it could have to be -36 ?If the BLTouch is in front of and to the left of the nozzle, there must be minus values in the offset of the BLTouch.
Behind the nozzle and to the right are plus values. -
@norder ahh man, I feel really dumb! Yes, my BLT is in front, and to the left of the nozzle and not sure why I didn't pick that up. I've updated that and my mesh.g file and will do some calibration again.
And nice pick up on the EZABL reference, I did have one but put the BLT back on and forgot to update the comment.
-
@timsworkshop
No reason to feel dumb.
There are no stupid questions, only stupid answers.
Glad the printer is working again. -
@norder agreed!
So now I've done the change and I can see my mesh is centered, but I have had to rejig a lot of my bed.g and mesh.g files to accommodate.
I'm getting points get be reached when I run G29, and I believe if I remember correctly, G29 takes into account the offsets and and does calculations itself?
So if I have:
; BL-Touch Probe Offsets global probe_offset_x = -30 ; BL Touch X offset global probe_offset_y = -36 ; BL Touch Y offset global probe_offset_z = 3.906 ; BL Touch Z offset
Then in my mesh.g I have, as this is the true area I want to probe:
M557 X58:378 Y73:378 P20
But when I run it, it looks like it's adding my offsets, so my question is do I need to subtract these offsets from my x/y coordinate in my mesh.g to allow G29 to properly calculate?
-
Looks like my assumption was right, I just did the change and it probed all my points and gave me a good mesh.
So happy to finally have my height map back where it belongs.Going to add some comments and notes to mesh to automated the calculations in the future.
Thanks @Norder for the help!
-
-
-
@timsworkshop said in Could this height map offset be causing first layer issues?:
Thanks @Norder for the help!
very gladly.
Yes, that's exactly how it is... G29 takes the area you defined with M557 and adds or subtracts the offset values of the probe.
I have a 330x330 print bed and leave a 30mm free on the outer edge.
The reason for this is the BLTouch, which is mounted to the left of the nozzle and doesn't quite reach the right edge.
I have two Z-Probes, an IR-Probe from Duet and the BLTouch which I already had before the IR-Probe but didn't want to disassemble it because it has difficulties for some surfaces where the IR-Probe has difficulties such as glass surfaces or PEI and with rough surfaces.The IR probe is my main sensor so to speak and it would also go to the very edge of the print bed, but because I have an M557 command line that applies to both sensors and because I wanted the mesh to be the same size.
This is what my M557 command line looks like for the 330x330 print bed...
M557 X30:300 Y30:300 P9For example, if you want to probe the level screws of the print bed in a macro file, like I do to level the print bed "manually" via the level screws, then you have to convert the offset from the BLTouch yourself.
A macro to set one of the three level screws, for example, looks like this.
M561 G29 S2 M291 P"5-fache Messung - Links" R"IR-Probe" T3 G1 Z5 F10000 G1 X29.4 Y142.7 F10000 G30 S-1 K0 H3.162 G1 Z5 F10000 G4 P4000 ; 4 Sekunde Pause G1 Z5 F10000 G1 X29.4 Y142.7 F10000 G30 S-1 K0 H3.162 G1 Z5 F10000 G4 P4000 ; 4 Sekunde Pause G1 Z5 F10000 G1 X29.4 Y142.7 F10000 G30 S-1 K0 H3.162 G1 Z5 F10000 G4 P4000 ; 4 Sekunde Pause G1 Z5 F10000 G1 X29.4 Y142.7 F10000 G30 S-1 K0 H3.162 G1 Z5 F10000 G4 P4000 ; 4 Sekunde Pause G1 Z5 F10000 G1 X29.4 Y142.7 F10000 G30 S-1 K0 H3.162 G1 Z5 F10000
The measured height is shown on the display... if it says 0.082mm, for example, then I have to turn the level screw a little anti-clockwise... the second of five measurements then takes place and I try to get to 0.000, but with +- 0.010 I am more than satisfied because the MeshBedLeveling will come afterwards.
The z-offset entered in the config.g must also be entered in the macro file, so exactly 0.000 is displayed when the nozzle touches the bed.
This makes it easier to concentrate than having to hit the offset of 3,162, which you have to write down so you don't forget it or have to look in the config.g every time.I find this method of manual leveling better, because here you don't go by feel (0.05mm adjustment sheet or piece of paper as a leveling aid between bed and nozzle) and therefore leveling is more precise and I also find... faster.
I determined the Z offset with a 0.05mm measuring plate by positioning the nozzle 0.05mm above a level screw and then measuring this point 10x with a macro that was written especially for this purpose and where I then got the mean value of these measurements is displayed, which is then the Z offset.Yeah I know... I'm overdoing the leveling a bit.
But I just enjoy it.
Just a HobbyLittle explained and much written... also a problem of mine. (Sorry!)
And the translation makes it look twice as much.Google Translate
-- Original Text --@timsworkshop said in Could this height map offset be causing first layer issues?:
Thanks @Norder for the help!
sehr gerne.
Ja, genau so ist es... G29 nimmt sich den Bereich vor den Du mit M557 definiert hast und addiert oder subtrahiert die Offset Werte der Sonde.
Ich habe ein 330x330 Druckbett und lasse einen 30mm am äußeren Rand frei.
Der Grund dafür ist der BLTouch der links neben der Düse montiert ist und nicht ganz bis an den rechten Rand kommt.
Ich habe zwei Z-Sonden, eine IR-Probe von Duet und den BLTouch den ich bereits vor dem IR-Probe hatte, ihn aber nicht demontieren wollte weil er für manche Oberflächen wo der IR-Probe Schwierigkeiten hat wie zB bei Glas-Oberflächen oder PEI und bei rauen Oberflächen.Der IR-Probe ist sozusagen mein Haupt Sensor und der würde auch bis an den äußersten Rand des Druckbettes kommen, aber weil ich eine M557 Befehlszeile habe die für beide Sensoren gilt und weil ich das Mesh gleich groß haben wollte.
So sieht meine M557 Kommandozeile für das 330x330 Druckbett aus...
M557 X30:300 Y30:300 P9Wenn Du zB in einer Makro Datei die Levelschrauben des Druckbettes sondieren möchtest, so wie ich es mache um das Druckbett "manuell" über die Level Schrauben zu leveln, dann musst Du das Offset vom BLTouch selber umrechnen.
Ein Makro um zB eine der drei Levelschraube einzustellen, sieht wie folgt aus.
(Makro siehe oben)Auf dem Display wird mir die gemessene Höhe angezeigt... steht dort zB 0.082mm dann muss ich die Levelschraube etwas gegen den Uhrzeigersinn drehen... es erfolgt dann die zweite von fünf Messungen und ich versuche auf 0.000 zu kommen, aber mit +- 0.010 bin ich mehr als zufrieden denn es kommt danach ja noch das MeshBedLeveling.
(Screenshot siehe oben)
Den Z-Offset der in der config.g eingetragen ist, muss auch in die Makro Datei eingetragen werden, so wird exakt 0.000 angezeigt wenn die Düse das Bett berührt.
So kann man sich einfacher konzentrieren als wenn man den Offset von 3.162 treffen müsste den man notieren müsste damit man ihn nicht vergisst oder man jedes mal in der config.g nachsehen müsste.Ich finde diese Methode des manuellen Levelns besser, da hier nicht nach Gefühl (0,05mm Einstellblech oder Stück Papier als Level-Hilfe zwischen Bett und Düse) gegangen wird und somit das leveln exakter und ich finde auch.... schneller geht.
Den Z-Offset habe ich mit einem 0,05mm Messblech ermittelt indem ich die Düse 0,05mm über einer Levelschraube positioniert habe und dann diese Stelle mit einem Makro welches speziell für diesen Zweck geschrieben wurde, 10x gemessen und wo mir dann der Mittelwert dieser Messungen angezeigt wird, was dann der Z-Offset ist.Ja ich weiß... ich übertreibe es mit dem Leveln ein wenig.
Aber es macht mir halt Spaß.
Hobby ebenWenig erklärt und viel geschrieben... auch so ein Problem von mir. (Entschuldigung !)
Und durch die Übersetzung sieht es gleich doppelt so viel aus.