Setting home positions


I’m from 3d printer world, new to CNC and I’ve built an MPCNC.

I figured it needed some end stops but I am getting varied info about that kind of thing, apparently you can tell RAMPS to just make any arbitrary place a ‘home’ location. Where is that saved during a power cycle? Also, is it possible to use the LCD controller to set up these home positions or must it be done in Repetier? I tried homing and the first thing that happened was the z axis tried to unscrew itself (no end stop for it) so I just powered down. I tried setting the ‘home’ position in the LCD menu and an error message came up saying something like “home them first” and it felt a bit like a catch 22. I’m asking here because the information that I could find about this particular machine and setup seemed a bit light. Is Estlcam and Repetier about the same thing for CNC usage? Is it possible to work headless (just with the SD card)? Where’s a good place to start filling in the knowledge gaps between where I am now and drawing a crown?


I want to know too. It seems where ever it ended, that’s x0y0z0 home the next time. It would be nice for one place to always be home and then set the ZS for the thickness. I’m watching this for the answer.

Next is figuring out how to get my image files to carve. Two days and zip.

I don’t use it so my memory might be foggy, but I believe G92 X0 Y0 Z0 will “set” the home position.


I used to use a ruler to square up all 4 sides until I printed some spacers that clip to the conduit. I use several different size spacers depending on the tool/mount I’m using.

How does the Gcode know where the motors are if you don’t use some reference position for plotting or carving for example? If I have a sharpie and I want to draw a picture on paper, I would need to manually set the z height such that the sharpie would be touching the paper, and the ink would bleed into the paper and make a big dot on the work piece so it would be necessary for the software or the hardware to know where the sharpie is so it could begin in the air and then move to the work piece only where the ink will go.

more than anything else, i’ve had these endstops for 2 years and only today have I plugged them into RAMPS and they don’t stop the motors. bit of an anticlimax but that’s where the learning is.

When you turn it on, that is zero, if you move it around by hand before issuing the start command it is still at zero.

In CNC where you screw your material down always changes, the thickness (Z=0) is always different. End stops and homing add significant complexity to your jobs. If you look at the crown page it say where you start your machine is zero.

If you back up and think about homing you have to first home (which means deciding where 0,0,0 is) then you have to tell the machine to move to your material (where that may be) then start. You can skip all of that by putting the bit where you want it to start by hand and just hitting go. You should always be surfacing (so you know where Z zero is), and you typically never use a factory edge so who cares is X or Y is not at exactly 0.


So you picked the only example where this takes one extra step. I propose you home it to an object of a know thickness and tell you CAM to use a cut depth of that thickness. Still less work than end stops and they will still result in you getting a dot as it homes Z.


In what way, they are not emergency stops (unless you change the firmware, I highly suggest you do not do that), They are only active during a G28. All my firmware have the end stops enabled for homing.

Prior to the dual endstop firmware upgrade, Ryan didn’t recommend endstops (at least for x and y) for the MPCNC and relied on the squareness/quality of the build to get things right. Which meant “dead reckoning” was the only way to get a reference (home is where ever you tell the machine to call home).

For automatic homing with endstops to work (well, that is), you’ll need the correct firmware and your MPCNC wired for dual endstops and individual stepper drivers (no motors wired in series or parallel). The latter is why some boards can’t support dual endstop firmware (not enough stepper drivers).

I recommend reviewing Ryan’s writeup and videos on dual endstops on this site.

Great to get feedback, thanks.

I wanted to have at least a couple origin endstops for potential 3d printing or for repeatability for plotting registration for example. Using a multimeter, i found with these 3 pin endstops it seems that red + signal are the NC pins. There are others who use this type of mech end stop:

without modifying Marlin, these endstops didn’t stop the movement of the motors from Repetier manual or the Discount LCD move axis menu. I guess I could just switch to a regular mech endstop without the Reprap-osity, but the reason they’re not working has got to be something simple since at least a few dozen people use them on their MPCNCs.

Mechanical end stops don’t need power. I have no clue why they sell them on attached circuit boards other than to charge people more money. I’ve been running single end stops on my mpcnc for almost as long as I’ve had one built. I have stops on one end of the axis, and a physical block on the other end. You don’t need end stops, but I find it helps with too changes. Now for why you don’t need a known zero point. Most of us are used to 3d printing, where we need to know pretty absolutely where the machine’s bed is, and it’s shape. This makes sense for additive manufacturing, otherwise the filament would never stick to the build plate. For subtractive manufacturing that isn’t as much of an issue. Like Ryan said, we’re going to machine most of the edges and top anyway. As long as we stay inside the area of our work piece zero can be “close enough to here”. Now with that said, tool changes makes things more difficult without a resetable zero. That’s why I have single end stops on my mpcnc. Is it as accurate as the dual end stop firmware? Probably not, but it’s good enough for the girls I go out with.

I do think the “red kind” of mech end stops are ‘premium’ but they have an integrated capacitor and a nifty led that turns on when the switch is engaged. cmon everybody needs one of those, shame it’s just a regular single color LED and not a RGB strobe.

1 Like

