Auto-homing without setting origin?


I’m nearing the end of my MP-CNC build. It’s worth reiterating what everyone else is saying: this is a fantastic project; thanks so much for sharing. I’m starting to think about the electronics

I plan to manually set the spindle origin according to the corner of the area I want milled (as it would be a pain to accurately line up stock each time). However, I’d like semi-automated and repeatable tool changes, ideally without having to manually line up again each time. I’ll be using the LCD screen so the less I have to fiddle with little buttons to jog the head around the better. After initial experimentation I plan to add end-stops and a z plate.

So I was thinking, for a tool change, I’d like to: lift the head, stop the spindle, move to a position to change the bit, then pause.
On resume: re-home the spindle, start it, then return to the last milling position to continue. This should be fairly straightforward g-code.

I am wondering however what g-code would be needed on job start in order to calculate the home position offset from the origin? G92 or M206? Can current x/y/z positions be used as inputs to these commands?

Hope I’m not over-thinking this. As steppers can be left energised during tool changes, the z offset is the only really important one I guess.

end stops for milling will be problematic, unless you make them movable. you can use your software to jog the system around, since the lcd can be a bit hard to get it jog one step at a time. you will have to reset the z on each tool change, unless all your endmills are exactly the same size. it would be easier to set zero then line up your piece if you are only using sd card. endstops on a mill will screw up your toolpaths if you dont remove them after the milling starts. when it comes to printing, however, endstops are almost a neccesity.

and as far as auto-homeing is concerned, youd need to have all 3 endstops in use in order for it to work. now you can use the lcd to set home and it will return to that position automatically if you use the home command (not autohome)

The difference in mill height is why I thought the automation would be helpful (I see other people use blocks to achieve the same thing, but I thought I’d rather spend time up-front on accuracy than have to do it on every cut). Hoping not to have a laptop connected once set up.

I see what you’re saying about the tool paths, but I was hoping to have the stops right at the start of the X & Y axes (they would be moveable, with a touchplate for z, but for the most part kept in the same place regardless of the position of the workpiece).

So to start a piece, I would clamp it down, then set the tool manually to my origin – say the top lower left corner of the workpiece. This will likely be somewhere in the middle of the work area, well out of the way of the end stops, so tool paths should not trigger them.

Why can’t the head then auto-home – finding the end stops and finding z on the touchplate. But instead of setting this as (0,0,0), it would simply remember where this was in respect of my origin – for example X:-100, Y:-80, Z:-10.

Then when it comes time to change the bit, it doesn’t matter if the new mill is a different height, or if I accidentally shift things – it can find home again, and from there, it would know that my origin is at +100x, +80y and +10z from its current homed position, since the workpiece hasn’t moved with respect to the home position.

Does that make sense?

If so, I’m not sure how to generate g-code to achieve that, since it appears to be stateless (no facility to “remember” saved positions).

@John Wells That is a cool idea. The arduino does have an eeprom, so a value could be stored there in case of power failure or something. Someone would have to write the code, but we have a couple of coders on here. Maybe one of them would be interested.

I currently use movable endstops, which work for milling but are problematic. If I forget to move them after setting the zero points, they ruin the cut, and I do forget them at times.

This would make having some permanent endstops really useful.

After thinking about it for a while, I think that there could be a problem if you had a tool change, since the z zero would probably be different. So what should probably happen is when activating this function, the machine should return to its recorded x-y zero, but then run a z-zero touch off to reset the z.

Hey guys I am also considering a similar setup. I want to be able to home the X and Y and manually set the Z. Once the X and Y home I will manually jog the machine to a +X and +Y to a location that I have set with a couple of dowel pins and then manually set the Z. The question that I have for all of the experts is. Is there a way in the firmware to tell it to home only the X and Y and NOT the Z? This project is freaking fantastic.

Thanks in advance!!!

That’s the purpose of re-homing – the tool will be at a different height, but after homing the z axis, the machine should know where to go to find my workpiece.

It would also have to compensate for potentially differing tool diameter in order to get X & Y accurate.

G28 X Y will home x and y but not z.

Sounds like you guys are describing work offset systems. I think these are implemented in Grbl ( see G54-G59 documentation) but not in Marlin.

We use the center of the tool as home, so that will not change. The software does the tool size compensation. If you plan on tool changes just use an x and y end stop and a z touch plate, and it is all easier though repetier not an LCD screen.

Your home position should be a bit further away from your work, it should not trigger your end stops mid cut.

Thanks. That’s good to know.

Where are people attaching spindles to in RAMPS? I’m guessing that the fan output is easiest to control, but I don’t want to accidentally PWM my relay… maybe the extruder output is the better choice?

I plan to add an extra switch to disable the relay to preserve fingers on tool changes, but the ability to automate would be nice.

I was tooling around in the Marlin firmware last night and I found the area of homing the axis. I was thinking I can just comment out the line of code to home the Z. Do you guys know if that is possible? I am waiting on some endstops to get here so I can try this out.

#define X_HOME_DIR -1
#define Y_HOME_DIR -1
//#define Z_HOME_DIR -1 (Comment out this line only)

I am not too concerned with tool changes right now. I would like to be able to home the axis and then manually move the spindle using the LCD controller to location that is set by a couple of dowel pins. I am planing to have grid of dowel pin locations on the table every 100 or so mm so i can use these as 0,0 depending on the size of the work piece.

Let me know what you guys think or if there is a much more simple way to do this. The only reason I am thinking of doing dowel pins is because this is how we do it on the CNC machines we have at work.

I’m not understanding the need for a precision home.

I have used pins through the material for 2 sided cuts. I have also used to for small production runs to quickly locate material. Other than that I have always clamped the material down located a corner and reset home. If I needed to precision locate a side a wobble bit does the trick but I have only ever need that for hand milling. Z isn’t usually important because I face the material everytime I have ever milled anything, at that point you have an exact z anyway.

If you aren’t doing bit changes endstops are pretty pointless unless I am misunderstanding what you plan on doing?

I am planning on making wooden signs. I would like to do all of the wood millwork (dimensionally) before they go into the CNC. So i would like to set the work piece against 4 dowel pins to make sure they are placed square and inline with the machine from the start and just carve out the lettering. By essentially homing to endstops and manually moving to the 0,0 of the work piece I do not have to do as much work on the CNC. Just set the piece in, clamp it down, home the machine, manually jog over to work piece 0,0, manually home the Z, and hit start. Do you have any idea if what I proposed doing in the Marlin software would work or is there another way for when I hit Auto Home on the LCD controller to make only home the X and Y? I am planning on running everything on an SD card.

By the way did my first test cuts on some MDF last night and Holy **** you are freaking amazing!!! My machine is absoluteley fantastic!!! The circle was to be 2.000 and it measures 2.003 in diameter. My depth was to be .125 and it measures .127. You did an absolutely fantastic job of engineering and designing this beast!! I can’t say enough to how impressed I am and great of a job you did!!

So your main goal is production work, pins make sense for that.
Auto home all axis with a z touch pad, gets you everything you need. Set your cuts to start below the z home by whatever thickness your touch pad is. You really don’t want to start messing with marlin.

Thanks for the compliments. Wish some other forums out there would try the machine before they keep telling people it has entirely too much flex to be of any use…so discouraging. So many other forums preach if it isn’t solid steel it can’t hold any sort of tolerances, their loss I guess.

…and it looks super cool too:)

^ Anyone?


Not that I know of, its pretty easy to just turn it on and off by hand compared to what it takes for automation.

The only time automation would be beneficial is if it had speed sensing.

How to connect The cables for touch plate on ramps?