# Bed Mesh generated but not enough compensation for existing topography

**URL:** <https://klipper.discourse.group/t/bed-mesh-generated-but-not-enough-compensation-for-existing-topography/13694>\
**Category:** General Discussion\
**Created:** [January 31, 2024, 2:19pm UTC](https://klipper.discourse.group/t/bed-mesh-generated-but-not-enough-compensation-for-existing-topography/13694 "2024-01-31T14:19:01Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![remarkable\_sir](https://avatars.discourse-cdn.com/v4/letter/r/e8c25b/32.png) [@remarkable\_sir](https://klipper.discourse.group/u/remarkable_sir)\
**Post date:** [January 31, 2024, 2:19pm UTC](https://klipper.discourse.group/t/bed-mesh-generated-but-not-enough-compensation-for-existing-topography/13694/1 "2024-01-31T14:19:01Z")

</div>

### Basic Information:

Printer Model: Qidi X-Max 3  
 MCU / Printerboard: MKS PI X-4  
 `klippy.log`

Hi all!

I’m on the hunt for a perfect first layer. Many weeks I tried all kind of things to achieve a perfect result. I even went that far and installed a custom aluminium plate with modified dampeners and NASA grade quality spec.

However it didn’t solve my problem and currently I also have a bumby magnet sheet that is creating a hump on my bed.

No problem! I have Klipper 12 with bed mesh support.  
At least thats what I thought…

I print first layer tests all the time. Bed meshing, heat soaking, everything you can think of was prepared. But I have areas with nozzle too close or nozzle to far away from bed in the same print. Some squares are absolutely perfect. Some are squished. Some fall apart because layer is not bonding

I can feel the rotation of the Z-axis but the compensation is simply not enough.

I also studied the reference guide and tested many different setting regarding tension and move splitting.

I even ordered and installed a Beacon probe which is great and accurate but the problem remains identical compared to tests with BL Touch and also inductive probes.

Here you see my settings:

[bed\_mesh]  
speed:300  
#horizontal\_move\_z:10  
mesh\_min:30,30  
mesh\_max:300,300  
probe\_count:33,33  
algorithm:bicubic  
bicubic\_tension:2  
#mesh\_pps: 4, 4  
zero\_reference\_position: 160, 160  
adaptive\_margin: 5  
move\_check\_distance: 5  
split\_delta\_z: .025  
fade\_start: 1  
fade\_end: 10  
fade\_target: 0

OK!  
Who could help me with this and has a good idea?  
Very frustrating. I really dont kow much else what and where to look for…

Maybe some of you guys have experienced something similar…

Thank you so much!

 ![image](https://global.discourse-cdn.com/free1/uploads/klipper/original/2X/2/2b477ed9595de6095b7c0faf43c5ca23d2f343cc.png)

 ![image](https://global.discourse-cdn.com/free1/uploads/klipper/original/2X/6/6c5ebd471e5e4ef1f99d3111b0f30dead7ff0566.jpeg)

---

<div class="post-metadata">

**Author:** ![remarkable\_sir](https://avatars.discourse-cdn.com/v4/letter/r/e8c25b/32.png) [@remarkable\_sir](https://klipper.discourse.group/u/remarkable_sir)\
**Post date:** [January 31, 2024, 2:36pm UTC](https://klipper.discourse.group/t/bed-mesh-generated-but-not-enough-compensation-for-existing-topography/13694/2 "2024-01-31T14:36:33Z")

</div>

In addition I show 2 pictures of a little 35x80mm layer test I put just over this hump. So I can see and feel the z movement when nozzle transitions between highest and pretty low spot of my print bed.

As you can see a perfect area turns into a quished one whenever we pass the hump.

 ![IMG_2813](https://global.discourse-cdn.com/free1/uploads/klipper/original/2X/6/6ce7a0a9308a2d07f147233064063cbfaa0b0854.jpeg)  
 ![IMG_2812](https://global.discourse-cdn.com/free1/uploads/klipper/original/2X/b/b7e1f541bacba640582a59e608c95eef7a5922b4.jpeg)

---

<div class="post-metadata">

**Author:** ![remarkable\_sir](https://avatars.discourse-cdn.com/v4/letter/r/e8c25b/32.png) [@remarkable\_sir](https://klipper.discourse.group/u/remarkable_sir)\
**Post date:** [January 31, 2024, 2:44pm UTC](https://klipper.discourse.group/t/bed-mesh-generated-but-not-enough-compensation-for-existing-topography/13694/3 "2024-01-31T14:44:10Z")

</div>

Oh sorry i forgot to show the bed level test picture.

You can also see on this test that you have some perfect layer spots and other test squares are bad.

 ![IMG_2726](https://global.discourse-cdn.com/free1/uploads/klipper/original/2X/0/00fc5a5e26ba30aa02adf198a8688fc95b26bc75.jpeg)  
 ![IMG_2727](https://global.discourse-cdn.com/free1/uploads/klipper/original/2X/3/313ad1ce82505a8e642ab8fc0b46f90a5bea8bc8.jpeg)

---

<div class="post-metadata">

**Author:** ![frontmandan](https://avatars.discourse-cdn.com/v4/letter/f/db5fbb/32.png) [@frontmandan](https://klipper.discourse.group/u/frontmandan)\
**Post date:** [January 31, 2024, 6:02pm UTC](https://klipper.discourse.group/t/bed-mesh-generated-but-not-enough-compensation-for-existing-topography/13694/4 "2024-01-31T18:02:31Z")

</div>

beacon has been night and day difference for me, with just the default settings they provide. definitely not perfect, i occasionally get a little rippling.

im sure someone else can answer this, but what is Kamp actually doing. is it messing with the values at all. perhaps its worth uninstalling it and returning all your bed mesh settings to stock.

I would personally disregard all the results of your experimentation prior to beacon as I’m sure you have figured out by now that a BL touch can indicate that a bed is infact flatter than it is.

im sure you have checked this also. but is your offset definatley right. it can be confusing reading the documentation i find.

mine is  
[beacon]  
serial:/dev/serial/by-id/usb-Beacon\_Beacon\_RevD\_2B6C996B4E5737374D202020FF0F3515-if00  
x\_offset: 0 # update with offset from nozzle on your machine  
y\_offset: 35 # update with offset from nozzle on your machine  
mesh\_main\_direction: y  
mesh\_runs: 2

my XY0 is in front left corner when stood in front of printer and the beacon sits further away from me than the nozzle does.

---

<div class="post-metadata">

**Author:** ![Igl](https://avatars.discourse-cdn.com/v4/letter/i/439d5e/32.png) [@Igl](https://klipper.discourse.group/u/Igl)\
**Post date:** [January 31, 2024, 6:13pm UTC](https://klipper.discourse.group/t/bed-mesh-generated-but-not-enough-compensation-for-existing-topography/13694/5 "2024-01-31T18:13:04Z")

</div>

> [@remarkable\_sir](#):
>
> bicubic\_tension:2

I seem to have the same problem with my X2 and a CR touch.  
Now it became impossible to do full bedsize prints.

I also think mesh isnt compensating fast enough.

As for your config:  
bicubic\_tension:2  
Shouldnt that normally be .2?

---

<div class="post-metadata">

**Author:** ![remarkable\_sir](https://avatars.discourse-cdn.com/v4/letter/r/e8c25b/32.png) [@remarkable\_sir](https://klipper.discourse.group/u/remarkable_sir)\
**Post date:** [January 31, 2024, 8:17pm UTC](https://klipper.discourse.group/t/bed-mesh-generated-but-not-enough-compensation-for-existing-topography/13694/6 "2024-01-31T20:17:07Z")

</div>

Thank you and excuse the insufficient information provided. I will quickly answer to the mentioned points.

Yes Beacon offset is configured the proper way according documentation. I think it’s Y0 X30  
But good idea.

I actually did not install KAMP GitHub repo but relied on the nativ Klipper 12 support for adaptive bed meshing. I like it very much this feature.  
Will reduce mesh time for little items.

As for the values in the mesh section I started with standard values. In case of bi-curious tension with 0.2 and later 0.1 or higher values like 0.4 0.9 or 2.0 which is the maximum. All without significant effect.

What is Bambulab doing?  
The have shitty crooked beds and remarkable bed mesh compensation abilities.

I’m very disappointed to get this mesh problem not under control ☹

---

<div class="post-metadata">

**Author:** ![Sineos](https://yyz2.discourse-cdn.com/free1/user_avatar/klipper.discourse.group/sineos/32/18_2.png) [@Sineos](https://klipper.discourse.group/u/Sineos)\
**Post date:** [January 31, 2024, 8:40pm UTC](https://klipper.discourse.group/t/bed-mesh-generated-but-not-enough-compensation-for-existing-topography/13694/7 "2024-01-31T20:40:04Z")

</div>

There have been quite intensive discussion and research if Klipper’s bed mesh algo does something unwanted, but in fact no indication have been found that would point towards this assumption.

What has been definitively found is that mechanical issues, e.g. twisted / skewed extrusion profiles, badly designed belt paths or eccentric roller wheels (just to name some) will lead to bad bed compensation scenarios.

The reason for this is the offset between the probe and the nozzle. This means when the nozzle is at the spot where the probe has taken its sample, the carriage is at a different position and due to the mechanical issue the effective z-values have changed.  
An attempt to compensate such is made with [Axis Twist Compensation](https://www.klipper3d.org/Axis_Twist_Compensation.html), but of course this has its limitations.

---

<div class="post-metadata">

**Author:** ![remarkable\_sir](https://avatars.discourse-cdn.com/v4/letter/r/e8c25b/32.png) [@remarkable\_sir](https://klipper.discourse.group/u/remarkable_sir)\
**Post date:** [February 1, 2024, 12:51pm UTC](https://klipper.discourse.group/t/bed-mesh-generated-but-not-enough-compensation-for-existing-topography/13694/8 "2024-02-01T12:51:49Z")

</div>

I tried the AXIS\_TWIST\_COMPENSATION but I don’t completely understand what it does.

As I mentioned before I have the little “Hill” area on the middle right side.  
Here I did my testing to make sure the mesh compensates for the irregularity.

This is how it looks:

 ![image](https://global.discourse-cdn.com/free1/uploads/klipper/original/2X/6/6c5ebd471e5e4ef1f99d3111b0f30dead7ff0566.jpeg)

Then I executed

> AXIS\_TWIST\_COMPENSATION\_CALIBRATE

The wizard will not accept simply hitting the accept button without changing the Z value.  
I pressed ACCEPT and printer shut down with error message. Left side looked pretty ok but however… Finally I entered the least possible value -0.05 and then the wizard moved on to the next point. 3 points because I didn’t change the default. Also I said Y=160 since its the middle of the bed.

The 3rd point I adjusted pretty heavy with -0.2  
This happened to the mesh:

 ![image](https://global.discourse-cdn.com/free1/uploads/klipper/original/2X/5/5725025513b33171307ed9e9c4989e584cc5bc3a.jpeg)

OK, it works I would say. This was the first attempt and not succesful but I will try again.

What is the best approch in my situation?  
i don’t exactly understand the reason why 3 points would help you.  
And what about the X axis? Do you have to repeat the process with X and Y in changed position?

The most puzzling thing is to measure deviation around 5,000mm all the time (in my case because I set the homing offset to 5mm). This is very impractical.  
I can go into my workshop and take out my cnc milled&ground distance blocks but this is not what I want.

Maybe this tool is more something for a printer that has a skewed gantry or maybe some other geometrical/mechanical issue?

---

<div class="post-metadata">

**Author:** ![Sineos](https://yyz2.discourse-cdn.com/free1/user_avatar/klipper.discourse.group/sineos/32/18_2.png) [@Sineos](https://klipper.discourse.group/u/Sineos)\
**Post date:** [February 1, 2024, 3:37pm UTC](https://klipper.discourse.group/t/bed-mesh-generated-but-not-enough-compensation-for-existing-topography/13694/9 "2024-02-01T15:37:38Z")

</div>

This feature is more targeted at the Ender type of printers although for selected “mechanical issues” it might have a positive effect on other printer designs as well.

I mentioned it more to highlight the fact that such issues significantly impact the ability to compensate via bed meshes.  
For example an eccentric roller wheel might be causing the same effects but in no case could be compensated via the said functionality.

---

<div class="post-metadata">

**Author:** ![Arksine](https://avatars.discourse-cdn.com/v4/letter/a/ce7236/32.png) [@Arksine](https://klipper.discourse.group/u/Arksine)\
**Post date:** [February 1, 2024, 10:00pm UTC](https://klipper.discourse.group/t/bed-mesh-generated-but-not-enough-compensation-for-existing-topography/13694/10 "2024-02-01T22:00:22Z")

</div>

In order to accurately compensate for deviations in the print surface using `bed_mesh` there are two pre-requisites:

1. The printer must be able to accurately probe the bed. The relationship between the nozzle, probe, and bed surface cannot deviate when moving across the XY plane. The probe must accurately trigger at the same distance above the bed, regardless of XY location.

2. The printer must be able to accurately move the Z-axis at the micron level. There can be no stiction, backlash, binding, skipped steps, etc. Many printers have trouble with this. Some of this is hardware/build related, but it can also be related to the configuration (ie: not enough stepper current).

With regard to #1, I notice that you are using an inductive probe. These probes are sensitive to changes in magnetism. They are also affected by changes in PEI thickness.

> Maybe this tool is more something for a printer that has a skewed gantry or maybe some other geometrical/mechanical issue?

It is specifically intended to compensate for a twisted X axis. FWIW, there should be no situation where you enter `ACCEPT` without moving the z-axis. You are required to use the paper test to move the nozzle to the correct Z position (just above the surface) for each sample. It measures the bias between the automatic probe and the manual probe. Three samples are the default, but you can specify more. It depends on how twisted your axis is. FWIW, I don’t know that the Beacon is intended to work with it, perhaps it does.

> What is Bambulab doing?  
> The have shitty crooked beds and remarkable bed mesh compensation abilities.

This is the advantage of targeting and testing against specific hardware that is shipped pre-assembled. Everything from the build procedure itself, configuration, BOM, etc can be throughly tested yielding consistent results.

---

<div class="post-metadata">

**Author:** ![remarkable\_sir](https://avatars.discourse-cdn.com/v4/letter/r/e8c25b/32.png) [@remarkable\_sir](https://klipper.discourse.group/u/remarkable_sir)\
**Post date:** [February 2, 2024, 3:55am UTC](https://klipper.discourse.group/t/bed-mesh-generated-but-not-enough-compensation-for-existing-topography/13694/11 "2024-02-02T03:55:41Z")

</div>

> [@Arksine](#):
>
> Three samples are the default, but you can specify more. It depends on how twisted your axis is. FWIW, I don’t know that the Beacon is intended to work with it, perhaps it does.

Thank you for the explanaition!

The Beacon is a funny piece of equipment. It’s working just like a normal inductive probe but can do a bit more. For this case it’s not relevant and I’m able to enter all values according to description.

I have two questions though. The safe distance of nozzle has to be reduced to 0 then? Mine is 5mm and obviously paper test will not work. Change back nozzle distance back later I suppose. You do it the same way?

Second thought: I set the Y value to 160. Thats the middle of my 320x320mm bed. So I measurer a line i the middle of my bed. How are areas compensated in the corner regions like Y=30 or Y=300 i.e. ? And the X axis. you apply the procedure also with inverted axis another time?  
Didn’t read about that…

---

<div class="post-metadata">

**Author:** ![NozzleSweat](https://yyz2.discourse-cdn.com/free1/user_avatar/klipper.discourse.group/nozzlesweat/32/9721_2.png) [@NozzleSweat](https://klipper.discourse.group/u/NozzleSweat)\
**Post date:** [February 2, 2024, 5:37am UTC](https://klipper.discourse.group/t/bed-mesh-generated-but-not-enough-compensation-for-existing-topography/13694/12 "2024-02-02T05:37:55Z")

</div>

I did axis twist compensation yesterday, and I moved it directly to 0mm quickly, without even checking since the distance to bed was obviously way too high, and started the paper test after that. I ended up around -2.4mm for all three points, with minor deviations in the ±0.01 range between points.

---

<div class="post-metadata">

**Author:** ![Sineos](https://yyz2.discourse-cdn.com/free1/user_avatar/klipper.discourse.group/sineos/32/18_2.png) [@Sineos](https://klipper.discourse.group/u/Sineos)\
**Post date:** [February 2, 2024, 11:17am UTC](https://klipper.discourse.group/t/bed-mesh-generated-but-not-enough-compensation-for-existing-topography/13694/13 "2024-02-02T11:17:25Z")

</div>

> [@remarkable\_sir](#):
>
> The safe distance of nozzle has to be reduced to 0 then? Mine is 5mm and obviously paper test will not work. Change back nozzle distance back later I suppose. You do it the same way?

I’m not sure what you are referring to and IMO this is unrelated. The `AXIS_TWIST_COMPENSATION_CALIBRATE` process is as follows:

1. Call `AXIS_TWIST_COMPENSATION_CALIBRATE`
2. Head will move to the first position and **automatically probes** this position
3. Head will move again, placing the nozzle over exactly the same position that was probed in step 2
4. Now you “manually probe” this spot with the nozzle, according to the [paper test method](https://www.klipper3d.org/Bed_Level.html#the-paper-test)

The algorithm now calculates the delta between the “automatic probing” and the “manual probing”. In an ideal case, i.e. no twist or other mechanical issue is present, then this delta is 0.

> [@remarkable\_sir](#):
>
> Second thought: I set the Y value to 160. Thats the middle of my 320x320mm bed. So I measurer a line i the middle of my bed.

This method only determines a possible issue with the x-axis and as such is independent of the y-axis position.  
If you have x and y combined issues or the mentioned roller wheel issue (or any other topic for this matter) then this method simply does not cover this.

---

<div class="post-metadata">

**Author:** ![Arksine](https://avatars.discourse-cdn.com/v4/letter/a/ce7236/32.png) [@Arksine](https://klipper.discourse.group/u/Arksine)\
**Post date:** [February 2, 2024, 11:32am UTC](https://klipper.discourse.group/t/bed-mesh-generated-but-not-enough-compensation-for-existing-topography/13694/14 "2024-02-02T11:32:38Z")

</div>

> [@remarkable\_sir](#):
>
> I have two questions though. The safe distance of nozzle has to be reduced to 0 then? Mine is 5mm and obviously paper test will not work. Change back nozzle distance back later I suppose. You do it the same way?

Unfortunately I can’t advise you on how to configure the Beacon. It depends on modified Klipper source and the probe itself runs proprietary code. I don’t know if it will work correctly with Axis Twist Compensation.

What I can do is clarify how the Axis Twist Compensation works. It begins by moving the probe to the first sample. It will then probe that sample using the probe. After that, it will move the nozzle over the sample. At this point, you must do a manual probe, as described in the link provided by Sineos above. You use the `TESTZ` command to move the Z axis until the nozzle is in the correct position. Once you are done you enter `ACCEPT` and it moves to the next point.

---

<div class="post-metadata">

**Author:** ![remarkable\_sir](https://avatars.discourse-cdn.com/v4/letter/r/e8c25b/32.png) [@remarkable\_sir](https://klipper.discourse.group/u/remarkable_sir)\
**Post date:** [February 2, 2024, 4:06pm UTC](https://klipper.discourse.group/t/bed-mesh-generated-but-not-enough-compensation-for-existing-topography/13694/15 "2024-02-02T16:06:45Z")

</div>

I measured the backlash of my printer and it seems pretty high now IMO and increased to 0.14mm

![IMG_2823](https://global.discourse-cdn.com/free1/uploads/klipper/original/2X/1/10b8d8794920b15f9c53acf631399eba420f5b20.png)

Is this a major concern or typically not relevant because only while printing very high speeds backlash is causing free fall of the build platform or something…?

---

<div class="post-metadata">

**Author:** ![Sineos](https://yyz2.discourse-cdn.com/free1/user_avatar/klipper.discourse.group/sineos/32/18_2.png) [@Sineos](https://klipper.discourse.group/u/Sineos)\
**Post date:** [February 3, 2024, 7:23am UTC](https://klipper.discourse.group/t/bed-mesh-generated-but-not-enough-compensation-for-existing-topography/13694/16 "2024-02-03T07:23:19Z")

</div>

I don’t really follow where and how you measured some backlash, but in a motion system where you aim for significantly less than 500 microns, this seems a lot.

---

<div class="post-metadata">

**Author:** ![Escrich](https://yyz2.discourse-cdn.com/free1/user_avatar/klipper.discourse.group/escrich/32/4603_2.png) [@Escrich](https://klipper.discourse.group/u/Escrich)\
**Post date:** [February 3, 2024, 10:47am UTC](https://klipper.discourse.group/t/bed-mesh-generated-but-not-enough-compensation-for-existing-topography/13694/17 "2024-02-03T10:47:39Z")

</div>

Change fade\_start to 0

---

<div class="post-metadata">

**Author:** ![EddyMI3D](https://yyz2.discourse-cdn.com/free1/user_avatar/klipper.discourse.group/eddymi3d/32/1981_2.png) [@EddyMI3D](https://klipper.discourse.group/u/EddyMI3D)\
**Post date:** [February 3, 2024, 11:11am UTC](https://klipper.discourse.group/t/bed-mesh-generated-but-not-enough-compensation-for-existing-topography/13694/18 "2024-02-03T11:11:27Z")

</div>

> [@Escrich](#):
>
> Change fade\_start to 0

And that does what?

```auto
#fade_start: 1.0
# The gcode z position in which to start phasing out z-adjustment
# when fade is enabled. Default is 1.0.

```

Below that, the nozzle follows the bed.

---

<div class="post-metadata">

**Author:** ![Arksine](https://avatars.discourse-cdn.com/v4/letter/a/ce7236/32.png) [@Arksine](https://klipper.discourse.group/u/Arksine)\
**Post date:** [February 3, 2024, 12:27pm UTC](https://klipper.discourse.group/t/bed-mesh-generated-but-not-enough-compensation-for-existing-topography/13694/19 "2024-02-03T12:27:10Z")

</div>

You won’t be able to use `bed_mesh` with a significant amount of backlash on Z.

Bed Mesh works by applying small adjustments to the Z axis, moving the tool up and down to fit the contours of the print surface. This involves constant change of direction on Z.

When backlash is present there is a level of “give” before the motion system engages after a change in direction. In other words, the steppers are moving, but the axis will not until the threads, teeth, etc. engage.

> I don’t really follow where and how you measured some backlash, but in a motion system where you aim for significantly less than 500 microns, this seems a lot.

I believe that the Beacon has an option for “backlash compensation” and registers a gcode command that estimates backlash present on Z. That said, even if it makes the probing and/or homing procedure more accurate it would still be impossible to use `bed_mesh` with significant backlash.

> Change fade\_start to 0

I do not recommend this. When attempting to troubleshoot a mesh I recommend disabling fade entirely. It can be done my removing the fade options from the configuration, or by setting `fade_end` to a value lower than `fade_start`.

---

<div class="post-metadata">

**Author:** ![remarkable\_sir](https://avatars.discourse-cdn.com/v4/letter/r/e8c25b/32.png) [@remarkable\_sir](https://klipper.discourse.group/u/remarkable_sir)\
**Post date:** [February 3, 2024, 6:27pm UTC](https://klipper.discourse.group/t/bed-mesh-generated-but-not-enough-compensation-for-existing-topography/13694/20 "2024-02-03T18:27:26Z")

</div>

Beacon will do the backlash measurement for you.

> BEACON\_ESTIMATE\_BACKLASH

Indeed it’s a lot of backlash. Was much lower some month ago. Maybe flange nut should be exchanged or some zero backlash mod needs to be applied.

Some people say backlash is only relevant if very quick direction changes are required. Something like if the build plate is in free fall 😃

The word backlash alone suggests otherwise.  
When I think about it my 2/10th mm mesh problem is possibly almost covered by the 1,4/10th mm backlash.

What do you think? Is this maybe the reason for the odd behavior?

I watch the z axis and I barely see it moving/turning. Will need to verify that it’s actually following the mesh…. Also I’ll look up backlash compensation features of beacon. Who mows if there’s some software.

Mesh fade was off 99% (outcommented) of the time. I just activated it but got rid of it for the testing.

Btw: Besides of the bad mesh and first layer problems the printer works pretty fantastic. Fast, high strength high quality prints with really good optical appearance. Layer lines are flawless etc….

[Next page](https://klipper.discourse.group/t/bed-mesh-generated-but-not-enough-compensation-for-existing-topography/13694.md?page=2)
