Process to get your bed mesh data plot with a dial gauge

This is a proven (by me) process on how to get bed mesh data which is unavailable on our bambu printers by using a dial gauge. This is really a substitute to what should be directly available on our printers. I hope one day this tedious process can be avoided…

I selected Bambu H2D series section for this post although it was tested on H2D but the same can be used on H2S (see note below) and with a proper holder and some adjustments on the probing locations (X and Y) in the gcode be used on any bambulab (or else) printer.

The process involves obviously a dial gauge and its holder to fit on the toolhead, a dedicated gcode that will instruct the toolhead to probe each location of the printer’s calibration mesh and a web tool to input your data.

The GCode will start by heating the bed to 55°C, heat soak for 3 minutes (you can delete or comment out the 2 lines in the gcode if you want to perform it at room temperature, or change temperature to 100°C if you wish to plot for higher temperature, print the holder in PETG or ABS then ;)), home the toolhead, set calibration compensation to off, probe 64 (8x8) points on the bed then turn compensation on and probe again the 64 points. You will need to manually record the value at each location (or you can film the whole process and get your values from the video).

  1. Make sure you have first performed a bed leveling calibration with the plate you will use for this process, the compensation will use the calibration data stored in the printer’s memory. If not, do it prior to launch the below process. You can of course just forget it if you only need your bed mesh data without compensation, just stop the print after the first pass.

EDIT: After triple checking, the results of the mesh WITH compensation gives an inaccurate result (the process without compensation is OK of course). The reason is that the printer will apply compensation relative to the position of the nozzle, not the position of the probe which has an offset compared to it (12mm in X and 32mm in Y on H2D and only an offset of 32mm in Y on H2S). So use you compensation results with a grain of salt (see below my tests, thanks @Gerrit ). Let’s just then trust that with compensation, your bed will be perfectly flat :blush:

  1. Copy the below gcode file on you USB key (replace .3mf by .gcode)
    Bed mesh hot.3mf (9.5 KB)

  2. Install your dial gauge (you need to remove the printhead front cover and slide the holder on the printhead).

Note: You can use the below Gauge holder (this is a modified version of the Master Gauge holder by @2B.MainPrints), this holder can also work on the H2S but the Gcode will have to be adjusted because of the offset difference in X. It will still work but the points positions will be off by 13mm in X compared to the bed leveling calibration positions (although not a major issue).
The GCode above is made specifically for the modified holder on H2D.

Gauge+Master+modified.3mf (238.6 KB)

The Gcode should work with the majority of the 50mm available dial gauge with a 8mm shaft but please check that when installed the gauge shaft protudes about 25mm from the holder (a couple mms off is OK).

Edit: Buy a 1/2" travel gauge which is what I use, if you have or purchase a 1" travel gauge (it will then protude ~38mm), I would suggest then to increase all Z12 values in the Gcode to Z25 to avoid the tip of the gauge dragging on the plate during measurements.

  1. Select the right nozzle, if the left nozzle is active go in the menu, select “nozzle and extruder” and click on “right”.

  2. Access your USB key on the printer, select the file and print.

  3. After homing, the gauge will probe the center of the plate and stay 10 seconds there, reset your gauge to “0” during this holding time.

  4. Record each value at each position for the first pass (bed leveling compensation OFF) then record again for the second pass (bed leveling compensation ON).

  5. Insert your values in the below table (copy it and paste it in whatever, notepad, excel etc). Top left value is the front left point of the bed, lower right value is the back right point of the bed so you fill the table top down, left right following the travel of the gauge.

0 1 2 3 4 5 6 7
0 0.15 0.12 0.13 0.08 0.03 0.04 -0.02 -0.05
1 0.05 -0.02 -0.01 -0.04 -0.05 -0.07 -0.11 -0.1
2 0.03 0.03 0.04 -0.01 0.02 -0.04 -0.08 -0.05
3 0.07 0.03 0 -0.03 -0.07 -0.05 -0.05 0.01
4 0.03 0.06 0.01 0.01 -0.03 -0.02 -0.03 -0.06
5 0.03 0.07 -0.01 0.03 -0.02 -0.04 -0.05 -0.07
6 0.03 -0.02 -0.03 -0.05 -0.1 -0.05 -0.06 -0.17
7 -0.08 -0.17 -0.17 -0.18 -0.14 -0.21 -0.24 -0.18
  1. Copy the whole table (the one with no compensation then the one with compensation) and insert it in the mesh data window provided on this web page:
    3D Printer Auto Bed Leveling Mesh Visualizer | ChillRain
    Note, you insert the whole table including the 0 to 7 X and Y-coordinates.

Edit: I tried without the 1-7 coordinates, only the values and it works fine.

  1. Click “Visualize” and voilà, you have your bed mesh plot (There is a download button at the top right of the plot to store it as .png on your PC or alternatively, just use printscreen.) :slight_smile:
    You can also move the plot around in 3D by (at least on my PC) holding the left key on and move it around with the mouse.

HAVE FUN!

Edit: video extract of the measurements in progress

15 Likes

Going to save and run on my printer. Thanks!

Philco you are good at these writeups and very helpful! Thank you! Now I just gotta buy one of these gauges.

Don’t buy a mitutoyo just one of those cheap digital one on amazon, accuracy will be good enough for this

Worked perfectly! Thank you!

Bed leveling compensation off

Highest point: 0.29
Lowest point: -0.02

Bed leveling compensation on

Highest point: 0.14
Lowest point: -0.14

With bed compensation my result looks pretty similar to yours.

