The Dual EndStop firmware update enables unprecedented precision more easily than ever before. Since day one I have never encouraged endstops be used, until now.

The Mostly Printed CNC is unique in the fact that the X and Y axis are powered at each end of the axis. Using this fact and the new dual endstop firmware we can now more precisely and accurately set the position of every single stepper on the machine independently. This should reliably give you repeatability on the order of your endstops resolution, even after powering off.

Before this new firmware update all the machines in this category relied 100% on the users build accuracy, or manual measuring. This involves setting of each axis before engaging the steppers and locking it in place. If the steppers are ever disengaged during use only the side of the axis with an endstop can accurately be accounted for. This makes fixturing, tool changes, and multi-day jobs extremely difficult to get repeatable results. A poor build or lack of axis alignment before each job will result in a non square skewed axis. A skewed axis will result in ovals and parallelograms instead of circles and 90° cornered rectangles. Changes in build accuracy due to use and environmental conditions need to be adjusted out or accounted for manually. Now just a minor offset adjustment will correct this.


Plugging In The Steppers

Remapping of pins is used in the firmware to allow the use of all the control boards drivers. The unused extruder driver/s are used for the extra stepper/s.




This board only has 4 drivers available and can easily be used with the LowRider CNC but can not full take advantage of the new firmware with the MPCNC.








The min pins are used as normal for the first stepper and the max pins are used for the second stepper on that axis, still as a min.

For the safest configuration the endstops should be wired in the Normally Closed position (NC), to prevent wire disconnects from damaging the machine during the homing sequence.

Mechanical endstops are connected to the signal and ground pins filtered or optical endstops use all three pins, connect these with extreme caution. Using the wrongs pins will damage your control board.

Optical endstops are not recommended on a machine used for milling or routing. The debris can inhibit there function.



This board only has 4 drivers available and can easily be used with the LowRider CNC but can not full take advantage of the new firmware with the MPCNC.




Since I am sure there will be some tweaks needed, I have been adding the dual endstop firmware on my Marlin GitHub page. Right now we are still going to consider this “Beta” as this is on a very early version of Marlin 2.0 and there has not even been an RC release yet.

Remember small 1mm moves when initially powering it up, if driving your steppers the wrong way you can rip your machine apart. If your steppers are moving the wrong direction, completely power off your board before flipping the plug over.

In case you have never used GitHub, the first drop down lets you select the firmware version you want.

The next step is download the firmware you selected. Click on “Clone or Download”, then click on “Download Zip”.

Testing and Calibration

After all the endstops have been connected issuing a M119 command will let you see the current status of each endstop. You should check that each endstop registers both an open and closed status before proceeding.

The unfortunately designated M666 lets you test your offset to quickly calibrate your machine. Using the command M666 X0.72 would offset the second X stepper 0.72mm away from the second endstop, Y can also be used. To verify your current settings during calibration just an M666 will show the current offsets. Once the correct offset are found you should input them into your firmware.

This is to simplify the actual placement of the endstops themselves, you only need to get them such that the second endstop is at or slightly behind where it needs to be within a few Millimeters is best.

You can verify how square your axis is by measuring the diagonals of the axis and the distance from the rollers to the nearest corner, use of a square can also help. Once you think your axis is good enough use the plotter function of your machine to draw the largest possible square and then measure the diagonals, when they are equal or within your desired tolerances you are done. Care should be taken to use as little pen pressure as possible to get the most accurate results and a pen mount with some give should be used, example.


First, most jobs will not benefit from using endstops. Getting the machine close and just running a quick one off carving or sign has no need to go through all the extra steps. People new to the CNC world should not use this, this is a advanced technique. My support for this will be limited.

-You can now use the machine in two ways. Quick one off jobs as you always would setting the home position by hand and just running the job. Or by starting each job with a G28 (if using a touch plate) you can now reference or return to that position at any time. If you are not using a touch plate you can use G28 X Y

-You can use fixtures at a set reference points on the table to do repeat jobs or multiple sided cuts utilizing CAM based work offsets or scripts.

-Tool changes can be done with multiple gcodes so you can do repeat jobs in order of bit used instead of per piece depending on if changing the part of the bit is the faster choice.

-Jobs can be restarted in case of power outage, tool breaks, long multi day jobs, apply paint between cuts, etc.



Work offsets

Make sure your job has a work offset if you use the endstops.

A typical part has the gcode built with the origin at the parts corner. If you where to cut out that part it would result in going negative past your endstops and misalign your machine.

Negative moves do not work on the X and Y axis with endstops.

Moving the origin in your CAM program is the easiest fix.


To get a more precise work offset it is best to add it in your CAD file. This can be done with a bounding box, cut it as a separate path and used to position your material.