<p>I have identified the problem as lead screw backlash! </p>

<p>Bed calibration and Z-axis offset compensation appear to be working as intended, but there is enough backlash in the Ender 3 stock lead screw that the corrections in Z-axis movement commanded by Klipper result in almost no actual nozzle movement.</p>

<p>I'm measuring about 0.35&nbsp;mm of backlash in my lead screw.  With differences between the lowest and highest points of my bed being only 0.6&nbsp;mm the best case scenario (which would only happen if I was using my entire bed) is that the actual nozzle movement would only be about 42&nbsp;% of what Klipper commanded.  The fix for this is to change out the lead screw for a ball screw. The problem could also be mitigated in Klipper if Klipper implemented backlash compensation, but <a href="https://github.com/KevinOConnor/klipper/issues/2040" rel="nofollow noreferrer">from what I've read on GitHub</a> it doesn't seem like that is a feature the developer of Klipper wants to implement.</p>

<p>Update:</p>

<p>I installed <a href="https://www.th3dstudio.com/product/upgraded-leadscrew-nut-for-creality-printers-anti-backlash-nut/" rel="nofollow noreferrer">this</a> anti-backlash nut and it greatly reduced the backlash, but didn't eliminate it. I've uninstalled my solid bed mounts and reinstalled springs until I upgrade to a ball-screw for the Z axis. The auto bed leveling compensation still does something, but the adjustment allowed by having springs is what is really doing most of the leveling work.</p>

CC BY-SA 4.0
2019-11-20T16:03:13.110Z
I'd never heard of anti-backlash nuts.  Cheaper than a ball screw for sure.  I'm going to order this one and see what happens: https://www.th3dstudio.com/product/upgraded-leadscrew-nut-for-creality-printers-anti-backlash-nut/
ubiquibacon
CC BY-SA 4.0
2019-11-20T07:11:32.937Z
2019-11-28T16:52:56.800Z
2019-11-28T16:52:56.800Z
ubiquibacon
<p>My rig:</p>

<ul>
<li>Ender 3</li>
<li>BLTouch</li>
<li>Octopi</li>
<li>Klipper</li>
<li>Solid bed mounts</li>
</ul>

<p>I've updated my start G-code from Cura to include a <code>G29</code> right after <code>G28</code> and my Klipper config has the following override for <code>G29</code>:</p>

<pre><code>[gcode_macro G29]
gcode:
    BED_MESH_CLEAR
    BED_MESH_CALIBRATE
    BED_MESH_PROFILE LOAD=default
</code></pre>

<p>Every print now goes through <code>BED_MESH_CALIBRATE</code> sequence and the Bed Visualizer plugin yields this result:</p>

<p><a href="https://i.sstatic.net/4fw8h.png" rel="nofollow noreferrer" title="Bed Visualizer plugin output screenshot"><img src="https://i.sstatic.net/4fw8h.png" alt="Bed Visualizer plugin output screenshot" title="Bed Visualizer plugin output screenshot"></a></p>

<p>Based on the info here, <a href="https://mmone.github.io/klipper/G-Codes.html#mesh-bed-leveling" rel="nofollow noreferrer">Klipper: G-code commands - Mesh Bed Leveling</a> I would expect Klipper to adjust for the differences seen in the visualization above, but the initial layers of my prints are very squished on the right and rear of bed (right and rear of image) and not squished on the left and front of the bed (left and front of image) which make it seem like <code>BED_MESH_CALIBRATE</code> measured the differences in the bed level, but didn't actually do anything about it.  Isn't the point of <code>BED_MESH_CALIBRATE</code> to adjust for these differences?  </p>

<p>You can see in the first pic below that the final move on the initial layer from the outside edge of the print (right front corner) to the inside has the nozzle so low that it melted a line in the first layer as it skidded across.  </p>

<p>In the second pic below you can see that the left front edge of the print didn't squish properly so it has detached from the bed.  What am I missing?</p>

<p><a href="https://i.sstatic.net/taeBS.jpg" rel="nofollow noreferrer" title="Melted line in the first layer"><img src="https://i.sstatic.net/taeBS.jpg" alt="Melted line in the first layer" title="Melted line in the first layer"></a></p>

