How to Calibrate the Ender 3 Z-Axis Offset (Z Offset) Value?

Out of all issues that can occur during the 3D printing process, the problems that are related to the first layer of the print in some way are usually the most common, whether it’s weakness in the adhesion between the plastic and the print bed or warping that deforms the model you’re printing.

This is primarily due to the first layer being arguably also the layer that is most challenging to get right, as the interaction being slightly different due to it taking place between the print bed and the nozzle and it essentially serving as the foundation for the rest of the print requires the first layer to be perfect.

In today’s article, our topic will be the process of calibrating the Z-axis offset for the Ender 3, which is one of the essential parameters to configure for a successful first layer as it directly determines the spacing between the nozzle and the print bed when the 3D printer is at the home position, deciding where the first layer starts.

So, how can you calibrate the Z-axis offset (Z offset) value of your Ender 3?

In a nutshell, calibrating the Z-axis offset of your Ender 3 is all about setting it to the value that allows the size of the gap between the nozzle and the print bed to be roughly equal to the thickness of a piece of paper when the printhead is located at the zero position for the Z-axis.

Next up, we will be diving into the process of calibrating the Z-axis offset value for the Ender 3 in greater detail, find out how to modify the Z-axis offset value once we have the new value at hand, troubleshoot the issue of the Z offset change not working, and finally, quickly look at the differences between the Z offset and the Z probe offset parameters.

How to Calibrate the Ender 3 Z-Axis Offset (Z Offset) Value?

Precision is paramount when calibrating the Z-axis offset value, as even a slight error can cause the gap between the nozzle and the print bed to become either too large, causing the 3D printer to print in the air, or too little, causing the nozzle to scratch the print bed.

Below, you can find a detailed step-by-step guide that you can follow to calibrate the Z-axis offset value of your Ender 3 correctly:

  1. Preheat the nozzle and the bed using the built-in functionality in the Ender 3 menu. (Prepare -> Preheat PLA)
  2. Home the axes of your Ender 3. (Prepare -> Auto Home)
  3. Disable the software endstops to make it possible to go down to negative Z values if necessary. (M211 S0 G-code command)
  4. Place a piece of paper on the print bed, positioned right below the printhead.
  5. Navigate to the Move Z menu. (Prepare -> Move Axis -> Move Z)
  6. Click the Move 1mm option, and slowly bring the nozzle down until it gets very close to the paper by rotating the knob.
  7. Go back, click the Move 0.1 mm option this time, and bring the nozzle to a point where the nozzle slightly limits the movement of the paper but does not entirely restrict it.
  8. If the Z position you have found is between -20 and 20, move on to the next section of the article; else, keep reading this section.

As Marlin firmware does not allow the Z offset value to be larger than 2 centimeters in either direction, in cases where you can’t correctly position the nozzle relative to the print bed with a Z offset value within this limit (-20 to 20), you will need to perform some adjustments to the positioning of the endstop.

Below, we have listed the steps that you will need to follow to reposition the Z endstop and get it closer to the print bed:

  1. Turn off your Ender 3 and shut off the power supply.
  2. Loosen the bolts of the plate that hold the Z endstop at its current position.
  3. Slide the Z endstop up or down to position it at a place where it’s slightly higher than the print bed, where the printhead is able to trigger it without the nozzle making contact with the bed. You can easily test this by moving the printhead with one hand while holding the Z endstop plate in its place with the other.
  4. Tighten the bolts of the Z endstop plate to fix it at its new position.

Once you have brought the Z endstop closer to the position of the print bed, you can go through the calibration process again, where you will be able to correctly position the nozzle relative to the print bed with a Z offset value that does not exceed the 2 centimeter limit of Marlin.

How to Change the Ender 3 Z-Axis Offset (Z Offset) Value?

Once you have obtained the Z-axis offset value you would like to use, the next step is to modify the Z-axis offset parameter and replace the old value with the new one, which you can do in a few different ways, depending on what comes easier.

Below, you can find sub-sections for each of the methods we recommend utilizing to change the Z-axis offset value of your Ender 3 as conveniently as possible.

Using the Ender 3 LCD Controller

Using the LCD controller of your Ender 3 is likely the most convenient way to modify the Z-axis offset value, as you can conduct the entire process through a user-friendly interface.

Below, we have listed the steps you can follow to set the Z-axis offset value with the LCD controller of the Ender 3:

  1. Skip to Step 5 if the printhead is already located at the position that you have found as a result of the calibration process in the earlier section.
  2. Navigate to the Prepare section of the Ender 3 menu.
  3. Navigate to the Move Axis section, and choose the Move Z option.
  4. Move the nozzle to the position that you have noted in the previous section by utilizing a combination of the Move 10mm, Move 1mm, and the Move 0.1mm options and rotating the knob as necessary.
  5. Navigate back to the Prepare section once again.
  6. Click the Set Home Offsets option to set the current position of the printhead to be the new zero position.
  7. Navigate to the Control menu.
  8. Click the Store Settings option to save your changes to the EEPROM permanently.

Using the M206 (Set Home Offsets) G-Code Command

