Bed Leveling / Tramming / First Layer Squish On Ender 3 Pro

I’ve spent the past few months learning bed tramming and leveling and thought I’d share this here since I’ve seen a few questions related to it.

After I got these three things settled, I was able to get really nice prints and consistent first layer adhesion.


The short version is, after I got my bed level, I still had issues due to small hills and valleys on the print surface. So then I used manual bed mesh. It worked pretty well but had human error and was only as accurate as my consistency with my manual measurements. It was a good 80-90% solution for free, as long as I didn't mind spending my time on it. Two weeks ago I installed a CR Touch and it has fixed both my nozzle to bed distance issue, as well as the bed surface imperfections issue.

You don't need the CR Touch to do the manual bed mesh. However I think having done the manual mesh for 2 months I am done with it. I've learned how my printer works and how the mesh works, and it's worth it to me to have the CR Touch both to save the time, and also because the mesh it makes is just better than what I can do.

Ok let me talk about what I’ve learned. I’ll turn this into a blog post later.
So for first layer adhesion there are three things that matter separate from the filament and gcode.

  1. The distance between the nozzle and the bed.
  2. Is the bed level relative to the X axis.
  3. Dealing with imperfections in the bed (if it’s not perfectly flat...and whose bed doesn't have either a dip or a hill)

For nozzle distance : If the nozzle is too far, it won’t stick. If it’s too close, it may block the nozzle from extruding filament and for my Ender 3 Pro, dig into the magnetic bed. With a harder surface, you can damage the nozzle. With a softer surface you damage the bed. And if the distance is just right, you get a nice first layer.

But it’s not enough to have it the right distance at just one corner.

Second is leveling the bed relative to the X-axis, across the entire bed. This is where tramming all 4 corners, so that at each corner, the bed is the same distance from the nozzle comes in.

EXCEPT…that’s not a guarantee of a perfect first layer. Because, the distance you need to be is within about .1 millimeter to get the right level of squish, and if the bed has variance due to dips or hills - you will get portions of your bed where it may not stick, or where it over squishes or digs into the bed, even if your bed is perfectly level.

So this is the third, and most difficult one - ensuring your printer handles imperfections and variation of height in the bed. A lot of folks have noted that they have either a small dip or a small hill in the middle of the bed. I have a hill in the middle of mine, about .2 high. You can see an image in my post.

Dealing with Imperfections - Using a Mesh

So, the solution here is to create a mesh which is a series of points on your bed, where you essentially measure the variation in the bed, and then the software adjusts the z height ever so slightly.

I was doing this with a manual mesh, and I was getting pretty good results. There are two problems I had with the manual mesh. First, it was super time consuming. I was doing a 7x7 mesh due to the number of dips and valleys in my bed, and it would take me at least 10-15 minutes. I could save the mesh, but if I changed out my bed surface, or if I re-leveled my corners, I would have to redo it.

Second was just accuracy. The fact is, with manual leveling and trying by feel on the piece of paper, if I was doing 49 points, I wasn’t always accurate. I could see this in my manual mesh when I did a couple in a row - I got exactly the same values on about half the points, but the other points went up or down a turn or two of the knob. And when I printed I could see it also, where sometimes I realized I had done a poor job on a couple points in the top left or top right and for smaller prints I ended up avoiding those areas, until I was motivated to redo the mesh.

So, what did I do about it. I used the manual mesh for about 2 months and a couple weeks ago I switched to the CR touch one of my recommended 3D printer accessories.


I am really pleased with the CR Touch. It replaces the z-limit switch, which means it matches the nozzle distance to the bed based on the z-offset, not based on the sprint tension. If I level the 4 corners relative to each other, now that I have set my z-offset, I get a perfect squish every time even if my bed raises up slightly due to the springs expanding.

The consistency is obviously better since it's basically a robot. It slowly lowers the probe to take 3 measurements at each point (for 147 measurements total with my 7x7 mesh).

And because I’m not doing it manually, I don’t mind redoing the mesh all the time. I can heat up the bed (never do the mesh on a cold bed - the bed is going to expand when heated) and set CR Touch to go create the mesh while I’m working on a model, or slicing, or just taking a break and then when it’s done, I store settings and I print.

You can see the mesh it created, I’m attaching it to this post. I know other folks run the automated bed leveling before each print. I am running my mesh about half the time.

Installation Notes

Just to close out installing it. Install was straightforward for me since I have a 4.2.2 board - I just plugged it into the dedicated bl touch port, used the mounts to install it next to the hot end, and plugged the wires in. Then I flashed the Firmware I built because I knew I needed 7x7 mesh (which I can share with you if you have a 4.2.2 Ender 3 Pro) and it was set up. I think total install time was about 15 minutes not counting the time it took me to build my own firmware. If I hadn't built my own firmware, I could have used the prebuilt firmware.

You can see more details here: Setting up CR Touch On Ender 3 Pro

Back up to Tramming Using 4 Corners LCD Screen Marling