Klipper / octoprint / Ender 3 S1: problem with bed mesh leveling

Hi,

I’m pretty new to 3d printing, but otherwise quite tech savy.

I have a new Ender 3 S1 which I want to use with Klipper. I set up Klipper as documented at Installation - Klipper documentation. Communication and printing works fine, I already did some calibration work.

What sadly does not work is using the bed mesh. For me it looks like the mesh is probed correctly, but are not correctly applied during the print.

Steps done once:

  • Tramming the bed using SCREWS_TILT_CALCULATE
  • Probe Z offset configuration (x/y offsets were already present i default config and seem correct)

Steps done for the test print

  • Preheating bed to printing temps (205°/60°)
  • BED_MESH_CLEAR → Just to be sure…
  • G28 homing → To allow for calibration
  • BED_MESH_CALIBRATE → Calibrate
  • SAVE_CONFIG → I want to store the config
  • Displaying the mesh in octopi bed visualizer → Looks reasonable to me. See reply below, I can only embed one image.
  • Preheat again → To prepare printing
  • Start print of CE3_z-calibrate25.zip (36.9 KB) → Simple test pattern, see below
  • Wait for the print to finish
  • Check the result

The result:


(X/Y Origin is bottom left)

As you can see in the picture, the quality of the first layer changes drastically from square to square. I’m new to 3d printing (so feel free to correct my interpretation), but it seems to me that the oudside squares all have the print head too close to the bed, while the center squares look much better. That’s what I would expect if no z offset was applied at all (and the mesh is ignored).

My Questions
Did I do something wrong while configuring/using Klipper? Is this indicating some mechanical problems? What can I do to fix this?

Thanks in advance
Charno

My printer.cfg:

# This file contains pin mappings for the stock 2021 Creality Ender 3
# S1. To use this config, check the STM32 Chip on the V2.4S1 Board
# then during "make menuconfig" select either the STM32F103 with a
# "28KiB bootloader" or select the STM32F401 with a "64KiB bootloader"
# and serial (on USB PA10/PA9) communication for both depending on the
# STM32 Chip installed on your printers Motherboard.

# If you prefer a direct serial connection, in "make menuconfig"
# select "Enable extra low-level configuration options" and select
# serial (on USB PA10/PA9), which is broken out on the 10 pin IDC
# cable used for the LCD module as follows:
# 3: Tx, 4: Rx, 9: GND, 10: VCC

# Flash this firmware by copying "out/klipper.bin" to a SD card and
# turning on the printer with the card inserted. The firmware
# filename must changed to "firmware.bin"

# See docs/Config_Reference.md for a description of parameters.

[stepper_x]
step_pin: PC2
dir_pin: PB9
enable_pin: !PC3
microsteps: 16
rotation_distance: 40
endstop_pin: !PA5
position_endstop: -5
position_max: 220
position_min: -5
homing_speed: 50

[stepper_y]
step_pin: PB8
dir_pin: PB7
enable_pin: !PC3
microsteps: 16
rotation_distance: 40
endstop_pin: !PA6
position_endstop: -5
position_max: 220
position_min: -5
homing_speed: 50

[stepper_z]
step_pin: PB6
dir_pin: !PB5
enable_pin: !PC3
microsteps: 16
rotation_distance: 8
endstop_pin: probe:z_virtual_endstop
position_max: 270
position_min: -3

[extruder]
step_pin: PB4
dir_pin: PB3
enable_pin: !PC3
microsteps: 16
gear_ratio: 3.5:1
rotation_distance: 26
nozzle_diameter: 0.400
filament_diameter: 1.750
heater_pin: PA1
sensor_type: EPCOS 100K B57560G104F
sensor_pin: PC5
control: pid
pid_Kp=23.561 
pid_Ki=1.208 
pid_Kd=114.859
min_temp: 0
max_temp: 250
pressure_advance: 0.17

[heater_bed]
heater_pin: PA7
sensor_type: EPCOS 100K B57560G104F
sensor_pin: PC4
control: pid
pid_Kp=71.867 
pid_Ki=1.536 
pid_Kd=840.843
min_temp: 0
max_temp: 130

[heater_fan hotend_fan]
pin: PC0
heater: extruder
heater_temp: 50.0

[fan]
pin: PA0

[mcu]
serial: /dev/serial/by-id/usb-1a86_USB_Serial-if00-port0
restart_method: command

[printer]
kinematics: cartesian
max_velocity: 300
max_accel: 2000
max_z_velocity: 5
max_z_accel: 100