ok, for some reason the endstops are working when i used the “home X and Y” in custom commands within Marlin, but the they do not work when moving axis in the LCD menu or Repetier manual. is that normal?

It is normal for endstops to be active only for homing. There is an option to enable “soft limits” where the machine will disobey commands to move outside its work area. There is also an option to enable limit switches while processing a job. MPCNC firmware has both off by default.


1 Like

Aha, thanks for that, mind blown. … Since i don’t know if it’s going to be used as a 3d printer in the future or not, would it be a bad idea to enable those limits? For some reason my endstops are now working with Repetier Host and homing seems to be working (except I have to make a z probe). Weird but I’m thankful.

So I just setup a new Primo MPCNC. I’ve got the Rambo board and LCD hooked up and working, no end stops. I thought I should be able to (using only the LCD menu) move to a certain spot, issue G92 X0 Y0 Z0 and then when I say Home X, Y or Z, it would return to this position. Instead, homing always makes it go all the way to 0 and then it tries to keep going causing self destruction. I have to unplug it so that it doesn’t hurt itself. Am I missing something here? Shouldn’t this work?

Homing is part of the firmware. When you execute a home instruction, you are telling the machine to move towards the bottom left until switches are triggered. It is possible to to get the functionality you want in a couple of ways. First, you can add your own g-code file to your SD card that does your version of home. So you can just put something like this in a file:

G0 X0 Y0

If you want to home all three at the same time, you might want to be a bit more careful. Something like:

G0 Z15 F480
G0 X0 Y0
G0 Z0

This will lift the router up 15mm above your 0 point before moving the XY to reduce the chance of running the router into clamp or the stock.

Whenever you want this functionality, you can just execute that g-code file.

Note that if you are using the V1 Custom menu to home your router, and you are comfortable flashing firmware, you can edit this menu to do whatever you want, including the functionality you specify.

This is the section in configuration_Adv.h that handles the custom menu:

 * User-defined menu items that execute custom GCode
  #define CUSTOM_USER_MENU_TITLE "V1 Custom Menu"
  #define USER_SCRIPT_DONE "M117 User Script Done"
  //#define USER_SCRIPT_RETURN  // Return to status screen after a script

  #define USER_DESC_1 "Reset All Coordinates"
  #define USER_GCODE_1 "G92 X0 Y0 Z0"

  #define USER_DESC_2 "Home Z Axis"
  #define USER_GCODE_2 "G28 Z"

  #define USER_DESC_3 "Home X&Y"
  #define USER_GCODE_3 "G28 X Y"

  //#define USER_DESC_4 "Heat Bed/Home/Level"
  //#define USER_GCODE_4 "M140 S" STRINGIFY(PREHEAT_2_TEMP_BED) "\nG28\nG29"

  //#define USER_DESC_5 "Home & Info"
  //#define USER_GCODE_5 "G28\nM503"

You can edit this to modify or even add functionality. For example, “G28 X Y” could become “G0 X0 Y0” to get the functionality you are looking for.


As I understand it – no. Homing is a distinct operation designed to square the machine and isn’t based on any coordinates. Homing will run the motors until the endstops are triggered and then stop. There is a max amount of movement (defined in the firmware) for homing. Also, the endstops are only used for homing. Triggering the endstops during normal operations of the machine will have no effect.

1 Like

My build will think x home is in the center, I thought it was fixed by setting it with pronterface and storing my settings but the next time I turned the board on it was back to the center. Any thoughts?

I have only used a rambo board using marlin so my comments are relevant to that board/firmware combo.

When you turn on the board the firmware always thinks that its at 0,0,0 (x,y,z) no matter where it happens to be. I think this is the correct behavior because even if it remembered where it was when it was powered down it couldn’t possibly know if it is the same physical location on power up.

If you have the end stops and use the Home X,Y function it will move the x,y motors until the end stops are triggered and then it will set the location to 0,0. But this is not terribly useful unless you put your workpiece at this exact location. It is useful to “square” the machine but not so much for location.

The way I work is

  1. Attach the work piece to a convenient location on the spoil board
  2. Power on the board and Run the Home X,Y function
  3. Jog to the lower left corner of the work piece. If I need to run mutiple gcodes for the job I will write down the current location so that I can always jog back to the exact same location
  4. Tell marlin this is now 0,0 (x,y) by running a custom gcode that set the X and Y to 0.
  5. I attach the z-probe and run a Home Z and set the top of the work piece to be 0.
  6. Detach the z-probe
  7. Now I can run my gcode.

There are a few steps involved but they are pretty simple. The longest for me is is jogging to the lower left corner. The steps can be somewhat automated in various cam programs to make it easier.


If you don’t have endstops you can replace step2 by moving each axis against a hard stop and powering on the board. This will be essentially the same thing

1 Like

Do you run with software limits off? When this happens I am unable to jog x less than zero. Even if it boots near the end stop it’s home is in the center. Maybe there is an offset in the firmware. Thanks for your reply.

I run the stock v1 firmware with Estlcam and its been a while since I set it all up – but I don’t recall turning off software limits. But I do agree that marlin will generally not allow you to run into negative space. The way I think most people deal with this is by either homing with endstops or moving the the axes to hard stops before powering on the board.