<p><a href="https://i.sstatic.net/3o9hu.jpg" rel="nofollow noreferrer" title="Left front edge of the print detached"><img src="https://i.sstatic.net/3o9hu.jpg" alt="Left front edge of the print detached" title="Left front edge of the print detached"></a></p>

CC BY-SA 4.0
2019-11-19T09:14:04.357Z
Your first layer is over-extruding somewhat causing you to hit the edges of the overburden. Also it looks as if your nozzle to build plate distance is a slightly bit too low, I would start increasing that little (in Marlin with [`M851`](https://reprap.org/wiki/G-code#M851:_Set_Z-Probe_Offset)).
0scar
<creality-ender-3><bed-leveling><octoprint><bltouch><klipper>
Klipper doesn't seem to adjust Z after BED_MESH_CALIBRATE
ubiquibacon
# Klipper doesn't seem to adjust Z after BED_MESH_CALIBRATE

(Asked by: username_0 on 2019-11-19)

My rig:

Ender 3
BLTouch
Octopi
Klipper
Solid bed mounts

I've updated my start G-code from Cura to include a G29 right after G28 and my Klipper config has the following override for G29:
[gcode_macro G29]
gcode:
    BED_MESH_CLEAR
    BED_MESH_CALIBRATE
    BED_MESH_PROFILE LOAD=default

Every print now goes through BED_MESH_CALIBRATE sequence and the Bed Visualizer plugin yields this result:

Based on the info here, Klipper: G-code commands - Mesh Bed Leveling I would expect Klipper to adjust for the differences seen in the visualization above, but the initial layers of my prints are very squished on the right and rear of bed (right and rear of image) and not squished on the left and front of the bed (left and front of image) which make it seem like BED_MESH_CALIBRATE measured the differences in the bed level, but didn't actually do anything about it.  Isn't the point of BED_MESH_CALIBRATE to adjust for these differences?  
You can see in the first pic below that the final move on the initial layer from the outside edge of the print (right front corner) to the inside has the nozzle so low that it melted a line in the first layer as it skidded across.  
In the second pic below you can see that the left front edge of the print didn't squish properly so it has detached from the bed.  What am I missing?

**Tags:** creality-ender-3, bed-leveling, octoprint, bltouch, klipper
> **Comments:**
> **username_1**: Your first layer is over-extruding somewhat causing you to hit the edges of the overburden. Also it looks as if your nozzle to build plate distance is a slightly bit too low, I would start increasing that little (in Marlin with [`M851`](https://reprap.org/wiki/G-code#M851:_Set_Z-Probe_Offset)).  

---

## 1 answers

### Answer by username_0 on 2019-11-20. Score: 2 | Accepted answer

I have identified the problem as lead screw backlash!

Bed calibration and Z-axis offset compensation appear to be working as intended, but there is enough backlash in the Ender 3 stock lead screw that the corrections in Z-axis movement commanded by Klipper result in almost no actual nozzle movement.

I'm measuring about 0.35 mm of backlash in my lead screw. With differences between the lowest and highest points of my bed being only 0.6 mm the best case scenario (which would only happen if I was using my entire bed) is that the actual nozzle movement would only be about 42 % of what Klipper commanded. The fix for this is to change out the lead screw for a ball screw. The problem could also be mitigated in Klipper if Klipper implemented backlash compensation, but [from what I've read on GitHub](https://github.com/KevinOConnor/klipper/issues/2040) it doesn't seem like that is a feature the developer of Klipper wants to implement.

Update:

I installed [this](https://www.th3dstudio.com/product/upgraded-leadscrew-nut-for-creality-printers-anti-backlash-nut/) anti-backlash nut and it greatly reduced the backlash, but didn't eliminate it. I've uninstalled my solid bed mounts and reinstalled springs until I upgrade to a ball-screw for the Z axis. The auto bed leveling compensation still does something, but the adjustment allowed by having springs is what is really doing most of the leveling work.

> **Comments:**
> **username_0**: I'd never heard of anti-backlash nuts.  Cheaper than a ball screw for sure.  I'm going to order this one and see what happens: https://www.th3dstudio.com/product/upgraded-leadscrew-nut-for-creality-printers-anti-backlash-nut/  

---

