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