Utilizing the M206 G-code command is one of the two methods that you can use to set the Z-axis offset of your Ender 3 with G-code, which allows direct modification of all the home offsets (X, Y, and Z) whenever necessary.

To set the Z-axis offset with the M206 G-code command, you will need to pass the Z flag along with the M206 command, which is the flag for setting the Z-axis offset, followed by the value that you would like to be the new Z-axis offset.

To find the value that you will need to use here, all you will need to do is to switch the sign of the value that you have taken note of when performing the calibration process in the earlier section.

For instance, if the Z position you ended up at in the previous section was -2.5, your Z-axis offset value will be 2.5. Similarly, if the value you found was 2.5, the Z-axis offset value would be -2.5 instead.

To make things clearer, let’s go through an example, assuming that we ended up at Z-3 as a result of the calibration process, which is where the distance between the nozzle and the print bed turned out to be roughly equal to the thickness of a piece of paper.

In this case, the G-code command we should invoke is as follows:

M206 Z3

As you can see in the example, we have passed the Z flag to the M206 G-code command, along with the value of 3, which we have found by switching the sign of -3, the Z position that we arrived at as a result of the calibration process.

Once you’re through, remember to use the M500 (Save Settings) G-code command to permanently save the modifications to the EEPROM.

Using the M428 (Home Offsets Here) G-Code Command

Finally, the last method we recommend for setting the Z-axis offset value is to utilize the M428 G-code command, which is essentially the command that gets triggered in the backend when you invoke the “Set Home Offsets” command in the LCD controller.

Using the M428 G-code command to set the Z-axis offset is pretty straightforward, as all you will need to do is to position the printhead at the correct location (according to the calibration process we have gone over in the earlier section) and invoke the M428 G-code command without the need for any parameters.

After running the M428 G-code command, the last step you will need to take is to make the modifications permanent by saving them to the EEPROM, which you can do by invoking the M500 (Save Settings) G-code command.

Ender 3 (Pro/V2) Z Offset not Working – What to Do?

In some cases, the new Z offset value that you have set may not be in effect due to various reasons, which creates a scenario where it seems like the 3D printer is ignoring the Z offset value altogether.

The most common culprit behind the issue of Ender 3 Z offset not working is the value not being saved to the EEPROM, which causes it to be lost once the Ender 3 is power cycled, which causes the Ender 3 to utilize the Z offset value that existed before modification.

To make sure that there are no issues present related to the Z offset value being correctly applied once you start the 3D printing process, we recommend setting the Z offset value first, saving the modification to the EEPROM (Store Settings in the LCD controller), and only starting the print afterward.

Even though it’s the most common one, it’s also worth mentioning that the Z offset value not being saved is not the only potential culprit behind the issue of the Z offset not working correctly with the Ender 3, with some other problems also having the capability to be responsible.

Below, you can find a list of the additional problems that can contribute to the issue of Ender 3 Z offset not working correctly, based on what we have encountered so far:

  • Incompatible firmware
  • Bugged or corrupted firmware
  • Incorrect firmware configuration
  • Usage of Z Probe Offset instead of Z Offset
  • Attempting to set the Z offset to a value that is outside the 2cm limit that Marlin firmware enforces

Z-Axis Offset (Z Offset) vs. Z Probe Offset – What Is the Difference?

Even though the Z-axis offset and the Z probe offset sound pretty similar at first glance and have very similar purposes, they are actually two different parameters with two distinct purposes that get mixed up often and create issues for the 3D printing process as a result of the mix-up.

The Z-axis offset parameter is responsible for specifying the distance of the true Z0 position (where there is no gap between the nozzle and the print bed) relative to the Z home position (Z endstop position), whereas the purpose of the Z probe offset parameter is to determine the length between the nozzle and the pin of an automatic bed leveling probe, such as the BLTouch.

While both of these parameters are practically utilized for the purposes of correcting the nozzle’s position relative to the print bed and, as a result, calibrated by using the same method, they serve distinct purposes.

To clarify, we can say that the usage of the Z-axis offset is suitable in scenarios where an automatic bed leveling probe does not exist, and the use of Z probe offset is appropriate when an automatic bed leveling probe, such as the BLTouch, is utilized.

As both the scenarios of configuring the Z-axis offset with a BLTouch or adjusting the Z probe offset without one will cause the Z offset value that you have set not to be considered by the 3D printer, it’s vital to ensure that you’re modifying the correct parameter.

Wrapping Up

While the process of calibrating the Z-axis offset value of your Ender 3 can be a bit of a challenge due to the high precision requirement and the adverse effects that will take place in the case of a misconfiguration, some patience and attention to detail are all that is required to find the perfect value in most cases.

To quickly recap, as the purpose of the Z-axis offset value is to compensate for the inconsistencies in how the Z endstop is positioned relative to the print bed, the calibration process is practically nothing more than finding the position where the nozzle and the print bed are close enough to each other, with only a distance that is equal to the thickness of a paper separating the two.

Once you have the correct Z-axis offset value at hand, all there is left to do is to replace the current Z-axis offset value with the new one you have calculated and permanently save it, which will ensure that the nozzle of your Ender 3 is always correctly positioned when the printhead is at the zero position.

Happy printing!