[bltouch]
sensor_pin: ^PC14
control_pin: PC13
x_offset: -37
y_offset: -39
z_offset: 2.130
probe_with_touch_mode: true
stow_on_each_sample: false
samples: 3

[bed_mesh]
speed: 120
mesh_min: 10, 10
mesh_max: 183,181
probe_count: 6,6
algorithm: bicubic

[safe_z_home]
home_xy_position: 141.8,150.5
speed: 75
z_hop: 5
z_hop_speed: 5
move_to_previous: true

[filament_switch_sensor e0_sensor]
switch_pin: !PC15
pause_on_runout: true
runout_gcode: PAUSE

[pause_resume]
recover_velocity: 25

[screws_tilt_adjust]
screw1: 60, 70
screw1_name: vl
screw2: 60, 220
screw2_name: hl
screw3: 220, 70
screw3_name: vr
screw4: 220, 220
screw4_name: hr
screw_thread: CW-M3
horizontal_move_z: 10
speed: 50

#*# <---------------------- SAVE_CONFIG ---------------------->
#*# DO NOT EDIT THIS BLOCK OR BELOW. The contents are auto-generated.
#*#
#*# [bed_mesh default]
#*# version = 1
#*# points =
#*#       0.227500, 0.115000, 0.077500, 0.061667, 0.134167, 0.197500
#*#       0.106667, 0.019167, 0.005833, -0.026667, 0.072500, 0.095833
#*#       0.107500, 0.020833, 0.005833, 0.024167, 0.122500, 0.187500
#*#       0.105000, 0.043333, 0.004167, 0.020833, 0.104167, 0.155833
#*#       0.078333, -0.004167, 0.013333, 0.013333, 0.098333, 0.133333
#*#       0.114167, 0.035000, 0.031667, -0.005833, 0.071667, 0.100000
#*# tension = 0.2
#*# min_x = 10.0
#*# algo = bicubic
#*# y_count = 6
#*# mesh_y_pps = 2
#*# min_y = 10.0
#*# x_count = 6
#*# max_y = 181.0
#*# mesh_x_pps = 2
#*# max_x = 183.0

Mesh visualisation:

Be aware that your probed area is only roughly 170 x 170. Everything outside is using the last value from the nearest probed point.
So if your bed should deviate in this areas, you need to stay inside the probed one or generate a manual mesh.

You have a G28 in your gcode file.

You should run the BED_MESH_CALIBRATE after this.
So you may have to put it into your start gcode in the slicer.

Thanks for your answer! :slight_smile: Yes, I’m aware. The bottom left corner is well within the probing zone (and I can see the probe doing work there), but the problem is still present in this corner.

Thanks for your ansewr! :slight_smile:

Hmm… I thought the bed mesh would be persisted in the config file, and even survive reboots? I didn’t expect G28 to change the mesh behaviour at all. But I’ll try with a start gcode which has BED_MESH_CALIBRATE after G28

25 test points is hard on the edge what is practical referring time consumption.
Another way would be to store the bed mesh as a profile and load it after G28.

I manually changed the gcode to contain BED_MESH_CALIBRATE after G28, but sadly it did not change anything, the print looks still the same.

Do you (or anybody) have some other ideas?

CE3_z-calibrate25-with-bed-mesh.zip (36.5 KB)

Hmm, hard to tell:

  • Looking on the height-map as generated by your probing, the bottom row seems pretty close to 0 → No correction applied. Bad printing results
  • The middle of the bed is also close to 0 → No correction applied. Good printing results

Such things are hard to diagnose. Could be accuracy issues of the probe. Could be some mechanical effects. Could be thermal effects like the bed deforming when fully heat soaked (which can easily take 15 minutes and above)

Thanks for your Input! I have changed the mesh to 15x15 without interpolation, but this didn’t help. The prints are still with the same problem in the bottom left / center / right. During probing the three repeated probes per point were always the same, or with one step difference.

I did some tests with PROBE_ACCURACY, and this seems to be reasonable (one or max. two steps difference between the probings).

From BED_MESH_OUTPUT, it seems that in the mesh there something like a half pipe at y=10 (assuming first row is nearest to Y?), which makes sense from a “gravity turns every flat surface into a pringles chip” perspective. But in the print result I still have problems in lower center.

