Bed mesh makes first layer worse

Basic Information:

Printer Model: Ender 3

- Microswiss DD + All Metal Hot End
- Dual Z Stepper
- PEI Spring Sheet Bed
- CR Touch

MCU / Printerboard: SKR Mini E3 2.0

Describe your issue:

I just setup Klipper/Mainsail on my printer and I’ve been going to the process of creating the printer config and doing calibration.

I started by printing the Bed/Extruder Leveling test from Super Slicer and was having a hard time getting all corners to create a nice first layer. I noticed that the raised area of my bed mesh corresponded to the problem areas so I took that out of the equation and cleared the mesh. I then just leveled the bed by hand until all four corners generated nice first layers.

Then I ran the bed mesh calibration and this was the the result.

So for some reason it thinks the left corners are higher then the 0.20mm layer height I was using in the calibration test. Naturally if I print the test with this mesh enabled I get gaps on the left side.

Here’s the bltouch section of my config. Although I actually have a CR Touch.

sensor_pin: ^PC14
control_pin: PA1
x_offset: -50.00
y_offset: -8.00
z_offset: 1.70

probe_with_touch_mode: true
stow_on_each_sample: false

pin_move_time: 0.5
pin_up_touch_mode_reports_triggered: False

speed: 10
lift_speed: 20

samples: 1
sample_retract_dist: 5
samples_tolerance_retries: 3

speed: 120
mesh_min: 30, 30
mesh_max: 205, 190
probe_count: 5, 5
algorithm: bicubic

home_xy_position: 166.8, 118
speed: 75
z_hop: 5
z_hop_speed: 15
move_to_previous: false

I double checked my probe offsets. The probe is 50mm to the left and 8mm in front of the nozzle so this should be -50, -8 right? I’m never sure if I have the right sign with settings like this. It does appear to probe the correct spots on the bed.

I also made sure my X gbantry is level to the frame with these tools I designed:

Here are my results from running a PROBE_ACCURACY test:

probe accuracy results: maximum 1.687500, minimum 1.685000, range 0.002500, average 1.685250, median 1.685000, standard deviation 0.000750
3:36 PM
probe at 166.800,118.000 is z=1.685000
3:36 PM
probe at 166.800,118.000 is z=1.687500
3:36 PM
probe at 166.800,118.000 is z=1.685000
3:36 PM
probe at 166.800,118.000 is z=1.685000
3:36 PM
probe at 166.800,118.000 is z=1.685000
3:36 PM
probe at 166.800,118.000 is z=1.685000
3:36 PM
probe at 166.800,118.000 is z=1.685000
3:36 PM
probe at 166.800,118.000 is z=1.685000
3:35 PM
probe at 166.800,118.000 is z=1.685000
3:35 PM
probe at 166.800,118.000 is z=1.685000
3:35 PM
PROBE_ACCURACY at X:166.800 Y:118.000 Z:5.000 (samples=10 retract=5.000 speed=10.0 lift_speed=20.0)
3:35 PM

Any other ideas? What else am I missing? Should I be using more or less probe points? Bicubic vs LaGrange?


A quick question, do you have a line in your start print macro, (usually in mainsail.cfg) that recalls the bed mesh? Mine is below. I have my printer probe the bed before every print with “BED_MESH_CALIBRATE” If you would like to learn more, this video: Klipper - BL Touch - Auto Bed Leveling - Creality Ender 3 V2 - Chris's Basement - 2022 - YouTube from Chris Riley explains in great detail how to add a bltouch/crtouch to a klipper printer, particularly an Ender 3 variant. At 23:00 he explains how to setup your start print macro.

[gcode_macro START_PRINT]
   # {% set BED_TEMP = params.BED_TEMP|default(60)|float %}
   # {% set EXTRUDER_TEMP = params.EXTRUDER_TEMP|default(190)|float %}
    # Start bed heating
  #  M140 S{BED_TEMP}
    # Use absolute coordinates
    # Reset the G-Code Z offset (adjust Z offset if needed)
    # Home the printer
    #Restore Bed Mesh
    # Move the nozzle near the bed
    G1 Z5 F3000
    # Move Nozzle To Edge Of Bed
    G1 X0 F3000
    G1 Y0 F3000
    # Move the nozzle very close to the bed and wait for print to start
    G1 Z0.15 F300

Happy Printing!

@Blake100 : Please:


Hello @EddyMI3D,

I was wondering how to make the code look like code, thanks so much for the help!

Happy Printing,

1 Like

This is a know and unfortunately unsolved topic: See Experimental mesh leveling changes

To sum it up:

  • Known to exist
  • So far no systematic error in the compensation logic has been identified
  • There are user reports who have successfully solved their issue. In all cases it has been mechanical issues (twisted / bent extrusion profiles) that lead to a non linear deviation between probed point and nozzle coordinates

In addition there is a first attempt to solve such issues via software: [Testers needed] X twist compensation

Hello again,

I noticed that in my stepper z section I may have something that you don’t have. I have the position minimum set less than my z offset. My z offset is 4.11, and my postion_min at -6. This could be an issue for you. I found this in the video listed below. Try out said video. He describes how to setup a bltouch with klipper. I was having bltouch issues setting up klipper on a machine, and this video solved them. Just backup your config, and follow his instructions, and see if it is solved. It helped me, here it is: BL Touch complete setup for Klipper! Maximize your probed bed mesh! - YouTube

If you would like to, you can also try out my bltouch settings. However, please PLEASE change the necessary settings to suit your printer. I would hate for you to enter my settings without changing anything, and then hurting you printer. Here are my settings, getting great first layers:

# BLTouch configuration

sensor_pin: ^PB2 #change this to your previous value
control_pin: PB1  #change this to your previous value
x_offset: -55      #change this to your previous value
y_offset: -14       #change this to your previous value
samples: 2
speed: 2
z_offset: 4.11   #change this to your previous value
stow_on_each_sample: true
probe_with_touch_mode: false

home_xy_position: 150,150 #change this to your previous value
speed: 50 
z_hop: 10
z_hop_speed: 5

speed: 80
horizontal_move_z: 8
mesh_min: 10, 10       #change this to your previous value
mesh_max: 261, 295  #change this to your previous value
probe_count: 6,6 #this is the number of probing points on X then Y axis
mesh_pps: 2,2
fade_start: 1
fade_end: 10
fade_target: 0

Hope this helps,

1 Like

not sure if you ever got this resolved as its been a while, but one thing I had to do on all my printers running klipper, etc that has bed screws is run the command, screws_tilt_calculate. Not sure if you have gone through that process which uses your probe(bltouch/crtouch) to probe the respective bed screws and tells you how to adjust them to “level” your bed, so to speak. you’ll need to add some stuff to your printer.cfg but should help.