unable to get BLTouch mesh compensation to work properly.
-
@dlc60 I'm not sure I'll be able to answer all your questions, but here are a couple of things:
- The range you've selected in M557 (start, spacing of 20 in X and Y) has mesh points at Y=190, which is not reachable according to the combination of Ymax (210) and probe Y offset (-21) that you've chosen. You could get rid of those warnings by tweaking the M557 parameters (e.g., Y4:189).
- The height map looks like it would be decent if not for a ~2mm discrepancy in offset. Sounds like you're probing separately to figure out what the Z offset should be, but you then need to account for that in the G31 Z parameter. A larger Z parameter will bring the nozzle closer to the bed.
- I would suggest concentrating on getting Z=0 to be in the right place first, and then worry about the height map.
Hope this helps.
-
@paralepsis said in unable to get BLTouch mesh compensation to work properly.:
@dlc60 I'm not sure I'll be able to answer all your questions, but here are a couple of things:
- The range you've selected in M557 (start, spacing of 20 in X and Y) has mesh points at Y=190, which is not reachable according to the combination of Ymax (210) and probe Y offset (-21) that you've chosen. You could get rid of those warnings by tweaking the M557 parameters (e.g., Y4:189).
- The height map looks like it would be decent if not for a ~2mm discrepancy in offset. Sounds like you're probing separately to figure out what the Z offset should be, but you then need to account for that in the G31 Z parameter. A larger Z parameter will bring the nozzle closer to the bed.
- I would suggest concentrating on getting Z=0 to be in the right place first, and then worry about the height map.
Hope this helps.
Thanks for replying - I understand the unreachable points, since that isn't much of a problem, I've back-burnered tweaking that setting.
I agree about the height map. As noted, I do a Z=0 set everytime I run the sequence. That has been pretty repeatable. I also tried to adjust the Z offset by baby stepping and add that tweak to the Z offset, but it did not appear to change anything. I know what the issue is, I just seem to be doing something wrong when following the setup procedure.
be well,
-
@dlc60 So if you just boot up, home X and Y, home Z, and then move to Z=0, how far is the nozzle from the bed, in reality? Couple of mm away?
-
@paralepsis said in unable to get BLTouch mesh compensation to work properly.:
@dlc60 So if you just boot up, home X and Y, home Z, and then move to Z=0, how far is the nozzle from the bed, in reality? Couple of mm away?
Nope, about 0.05 mm according to my gap gauge.
be well,
DLC -
@dlc60 Ok. I'm not sure if this will help, but here's precisely what I do to set up my height map.
G1 X102 Y60 F2400 ; move to a consistent spot for probing G29 S2 ; clear mesh G30 ; probe once G91 ; relative positioning G1 Z5 G90 ; absolute positioning M557 X6.75:288 Y40:298.75 P10:10 G29 S4 P"/sys/probePoints10x10all.csv"; load probePoints10x10all.csv to skip points G29 S0 ; probe and enable mesh M376 H5 ; taper over first 5mm (ought to be more than enough)
Obviously X and Y must be homed prior to this. You can ignore the G29 S4; that's for working around magnets. I won't say this is the "right" way to do things, but it certainly works consistently for me, and I get very small discrepancies in height map (as one would hope!).
Rob
-
@paralepsis said in unable to get BLTouch mesh compensation to work properly.:
@dlc60 Ok. I'm not sure if this will help, but here's precisely what I do to set up my height map.
G1 X102 Y60 F2400 ; move to a consistent spot for probing G29 S2 ; clear mesh G30 ; probe once G91 ; relative positioning G1 Z5 G90 ; absolute positioning M557 X6.75:288 Y40:298.75 P10:10 G29 S4 P"/sys/probePoints10x10all.csv"; load probePoints10x10all.csv to skip points G29 S0 ; probe and enable mesh M376 H5 ; taper over first 5mm (ought to be more than enough)
Obviously X and Y must be homed prior to this. You can ignore the G29 S4; that's for working around magnets. I won't say this is the "right" way to do things, but it certainly works consistently for me, and I get very small discrepancies in height map (as one would hope!).
Rob
Rob,
All the instructions that I have say to do G30 S-1 to find the Z probe offset to update the G31 in the config.g file. What does your Line 3 above do? What is your G31 probe offset look like when you start this? Are you working always with a previously set G31 in config.g? You are not setting the G92 Z0 either, are you using whatever you currently have?
be well,
DLC -
@paralepsis said in unable to get BLTouch mesh compensation to work properly.:
@dlc60 Ok. I'm not sure if this will help, but here's precisely what I do to set up my height map.
G1 X102 Y60 F2400 ; move to a consistent spot for probing G29 S2 ; clear mesh G30 ; probe once G91 ; relative positioning G1 Z5 G90 ; absolute positioning M557 X6.75:288 Y40:298.75 P10:10 G29 S4 P"/sys/probePoints10x10all.csv"; load probePoints10x10all.csv to skip points G29 S0 ; probe and enable mesh M376 H5 ; taper over first 5mm (ought to be more than enough)
Obviously X and Y must be homed prior to this. You can ignore the G29 S4; that's for working around magnets. I won't say this is the "right" way to do things, but it certainly works consistently for me, and I get very small discrepancies in height map (as one would hope!).
Rob
Rob,
I did these steps first:
M561 to clear any mesh.
homed all
moved to center of bed and up 5mm
G30 S-1 to find offset.
Modified config.g G31 probe offset.
Restarted.
Then this
Homed all, moved to center 5mm up
M561 to clear any mesh
Ran your sequence but didn't do the G30 single probe - and ran my M557 pattern.
I am now getting what I expect to see, a well laid down first layer. and a reasonable height map, which could be better, but isn't too bad.I have no idea where I may have gone wrong - Maybe should not have stayed up so late?
be well,
DLC -
@dlc60 Hey! Glad you got something working.
Re: G30, that does a single probe and sets Z coordinate to probe trigger height -- it's the equivalent of homing Z using that XY coordinate as the point at which to home.
I don't have a separate Z axis endstop, so this is how I "home" prior to doing the mesh probe. I guess you do have a separate Z axis endstop, otherwise I'm not sure that G30 S-1 is meaningful?
-
This macro may be overkill, but may help. It will calculate the probe points for you. I use it for quick calibrations (small number of probe points) t0 get the bed more-or-less level then a more comprehensive calibration.
To use you would likely need to have
global zprobe_index = 0
at the start (I use a couple of different zprobes hence the variable); Creates a mesh calibration ; Assumes the bed limits (actual area reachable by the nozzle) ; have been set with M208 ; Assumes the probe offset has been set with G31 ; ;--- Prerequisites -------------- ; global.zprobe_index MUST be defined. The probe number to use. ; ; --- CHANGE THESE SETTINGS TO YOUR REQUIREMENTS --- ; ; Heat Bed and Nozzle ? var set_temp = false ; ; Set bed and nozzle temp -- Note that this is not too critical var bed_temp = 50.0 ; set at an reasonable temp (e.g. 50 should be good enough for PLA and PETG var nozzle_temp = 150.0 ; set high enough to allow for some expansion but not enough to ooze ; ; Set margin to limit area of bed to be probed should be >= 1.0 var X_margin = 1.0 var Y_margin = 1.0 ; ; Set the number of probe points in X and Y axis var P_X_points = 0 var P_Y_points = 0 ; ; ------------------------------------------ ; --- SHOULD NOT CHANGE BELOW THIS POINT --- ;------------------------------------------- ; ;Ensure a tool is selected ; if state.currentTool < 0 ; no tool selected var msg = "Cannot run if no tool is selected" M117 {var.msg} abort {var.msg} M291 R"How Many Probe points" P"Select a number" K{"9","16","64","100","Cancel"} S4 if input = 0 set var.P_X_points = 3 set var.P_Y_points = 3 elif input = 1 set var.P_X_points = 4 set var.P_Y_points = 4 elif input = 2 set var.P_X_points = 8 set var.P_Y_points = 8 elif input = 3 set var.P_X_points = 10 set var.P_Y_points = 10 else abort "Selection cancelled" M291 R"Hot or Cold Calibration" P"Turn on Heaters" K{"YES","NO","Cancel"} S4 if input = 0 set var.set_temp = true elif input = 1 set var.set_temp = false else abort "Selection cancelled" ; ;initialize local variables var X_grid_min = 0.0 var X_grid_max = 0.0 var Y_grid_min = 0.0 var Y_grid_max = 0.0 ; Get the limits for accessible parts of the bed i.e. where nozzle can reach var X_min = move.axes[0].min var X_max = move.axes[0].max var Y_min = move.axes[1].min var Y_max = move.axes[1].max ; Set the probe offset var X_offset = sensors.probes[{global.zprobe_index}].offsets[0] var Y_offset = sensors.probes[{global.zprobe_index}].offsets[1] ; ; ------------ MACRO STARTS HERE----------------- ; G90 ; use absolute coordinates M83 ; extruder relative mode ; if var.set_temp echo "Wait for Calibration Temperatures to be reached" M104 S{var.nozzle_temp} M140 S{var.bed_temp} ; set bed temp a compromise between PLA and PETG M116 ; wait for temperatures to be reached ;G1 E-4 F3600 ; retract filament quickly so no ooze M290 R0 S0 ;remove any babysteps M561 ; reset any bed compensation ; ; Calculate X max and min probe points if var.X_offset >= 0.0 ; right hand probe point is limited set var.X_grid_min = {var.X_min + var.X_margin + var.X_offset} set var.X_grid_max = {var.X_max - var.X_margin} else set var.X_grid_min = {var.X_min + min(var.X_margin, -var.X_offset)} set var.X_grid_max = {var.X_max - var.X_margin + var.X_offset} ; X offset is negative so we add echo "X offset " ^ var.X_offset ^ " (" ^ var.X_grid_min ^ ":" ^ var.X_grid_max ^ ")" ; ; Calculate Y max and min probe points if var.Y_offset >= 0.0 set var.Y_grid_min = {var.Y_min + var.Y_margin + var.Y_offset} set var.Y_grid_max = {var.Y_max - var.Y_margin} else set var.Y_grid_min = {var.Y_min + min(var.Y_margin, -var.Y_offset)} set var.Y_grid_max = {var.Y_max - var.Y_margin + var.Y_offset} ; Y offset is negative so we add echo "Y offset " ^ var.Y_offset ^ " (" ^ var.Y_grid_min ^ ":" ^ var.Y_grid_max ^ ")" ; ; Set the grid probe points M557 X{var.X_grid_min,var.X_grid_max} Y{var.Y_grid_min,var.Y_grid_max} P{var.P_X_points,var.P_Y_points} M557 ;report the settings ; echo "Performing Mesh Calibration" G28 ; must be homed first G30 K{global.zprobe_index} ; Perform a single probe to establish Z=0 (should already be at center because of home) G29 K{global.zprobe_index} S0 ; perform mesh calibration save and load G0 Z50 F3000 ; lower bed echo "Calibration Complete" if var.set_temp G1 E4 F300 ; put filament back ; Turn off heaters M568 S0 R0 A0 ; Reset temps and turn off hotend M140 S0 R0 ; Reset bed temps M140 S-273 ; Turn of bed heater
-
@stuartofmt said in unable to get BLTouch mesh compensation to work properly.:
This macro may be overkill, but may help. It will calculate the probe points for you. I use it for quick calibrations (small number of probe points) t0 get the bed more-or-less level then a more comprehensive calibration.
To use you would likely need to have
global zprobe_index = 0
at the start (I use a couple of different zprobes hence the variable); Creates a mesh calibration ; Assumes the bed limits (actual area reachable by the nozzle) ; have been set with M208 ; Assumes the probe offset has been set with G31 ; ;--- Prerequisites -------------- ; global.zprobe_index MUST be defined. The probe number to use. ; ; --- CHANGE THESE SETTINGS TO YOUR REQUIREMENTS --- ; ; Heat Bed and Nozzle ? var set_temp = false ; ; Set bed and nozzle temp -- Note that this is not too critical var bed_temp = 50.0 ; set at an reasonable temp (e.g. 50 should be good enough for PLA and PETG var nozzle_temp = 150.0 ; set high enough to allow for some expansion but not enough to ooze ; ; Set margin to limit area of bed to be probed should be >= 1.0 var X_margin = 1.0 var Y_margin = 1.0 ; ; Set the number of probe points in X and Y axis var P_X_points = 0 var P_Y_points = 0 ; ; ------------------------------------------ ; --- SHOULD NOT CHANGE BELOW THIS POINT --- ;------------------------------------------- ; ;Ensure a tool is selected ; if state.currentTool < 0 ; no tool selected var msg = "Cannot run if no tool is selected" M117 {var.msg} abort {var.msg} M291 R"How Many Probe points" P"Select a number" K{"9","16","64","100","Cancel"} S4 if input = 0 set var.P_X_points = 3 set var.P_Y_points = 3 elif input = 1 set var.P_X_points = 4 set var.P_Y_points = 4 elif input = 2 set var.P_X_points = 8 set var.P_Y_points = 8 elif input = 3 set var.P_X_points = 10 set var.P_Y_points = 10 else abort "Selection cancelled" M291 R"Hot or Cold Calibration" P"Turn on Heaters" K{"YES","NO","Cancel"} S4 if input = 0 set var.set_temp = true elif input = 1 set var.set_temp = false else abort "Selection cancelled" ; ;initialize local variables var X_grid_min = 0.0 var X_grid_max = 0.0 var Y_grid_min = 0.0 var Y_grid_max = 0.0 ; Get the limits for accessible parts of the bed i.e. where nozzle can reach var X_min = move.axes[0].min var X_max = move.axes[0].max var Y_min = move.axes[1].min var Y_max = move.axes[1].max ; Set the probe offset var X_offset = sensors.probes[{global.zprobe_index}].offsets[0] var Y_offset = sensors.probes[{global.zprobe_index}].offsets[1] ; ; ------------ MACRO STARTS HERE----------------- ; G90 ; use absolute coordinates M83 ; extruder relative mode ; if var.set_temp echo "Wait for Calibration Temperatures to be reached" M104 S{var.nozzle_temp} M140 S{var.bed_temp} ; set bed temp a compromise between PLA and PETG M116 ; wait for temperatures to be reached ;G1 E-4 F3600 ; retract filament quickly so no ooze M290 R0 S0 ;remove any babysteps M561 ; reset any bed compensation ; ; Calculate X max and min probe points if var.X_offset >= 0.0 ; right hand probe point is limited set var.X_grid_min = {var.X_min + var.X_margin + var.X_offset} set var.X_grid_max = {var.X_max - var.X_margin} else set var.X_grid_min = {var.X_min + min(var.X_margin, -var.X_offset)} set var.X_grid_max = {var.X_max - var.X_margin + var.X_offset} ; X offset is negative so we add echo "X offset " ^ var.X_offset ^ " (" ^ var.X_grid_min ^ ":" ^ var.X_grid_max ^ ")" ; ; Calculate Y max and min probe points if var.Y_offset >= 0.0 set var.Y_grid_min = {var.Y_min + var.Y_margin + var.Y_offset} set var.Y_grid_max = {var.Y_max - var.Y_margin} else set var.Y_grid_min = {var.Y_min + min(var.Y_margin, -var.Y_offset)} set var.Y_grid_max = {var.Y_max - var.Y_margin + var.Y_offset} ; Y offset is negative so we add echo "Y offset " ^ var.Y_offset ^ " (" ^ var.Y_grid_min ^ ":" ^ var.Y_grid_max ^ ")" ; ; Set the grid probe points M557 X{var.X_grid_min,var.X_grid_max} Y{var.Y_grid_min,var.Y_grid_max} P{var.P_X_points,var.P_Y_points} M557 ;report the settings ; echo "Performing Mesh Calibration" G28 ; must be homed first G30 K{global.zprobe_index} ; Perform a single probe to establish Z=0 (should already be at center because of home) G29 K{global.zprobe_index} S0 ; perform mesh calibration save and load G0 Z50 F3000 ; lower bed echo "Calibration Complete" if var.set_temp G1 E4 F300 ; put filament back ; Turn off heaters M568 S0 R0 A0 ; Reset temps and turn off hotend M140 S0 R0 ; Reset bed temps M140 S-273 ; Turn of bed heater ob
I created a simpler macro that does most of what you do here, Kind of a combination of yours and Rob's.
Mine handles homing, bed and nozzle heating, and compensation. As Rob mentioned, the G92 Z0 is not very useful for me since I have a Z end stop that I set to 0.05 mm at the center of the bed. That is my reference point. Then I get a G30 S-1 at that point to find the offset there, set my config.g G31 probe offsets. This is my starting point. Then I fire off the compensation macro.This has proven itself to work reasonably well. Certainly better than trying to manually tram the bed to any great precision. Metal plates and biosilicate glass have proven to be not very flat.
Thank you everyone!
be well,
DLC