Send: BED_MESH_OUTPUT
Recv: // Mesh Leveling Probed Z positions:
Recv: // 0.185000 0.125000 0.104167 0.060833 0.050833 0.045000 0.017500 0.017500 0.041667 0.073333 0.102500 0.132500 0.150833 0.158333 0.210833
Recv: // 0.132500 0.055833 0.035000 0.017500 -0.017500 -0.025000 -0.043333 -0.045000 -0.025000 0.015000 0.038333 0.074167 0.092500 0.099167 0.152500
Recv: // 0.072500 0.017500 -0.011667 -0.030000 -0.030833 -0.051667 -0.049167 -0.064167 -0.059167 -0.006667 0.028333 0.068333 0.088333 0.087500 0.115833
Recv: // 0.047500 0.005833 -0.022500 -0.045000 -0.040833 -0.035833 -0.072500 -0.060000 -0.060833 -0.015000 0.017500 0.042500 0.070000 0.075000 0.110000
Recv: // 0.051667 0.010000 -0.001667 -0.037500 -0.030000 -0.027500 -0.040833 -0.023333 -0.010833 0.035833 0.069167 0.096667 0.120833 0.140833 0.181667
Recv: // 0.088333 0.051667 0.035000 -0.001667 0.007500 0.020833 -0.001667 0.021667 0.031667 0.085833 0.108333 0.147500 0.160833 0.189167 0.222500
Recv: // 0.112500 0.065000 0.057500 0.019167 0.035000 0.036667 0.030000 0.060000 0.069167 0.110000 0.130000 0.156667 0.190000 0.197500 0.235833
Recv: // 0.120833 0.071667 0.062500 0.049167 0.032500 0.039167 0.005833 0.018333 0.040000 0.090833 0.129167 0.182500 0.195000 0.190000 0.202500
Recv: // 0.107500 0.070000 0.055000 0.040000 0.029167 0.027500 0.010000 0.022500 0.017500 0.060000 0.097500 0.141667 0.183333 0.174167 0.175000
Recv: // 0.103333 0.065000 0.057500 0.034167 0.033333 0.034167 0.028333 0.035000 0.072500 0.092500 0.130000 0.140833 0.174167 0.175833 0.212500
Recv: // 0.107500 0.065000 0.048333 0.021667 0.037500 0.041667 0.020000 0.045833 0.067500 0.097500 0.119167 0.142500 0.163333 0.170000 0.205833
Recv: // 0.095000 0.066667 0.055000 0.018333 0.025000 0.035000 0.027500 0.046667 0.042500 0.085000 0.125000 0.125833 0.148333 0.158333 0.190833
Recv: // 0.102500 0.062500 0.056667 0.021667 0.032500 0.022500 0.014167 0.030000 0.062500 0.092500 0.110833 0.121667 0.154167 0.157500 0.174167
Recv: // 0.118333 0.091667 0.072500 0.046667 0.065000 0.047500 0.020833 0.030833 0.026667 0.080000 0.097500 0.087500 0.119167 0.102500 0.145000
Recv: // 0.117500 0.085833 0.073333 0.075833 0.076667 0.085000 0.040000 0.076667 0.054167 0.085833 0.110833 0.132500 0.130000 0.137500 0.164167
Recv: Mesh X,Y: 15,15
Recv: Search Height: 5
Recv: Mesh Offsets: X=0.0000, Y=0.0000
Recv: Mesh Average: 0.07
Recv: Mesh Range: min=-0.0725 max=0.2358
Recv: Interpolation Algorithm: bicubic
Recv: Measured points:
Recv:   0.117500  0.085833  0.073333  0.075833  0.076667  0.085000  0.040000  0.076667  0.054167  0.085833  0.110833  0.132500  0.130000  0.137500  0.164167
Recv:   0.118333  0.091667  0.072500  0.046667  0.065000  0.047500  0.020833  0.030833  0.026667  0.080000  0.097500  0.087500  0.119167  0.102500  0.145000
Recv:   0.102500  0.062500  0.056667  0.021667  0.032500  0.022500  0.014167  0.030000  0.062500  0.092500  0.110833  0.121667  0.154167  0.157500  0.174167
Recv:   0.095000  0.066667  0.055000  0.018333  0.025000  0.035000  0.027500  0.046667  0.042500  0.085000  0.125000  0.125833  0.148333  0.158333  0.190833
Recv:   0.107500  0.065000  0.048333  0.021667  0.037500  0.041667  0.020000  0.045833  0.067500  0.097500  0.119167  0.142500  0.163333  0.170000  0.205833
Recv:   0.103333  0.065000  0.057500  0.034167  0.033333  0.034167  0.028333  0.035000  0.072500  0.092500  0.130000  0.140833  0.174167  0.175833  0.212500
Recv:   0.107500  0.070000  0.055000  0.040000  0.029167  0.027500  0.010000  0.022500  0.017500  0.060000  0.097500  0.141667  0.183333  0.174167  0.175000
Recv:   0.120833  0.071667  0.062500  0.049167  0.032500  0.039167  0.005833  0.018333  0.040000  0.090833  0.129167  0.182500  0.195000  0.190000  0.202500
Recv:   0.112500  0.065000  0.057500  0.019167  0.035000  0.036667  0.030000  0.060000  0.069167  0.110000  0.130000  0.156667  0.190000  0.197500  0.235833
Recv:   0.088333  0.051667  0.035000  -0.001667  0.007500  0.020833  -0.001667  0.021667  0.031667  0.085833  0.108333  0.147500  0.160833  0.189167  0.222500
Recv:   0.051667  0.010000  -0.001667  -0.037500  -0.030000  -0.027500  -0.040833  -0.023333  -0.010833  0.035833  0.069167  0.096667  0.120833  0.140833  0.181667
Recv:   0.047500  0.005833  -0.022500  -0.045000  -0.040833  -0.035833  -0.072500  -0.060000  -0.060833  -0.015000  0.017500  0.042500  0.070000  0.075000  0.110000
Recv:   0.072500  0.017500  -0.011667  -0.030000  -0.030833  -0.051667  -0.049167  -0.064167  -0.059167  -0.006667  0.028333  0.068333  0.088333  0.087500  0.115833
Recv:   0.132500  0.055833  0.035000  0.017500  -0.017500  -0.025000  -0.043333  -0.045000  -0.025000  0.015000  0.038333  0.074167  0.092500  0.099167  0.152500
Recv:   0.185000  0.125000  0.104167  0.060833  0.050833  0.045000  0.017500  0.017500  0.041667  0.073333  0.102500  0.132500  0.150833  0.158333  0.210833

