offset, or disable soft endstops?

Hey guys,

I’ve been using my mpcnc for a couple of months now, and absolutely love the things I can do with it. I likely should have bought a jigsaw years ago, or possibly a scroll saw (but never had space to dedicate to such a machine). Anyway, love the machine. The only problem I’m running into, is the soft endstops built into Marlin. Basically, it doesn’t want to go to -X or -Y. This would not be a problem, but I’ve recently started doing multi-layer carves, and for that it’s best to design each layer as a separate SVG, because for some reason Estlcam doesn’t seem to like bringing separate SVG’s in beside each other. For whatever reason, I bring the first SVG in, then import a second, and it always seems to rescale the first one. So instead, I load the top layer, set toolpaths, then load the bottom layer, and set separate toolpaths. Again, fine, but when I bring these two separate SVG files in separately, it’s best not to have to move the 0,0 point on the carve, because there isn’t really a good way to ensure it will end up in the same place on both layers. Unfortunately, Estlcam sets the 0,0 right at the border of the drawing, so trying to cut out the design, it always seems to ride inside the left and bottom edges of the drawing, rather than being outside the object. Sorry about the long lead-in. So my question: is it better to allow negative movement by disabling the soft endstops, or is there a way to add an offset of some sort to your start code, so the machine knows where it actually is (I never place my workpiece actually at 0,0 on my table) and while keeping this actual placement in mind, knows your workpiece offset, and sets an imaginary 0,0 to work from? As I said, I’ve only been at this a few months, and I’ve really only messed with basic functions so far… Any help you could offer would be greatly appreciated!


I think this is X_MIN_POS and Y_MIN_POS in Marlin Configuration.h, which will allow you to move to negative machine coordinates.

G92 X0 Y0 is the alternative to tell the machine the current position should be treated as (0, 0) and this way you never have to home the machine, everything is workpiece relative. Note you can also set a nonzero value, like G92 X50 Y50.

If you have multiple operations with offset coordinates, this is not unlike a tool change workflow. You could perform one operation, then move to (0, 0), then G92 X10 Y10 for example if (0, 0) of layer 1 corresponds to (10, 10) of layer 2, and then proceed with the second operation.

1 Like

The soft stops are only built into the dual, and because of the hardware you should not physically be able to go negative. I am a little unclear what you are meaning by multi-layer carve, but for me, my guess is some sort of CAM fix. I really like the CAM to be doing exactly what I need without any intervention from me (rarely do I even add a Z probe).

Ok… So basically what I mean by a multi-layer carve, is that I take an image with text, and I create a svg for the bottom layer, and then remove the text for the top layer. I want it to carve everything except the image to be down 4 mm, and once that’s done, start again, dosn 4mm, and carve the text another 4mm deeper. If I leave the text in the top layer image, it carves around it, which is not what I want. So I load the top layer svg, set toolpaths, create a gcode, then load the bottom svg, set deeper toolpaths, create another gcode. Now, to make sure I get these images in exactly the same place both times, so it does not mess with the image when it goes deeper, I find it best if I can simply load the svg, and leave the Zero point at the default border of the image. If I move that zero, I have to do so exactly the same amount in both images, and in Estlcam, that’s a hard thing to do. The problem with that is, the tool is then forced by the soft endstops to stay inside the border of the image, which trims the border slightly if I do a cutout path. I don’t ever place my workpiece at actual X0, Y0. The layout of my shop doesn’t allow it, and my shop doesn’t have space to live up to ideal standards. So instead, I place my workpiece at X600, Y50. Now to make the code run properly, I disconnect/reconnect so the machine, and the computer both think the machine is at 0,0. I Home X, Home Y, reconnect, start. From this point, it will not go to the left of 0,0, because it thinks the machine doesn’t allow that. I’m looking for a more proper way to do things… Jamie seemed to be onto something, but when I tried it, it only seemed to confuse everything. G92 X0 Y0 made my controller (LCD) say X0, Y0, but Repetier still said X600, Y50, and the machine would still not go left of (LCD) X0… So basically, what I’m wondering is, is there a way to make the machine know where it actually is, but run the code from a relative position (so that if it can physically go outside the border, then it will, but still knows where the hard limits are) or do I have to continue to trick my machine? Also, when I reconnect, it kills the steppers momentarily. Not a huge issue, except a slight nudge loses its position, and then I have to re-home to ensure square… So I’d rather not do that… I’d rather it run from X600, Y50 as though it were at X0,Y0, and if it needs to go negative, if it can, do it… Then if I have a circular design, and I want to start it in the center of something round, it can… Otherwise, I only get the top right quarter of the design, of I tell it Zero is in the center of the design… Am I just rambling nonsense at this point, or does this make sense to u? I feel like I’ve been rambling for a while, and I’m not sure how much of it makes sense, so I’m going to leave this here… Thanks, in advance…

What you are asking for makes sense. I think it should be relatively easy with the MPCNC firmware with Ryan’s adjustments, but pure Marlin has limits enabled at X0 Y0 by default. Can you confirm what version of firmware you’re using?

Yes, In your CAM…or CAD move the origin or zero point. If your work piece is at 600, then it should be at 600 in CAD or CAM. You are trying to workaround a work around swapping zeros twice. Just set it up properly. In CAD the easiest way is to make a box the size of your work area and then position your job in that area where it is in the real world.

The other way is work offsets but you really need to be able to do it as I just stated to be able to understand work offsets. I never use work offsets, I have an easier time just doing it in CAD or CAM moving the Zero.

Ok I’m pretty sure you should be able to move left after G92 X0 Y0 but only if the machine knows that you are not at the ‘true’ machine origin. I think your reconnection (which resets the device) may be confusing the machine and causing it to think that it’s at the ‘true’ origin where it physically can’t move negative X or Y. You shouldn’t ever need to disconnect/reconnect.

Try this and see what happens:

  • Home X and Y
  • Perform a jog in repetier host, or on the console G1 X200 Y100 or something like that
  • Perform G92 X0 Y0
  • Then try jogging left, or type G1 X-10 Y-10
  • Try M114 to have it report where it thinks it is
It should move left because it knows, even though you're referring to negative coordinates, that the true machine origin is 200 mm left and 100 mm back from where you did G92, so it has room.

For your actual workflow you should be able to do CAM with zero at the origin of your workpiece, then on the machine, first home, then jog to the origin of your workpiece, and then G92 X0 Y0 Z0, and then run your g-code and it should work, even if the g-code contains negative movements. You must jog, you can’t disable steppers and move by hand, because if you disable steppers and move by hand, the machine doesn’t know that it’s not still at the physical machine origin where it can’t physically move negative. And you shouldn’t disconnect/reconnect or it will again think it’s at the physical origin and you’ll have to home and jog back to your workpiece and G92 again.

Not to confuse things more, but the non-dual-endstop (series wired) version of the firmware can be used by disabling steppers, physically moving, and performing G92 (or resetting), and this works because the soft limits are disabled in the non-dual-endstop firmware. It’s intended to be used without any homing at all, and it will happily go off the end of the physical machine. But the dual-endstop firmware does not allow this and it’s intended to be used with homing.

1 Like