I am currently struggling with the quality of my first layer. It pretty much looks like the visualization of the bed. Nozzle too close in the front area, middle and back parts look fine.
I already tensioned my belts, did a manual bed tramming using the gauge (with bed heated to 60°C during the tramming process) and performed a full calibration. But it looks like I should repeat the tramming and try to get the front of the heatbed a bit more down…

2 Likes

The highest being the center front it must be the screw on the front bracket under the bed being too tight, loosen it or remove it completely it’s just there mainly for transport

I had already loosened the screw a bit before but now removed it completely. It didn’t make a big difference. The front is still the highest part:

I will try to raise the back a bit and then print another first layer test.

Ran on H2S at 55C after offsetting the X positions and increasing Z height for my 1" indicator.

Interesting results, since this was done after tramming my bed. I wonder if I should adjust the back right corner.

Bed leveling compensation OFF:
High spot: 0.30
Low spot: -0.30
Range: 0.60

Bed leveling compensation ON:
High spot: 0.28
Low spot: -0.08
Range: 0.36

you definitely have the screw issue, remove it completely and retram

Screw issue?
Are you referring to the screw underneath the bed in the front/middle? I made it pretty loose to avoid problems, but didn’t completely remove it.

just remove it, then redo a bed tramming.

Thank @br1acc to have verified it also works on H2S with gcode adjustments :+1:. I will change the location of the post to H2 series but you might receive requests for the gcode :grin:

Here are the GCODE files I used for the H2S (rename .3mf to .gcode).
Anyone using this will need to replace the “Z30” command depending on the height of their indicator.

Bed mesh cold - H2S.3mf (9.5 KB)
Bed mesh hot - H2S.3mf (9.5 KB)

After removing the screw and tramming again…interesting result.

Bed leveling compensation OFF:
High spot: 0.44
Low spot: -0.07
Range: 0.51

Bed leveling compensation ON:
High spot: 0.13
Low spot: -0.11
Range: 0.24

This seems to be the least difference for all of the results in this thread reported by different people, and yet it is still more than a 0.2mm layer height (0.2mm being the most typical for the most popular 0.4mm layer height). The others reported an even higher difference. If that’s the best we can expect from the automatic bed leveling, doesn’t it seem almost like a miracle that any of us can get a perfect first layer test print using a layer height of 0.2mm? If the printing happens at those elevations, it seems like we’d be getting first layers with both over-extrusion and under-extrusion, unless the H2D were somehow dynamically adjusting the flow rate based on perceived extrusion back-pressure while printing. Right?

Frankly I’m not sure how it’s used while printing. Static measurements give the above or mine after compensation but when the head is moving I don’t see constant rotation of the Z leadscrews so there must be some algorythm on top of the static values because even with some value close to 0.2 I still have a perfect first layer.

This is mainly to be used if there are issues and the mesh shows the issues directly related to extreme low or high areas but otherwise best not to jump to conclusions just by looking at the mesh results and use it just for information purposes. If your first layer is good, best not to tinker with the tramming or use the mesh to overcompensate in the lowest and highest areas, if it’s good, just forget about the static results.

I started looking into tramming my bed / doing all these tests because I’ve been having issues since getting the H2S.

It seemed like no matter what slicer settings I changed, I had sharp edges/elephants foot on the bottom of my parts printed on the right side of the bed.
I originally thought it could be an issue with bed and nozzle temperature, elephants foot compensation, etc., but that wouldn’t explain why it was only happening on the right side.
Also flipped over the print sheet to see if the (high spot?) would move over to the left side.

Not entirely sure where to go from here since it seems like tramming didn’t offer any improvements.

That’s interesting. I just assumed it would. If the none of the z’s are moving, then instead of “proper” bed leveling, it must be picking some elevation between the high and the low and just sticking with that for the whole layer. And, similarly, if the difference between the high and low points is too great, then this approach would fail, since it’s not doing a proper bed leveling.

I had wondered why people would need to bother with tramming if it had functioning bed leveling, and now this would seem to explain why. . Maybe it should be called “pseudo” bed leveling instead.

Is this how bed leveling typically works on other 3D printers too? e.g. on a Prusa, or on a Klipper machine? Maybe with the printhead moving at higher speeds, there isn’t time to move a high mass bed up and down like you might expect from a theoretically pure bed leveling?

[Edit: doing a perfect first layer test just now, and even though I don’t see the z-screws moving, I definitely do see the bed moving as the printhead moves from one side to the other. It’s very clear on the camera. So, I guess it’s the springs in the bed that are evening things out. Maybe I’m lucky with my particular H2D, in that I do seem to be getting a very good perfect first layer test print after having dialed-in the right flow rate, better than what I was getting on my X1C even though the H2D build plate is larger.

Just a shot-in-the-dark, but for those who maybe haven’t been as lucky fresh out of the box, maybe consider the bed’s spring tension so that it has enough play up and down? I haven’t looked, but maybe there’s something in the wicki regarding that.]

I don’t see it moving but again a couple hundreds of mm may not be visible just looking at it. I don’t think it does it constantly but may be it just averages it out on the length of each particular path. I’m sure it’s done properly otherwise we will never get a perfect layer.

As for tramming, it’s only to place the bed in the best horizontal position compared to the movement of the head, it won’t correct the flatness of the bed. The springs are used only for tramming, when you tigthen the screws of the bed support, it locks the bed into place and the springs can’t move any longer

1 Like

People often attach little pointers to the rods so they can see bed levelling Z movement. I don’t know if any such model exists for the H series, but they were common on the X/P.