There’s no place like home

The guide for homing your printer could have been much shorter, but I’m hoping people use these guides to learn just as much as they do to accomplish something. I also could have made the guides 100x longer and gone in to much more detail, but I want people to actually read them instead of saying “this is way too much!”

We’re finally close… let’s slide in to home.


  • You have completed the sensorless homing prep guide and your printer.cfg matches how we ended the bed movement guide.
  • Know how to do an emergency stop in fluidd/mainsail so you can immediately stop the homing process if your stepper driver if needed. This will help prevent damage to the printer and motion systems.

Homing macro

The standard homing gcode command is G28. The issue with using the default command is the way THE 100 needs to home is different from the norm. This is because we use sensorless homing on all 3 axis, and because we use part of the homing process to ensure the dual Z motors are equal so that the bed is level.

To override the default G28 behavior, we have to add a few custom macros to our printer.cfg. I’m going to just include the macros and steps to install first, and later I’ll explain how they work.

Add the macro

Open your printer.cfg and scroll to the bottom. Paste the following below the last line


[gcode_macro G28]
rename_existing: G280
  G1 Z5 F200

[gcode_macro SENSORLESS_HOME_X]
    # Home
    G280 X
    # Move away
    G1 X{ printer.toolhead.axis_maximum.x/2 } F6000

[gcode_macro SENSORLESS_HOME_Y]
    # Home
    G280 Y
    # Move away
    G1 Y{ printer.toolhead.axis_maximum.y/2 } F6000

[gcode_macro SENSORLESS_HOME_Z]
    # Home
    G1 X{ printer.toolhead.axis_maximum.x/2 } Y{ printer.toolhead.axis_maximum.y } F6000
    G280 Z
    G1 Z0 F120
    G1 Z5 F120
    G280 Z
    G1 Z5 F120   # Make sure we clear the toolhead
    G1 X{ printer.toolhead.axis_minimum.x +5 } Y{ printer.toolhead.axis_maximum.y -2 } F6000

[gcode_macro SENSORLESS_DELAY]
    # Pause to ensure driver stall flag is clear
    G4 P2000

[gcode_macro M80]


Then click Save & Restart.

Your first home

The time as finally come to home for the first time! I would highly suggest two things before continuing:

  1. Restart Klipper to have a clean slate: 3 dots in the top right > Service > Klipper > Restart icon
  2. Manually move your printhead to roughly the middle of the gantry and slightly lower the bed just to give things the best chance of working right

Press the 🏠 All button in fluidd, or send G28 via the console. Be prepared to hit Emergency Stop if needed!

If all goes well then your printer should follow these steps:

  1. Bed moves down slightly
  2. Toolhead moves to the right until it contacts the frame. It then moves to the center of the bed.
  3. Toolhead moves to the back until it contacts the frame. It then moves to the center of the bed.
  4. Toolhead moves to the back of the frame again – this is done to avoid the bed colliding with it
    1. Note: If you’re using a modified bed that isn’t the original, you may have issues with the bed colliding due to the size. The proper fix for that is to use an actual endstop on the Z-axis.
  5. Bed moves down slightly, then up until it contacts the frame
  6. Bed moves down slightly again, then up until it contacts the frame again
  7. Bed moves down, then toolhead moves to the back left

Your printer is now homed!!


  • If your toolhead homes to the left instead of right, or front instead of back
    • If you completed all the steps required to ensure your motors move in the proper direction then this probably isn’t an issue. The direction it homes is controlled by the position_endstop settings in your printer.cfg and they ultimately don’t actually matter. If you followed my guide then they SHOULD be going to the right and to the back, but as long as position 0,0 is in the front left corner of the bed then it doesn’t actually matter.
  • If you encounter some other issue, please post about it in Discord

Now that your printer is homing correctly, let’s get the other components working. Or continue reading if you’re interested in what the macro does.

The macro explained

Coming soon. Focusing on moving the guide forward for now. Ping me in discord if this is important to you and I’ll work on it.