Precise Z Calibration Procedure

Hey guys, I just wanted to share the procedure I use to precisely calibrate my Z axis.

All you’ll need is a Z probe and a metal block of known dimension. I use Universal Gcode Sender for this.

Lower your bit to just above your Z probe. Use the probe command (example: G38.2 Z-5 F1) to probe down to your Z-probe. In my case, I use precision ground, hardened steel “1-2-3” blocks.

Without raising the bit, reset the Z axis zero by hitting the Z0 button in UGS.

Now, raise the bit a little higher than the height of your known object. Place the known object on top of your Z probe block. Again, I use a precise 1-2-3 block here.

In UGS, repeat the probe command from earlier. Once the machine shops, read the current Z postion from UGS.


Now, send $$ in UGS to get the current configuration. In particular, we are looking for the value of $102. In my case, it was set to 49.909.

Now, I use a Z steps calculator to calculate your corrected Z steps value. In my case, my known distance is exactly 3 inches. The distance my machine thinks it moved was 2.990 inches. The calculator returns a corrected steps/mm value of 49.743.

Back in UGS, send the corrected value as $102 = XX.XXX


Repeat this procedure to test your new value.


This procedure can also be adopted to calibrate X and Y movement, but it is a little trickier because the probe block (bottom block) needs to be secured to the waste board to prevent it from moving slightly when the bit contacts it.

Hmmm almost like there was a post just like this not too long ago…

Maybe I miss read it, but I didn’t see a procedure for calibrating the z-axis in that thread anywhere.

Both of those posts I describe exactly what you’re doing…EXACTLY.

Is it as detailed? No. Are there pretty pictures? No. But the steps to do it are there. Do I actually care that you did this? No. You’ve got enough time/energy/whatever to do all these things and, frankly based off that other thread, there’s a potential market for someone with enough time/energy/motivation to do this. I don’t. I can participate in theoretical discussions to better ideas and try to offer insight but execution, unfortunately I don’t have the time/motivation for it.

that wasn’t my point in posting a link to that thread. There’s already been a lot of good discussion over there and I didn’t want it to get lost and/or recreated.

1 Like

You are absolutely correct, those posts do describe the same procedure. I apologize for my lack of research. Thanks for helping provide more context and clarity.

I also just stumbled across this video from 2015 showing the same thing:

Yep. Looks like it’s pretty much the same procedure that you’re copying :wink:

the entire point of my post was to not have multiple recent threads discussing the same topic. I think your procedural steps would have been the PERFECT way to revitalize that thread and MAYBE kick people into gear for the automation of the process. Instead of a new topic that just dilutes search results.

That’s it.


Having a problem getting this calibrated.

Im Using
2- 123 blocks, both are 25.40 mm
UGS Platform

Gcode for zeroing Z
-G91 G21 G38.3 F100 Z-10; G10 P0 L20 Z25.40; G01 F100 Z2

I have this macro’d. The Z in second line sets my 1st Block height I am zeroing too.

So, I set zero then without moving the bit reset zero. Jog up and add my second block and rezero
So the movement is 27.40mm
I do a $$ and get my current $102 which is at 81.460
I go to the calculator plug in the numbers get 87.874

I change my Z travel my setting $102 = 87.874

Rerun the test. get the same 27.40 travel every time. I have run this 5 times. No clue why i am off a consistent 2mm every time

Sorry, Gcode is
G91 G21 G38.3 F100 Z-10; G10 P0 L20 Z25.40; G01 F100 Z2

I by mistake typed in a -before G91

Hey Michael -

So, your code is resetting z to 25.4, then raising 2mm, which is why you are consistently showing exactly 27.4 mm.

I would remove the last 2 lines of the macro (keep just the probe command), and perform the other steps manually. You should only reset the Z zero after the first probe, so to perform this procedure with macros you will need 2 different macros - the first one probes and sets zero, the second one only probes (cannot reset zero)

Try this:

  1. Put 1st block in place
  2. Macro 1: G91 G21 G38.3 F100 Z-10; G10 P0 L20 Z0; G01 F100 Z28
  3. Put second block in place
  4. Macro 2: G91 G21 G38.3 F100 Z-10;

Thanks Luke, will give it a shot with those commands

1 Like

Again thanks Luke, Just ran some simple probe code and now im reading 25.39. Im only .01 out which i think i can live with.

1 Like

Luke the XY idea is great!

in fact if you order 123 blocks with holes, should be easy to secure down. My only question is will it be accurate enough for long travels?

Hello guys, im feralry new on CNC, and I have a few doubts:

1.- Does te thickness of the waste-board changes the calibration process?
3.- Is the X-Carve easel software calibrated for a precise thickness of washboard?

Did you come right, I have same problem, if you maybe can help