I guess the next steps are checking hardware (any recommendations?) and maybe try a print with a cleared mesh to see what happens then. If this doesn’t help I’ll get a prusa print plate to check if I just got a bad apple which causes the problems…

I’ve also been having this problem, and while my probe accuracy is very good, I definitely have probe “location bias”… over 400 microns and according to the klipper docs on this it should not exceed 25 microns!!! I am still trying to find cause of this probe location bias, but would be curious to see if you have same problem… try running the test and post back here pls.

Thanks for your reply. I’m still interested in the topic, but very short on time currently. My thoughts went in the same direction, but I didn’t know about the term “location bias” and didn’t think about testing z offset on different locations. I’ll hopefully find time to test in the next few weeks.

Here’s a link to the page where you can read about it and how to test for it when you get a chance- https://github.com/…/blob/master/docs/Probe_Calibrate.md

Thanks for the link. I’ve also found your post at Reddit about the problem, now that I have a term for it: https://www.reddit.com/r/ender3/comments/u69d57/comment/ibqwvvs/?utm_source=share&utm_medium=web2x&context=3

I got lots of time to read but not a lot of time with the printer, sadly :frowning: But I guess if it’s really the location bias I will simply disable ABL and manually level with paper and screws… The bed itself should be fairly flat, I bought a glass bed since my original bed is badly scratched.

Finally found some time, and yeah well…

probe at 75.200,82.500
bltouch: z_offset: 1.649


probe at 143.400,142.000
bltouch: z_offset: 1.750

probe at 41.600,51.500
bltouch: z_offset: 1.850

I didn’t bother to check other locations since it’s already around 200 microns which is wayyyy more than the recommended 25 microns

Well, I guess I have a printer wichout auto bed leveling now ^^

Thanks for the hints, @SkyGuy !

Yeah. Shame their QC is so bad; it WAS* a nice printer otherwise. (* I returned mine for refund).

Sadly I already modified so much that I can’t refund :frowning:

Hey, BTW; someone just posted in the S1 Fb owners group that they fixed their problem by loosening the Y extrusion and retightening, but NOT over tightening. This makes sense as my Y extrusion definitely had a slight bind when sliding the bed (I never thought to try removing and reinstalling the extrusion, but several other users have chimed in that they tried this and it fixed their problem too). Hope this works for you.

Thanks, I think I found a very good post about the problem at Ender 3 S1 / S1 Pro Owners | Hi all, here is a guide on how to fix the ABL issues by adjusting the Y axis on the Ender 3 S1 and S1 Pro.

Hopefully I’ll find some time this week to try it out :slight_smile:

Would you look at that! :smiley:

Still not perfect (a bit far in the top left, a bit close in the bottom right), but by far the best first layer of this size I ever got with this printer! If I lower the z offset a little it should be totally usable.

Thanks for all your help and hints, @SkyGuy !

1 Like