Setting Z Home Offsets


My nozzle doesn’t get close enough to bed which results in a poorly formed first layer. I went through the instructions in this guide:

I determined my offset should be .5mm, which is where the nozzle started grabbing the paper. I set it in the eeprom and double checked it was there. When I go to print though the nozzle still doesn’t get close enough, it’s like it’s not obeying it. Is there something else that is preventing the nozzle from moving that far down?


Last night I tried several different methods that I had found googling around.

  1. Setting the Z_MIN to -0.5
  2. Setting the Z offset from the default 11 to 10.5(I even tried 11.5) via the LCD(I think this the same as the Z_PROBE_OFFSET in the Configuration.h)
  3. Setting the Z offset via M206 command to -0.5

None of them work. They just gave the same results as the original settings. The problem seems like the probe is registering too high, which causes the nozzle to end up too far from the bed.

Is there another method to account for this?


There’s also a way to set the z-offset in your Gcode. I’m not sure if this overrides what you have set on the printer itself. But it’s worth checking out your slicer settings.


Thanks CJ1

This is the only way I was able to get the nozzle closer to the bed. I used the global offset in S3D, but I had to disable MIN_SOFTWARE_ENDSTOPS in the firmware in order to let the nozzle go negative. I’m not really comfortable with doing that but it’s the only way that seems to work.


When you changed the Z offset in the LCD control did you hit Store before trying?

If the Store function is not working you have to check the eeprom settings in the firmware and re compile.

// @section extras

// The microcontroller can store settings in the EEPROM, e.g. max velocity...
// M500 - stores parameters in EEPROM
// M501 - reads parameters from EEPROM (if you need reset them after you changed them temporarily).
// M502 - reverts to the default "factory settings".  You still need to store them in EEPROM afterwards if you want to.
//define this to enable EEPROM support

  // To disable EEPROM Serial responses and decrease program space by ~1700 byte: comment this out:
  #define EEPROM_CHITCHAT // Please keep turned on if you can.


I did store the settings when I changed it via the LCD. From what I’ve learned that that zoffset does is set the z home position above the position that measured from the probed zero point. The problem that I’m having is when the printer probes for the zero point, that point is too high. So when I set the offset to a different value, it homes to that value and then when printing it goes back to zero which is too high. I’m guessing the problem is probably with the probe.


Would you know where the code is for the homing procedure? Maybe the zero point can be modified there. Just a thought.


What firmware are you using?

Is your machine Wilson II with micro switch or another?


I’m using marlin 1.1. Yeah the machine I have is a mostly stock Wilson 2 with the micro switch with the rack.


It is unlikely to have to adjust the code, as thousands of printers are running this code - so unless yours has a some totally unique problem then you should be able to make it work.

From your console:

  • G28 Z
  • M851 z-20
  • M500 (store settings - not 100% sure this is needed.)

(Be careful at this point it it entirely possible to crash into the bed.)

  • G28 Z
  • Move down in 0.1mm increments. (I use the motion controls on octoprint, not sure of the gcode).

Once it just grips the paper then you need to adjust the z offset as needed.

New z offset is -20+current Z height
I.e. if Z height = 9.3 then z offset is 10.7

  • M851 Z-10.7

  • M500 - store settings

  • G28 Z

  • G0 Z0 finger on power button just in case, check height when done, it should be in the ballpark, you might need to fine adjust with first few prints.

Remove all other z offsets from slicer.


Thanks for the info. I tried this but my nozzle won’t go lower than the 0. When I run G28, it sets a 0( or Whatever you have Z_MIN set to) at where the probe contacts the bed and it won’t go lower than that unless you disable that in the firmware. The 0 point that gets set during G28 is way too high. I’m not sure how far above the bed surface this 0 point should be, I’m guessing around a papers width, but the 0 point that gets set on this machine is around .6mm plus a papers width above the bed surface. So I’m thinking the problem is something width the probe and how the 0 point gets set.


The m851 tells the software where the nozzle is in respect to the probe. Setting it to - 20 means that when the probe hits, the software will set that point to z=20

I’d say you have inadvertently set something else which is causing this behaviour, can you re download marlin and start your settings from scratch?


I was able to solve this problem by removing the lever from the z-axis probe switch. Apparently it was bent or twisted or something, it doesn’t take much. When I removed the lever then it registered a bit too low, which then could be corrected with the zoffset since and doesn’t require disabling the MIN_SOFTWARE_ENDSTOPS. Thanks for your help with this.