How does "Auto Square" actually work?

After reading Ryans blog post on Auto Square / Dual Endstops I am actually more confused than before when I was only assuming how it could possibly work. This might be a language issue.

As far as I understood it helps skewed machines to produce “more” perpendicular milling results. So far, so good. But how?

For me there are two possible ways:

  1. With the help of the dual end stops you can measure the the skew factor by plotting a rectangle + measure the diagonals and after entering the result in the marlin firmware you then let the stepper motors (of one axis) adjust the angle on the middle assembly conduits to 90 degree by pushing or pulling one of those gantry conduits with plain force/torque (against the mechanical strain).
  2. The above measured result of the the skew factor causes the firmware to automatically tweak the gcode in such a way that travels e.g. on the X axis (lets say X100) become slight movements on the Y axis as well (X100 Y2.5). This modified gcode however is not seen by the user nor programmed by the CAM software. It is just added by marlin firmware.
I do actually have issues with a skewed middle assembly / gantry (however you want to call it) and I have tried all the recommended steps to the get my assembly perpendicular (fasten/loosen A, B and C Bolts, filing the connecting surface of XY and XYZ Burly, redrill the 8mm holes for the screws). I have to agree with some other guys here that a perpendicular gantry is much more important than a square base. Unfortunately, due to the the differences in the height of both gantry conduits it is almost impossible to measure the squareness. Only plotting rectangles/measure diagonals is an option. However, you cant tell which part of the machine causes the issues (parallelograms) if you have your middle assembly and your base as possible sources for this problem. This makes troubleshooting a pain in the ass.

The last thing i will do is take the whole middle assembly, bend it straight, put in my oven and hope for the best :wink:

I actually thought my printed parts are okayish and i compared some part dimensions with others. Now I wonder if i have to reprint the whole middle assembly.

As for the Dual Endstop solution: As I am using Estlcam hardware (Arduino Nano) I cannot take advantage of this feature unless I design my own piggy back pcb/add on solution and implement the dual endstop feature in my own firmware.


I believe the answer is the former, i.e. strains the center gantry (should be a small amount) to get the gantry square. I saw a video where Ryan manually pushed an endstop switch and one X motor stopped while the other X motor kept moving, so it was forcing the squareness of the gantry.

Now what I’m not sure of is if there is any residual skew left over after physical squaring, if that is handled in software (like “bed leveling” a 3d printer) or if it mechanically strains the gantry a slight bit more to physically square the gantry rest of the way.

I too have been thinking, trying to come up with a good way of measuring squareness of the gantry. I am not using dual end stops but I want to dial it in as precisely as possible prior to energizing motors. I think I am going to use hard physical stops, hold the gantry against all four physical stops (which may strain the gantry slightly) and then energize the motors. By drawing squares and shimming the physical stops, I should be able to tune it into an accurate square configuration. When energized, the motors will jump to the nearest whole step, and if that’s the biggest source of skew, I’ll be happy.

1 Like

I am not sure how to word this. Even on a perfectly built machine, square, level, skew, whatever else you want to measure, one endstop will not get you an accurate “home”. Changing endmills during a job the easiest way is to have an accurate home. Dual end stops is the only way to accurately home a machine like this. You can use hard stops but that leaves a tiny bit of uncertainty to your homing and they take a little more to set up accurately (usually fine for anything but all of the most accurate of projects). This is just the most accurate and easiest way possible.

Now to what you guys are referring, yes it can tweak a not square build into a more square build but that is not the purpose of this. Take the time to get the build right. That is why not all of the machines come standard with Dual end stops, few need them, we didn’t even have the possibility of them for the first 3 years or so.


Till, Your oven idea will not work you will lose all tension in the bearings. Using a square of any kind should get you a decent square reference,I use a fairly 2D square and it works fine, and if you are still having issues just use it for a while come back to the squareness after some test and learning. It typically goes together correctly the second time around, since the burly update (each version gets easier) it has not been much of an issue. In the end, if your build is close the dual end stop firmware will let you bend your machine square if you can’t get the hardware “perfect”.


The whole reason I said this is hard to put into words is both of you are not using numbers and tolerances. Saying your machine is not square I envision 1" off over 2’, if you are 1/32" off over 3’ don’t worry about it either it won’t matter or yes you can tune it out with dual end stops. Bottom line I have no idea with what level of accuracy you have and or desire. And If I typed all that out to find out you are just cutting signs and not PCB’s or something…

1 Like

Hi Ryan,

ty for your answer.
You are using the term “auto square” in conjunction with dual end stops in your article ( You mentioned that “…all the machines in this category relied 100% on the users build accuracy, or manual measuring” and I assumed that auto square would fix this issues with accuracy, skewed axis.

Now you are talking about tool / end mill changes during the job. For my purpose I would be happy to get square cuts/plots with one tool first. This is not possible so far.

My “oven idea” idea was actually supposed the be a bad joke (German humor) as I wont be able to find out the right temperature / time and i wouldn’t have the tools to fix my middle assembly. I cant see a problem in your argument since I could readjust the tension bolts after I got my assembly square. So far I don’t get my assembly close to square with those bolts.

To get an idea how “unsquare” my assembly is I have attached a picture. I have used a steel square to measure this, I don’t know what a 2D square is.
I have problems understanding your envision of my “unsquareness” because I don’t understand what kinds of units you are referring to with " 1″ "and " 2′ " (1″ is 1 inch and the other one is?; Sorry, I was born into a metric system :wink: ).

What I have done is plotting rectangles with the dimensions 480mm x 900mm. (Y x X). The move in Y direction (Y480mm X0mm) turns out as a Y480mm X5mm move (assume that X-axis is perfectly aligned with the machines coordinate system).
This means that I am off by 0.6° (from perfectly square 90° [tan^-1 (5mm/480mm)] ).
I really don’t know if this is little or a lot. I just think it is more than I would have expected.
As I plan to also mill furniture parts (mainly) and I would also be happy to cut PCBs later, I hope it is possible with my machine (working dimensions of my machine are approx. 1010mm x 510mm [40″ by 20″ for you guys] ).

Yes, skewed as in pulled manually home and tweaked. This can happen even with a squarely built machine. The larger the machine the easier this is to happen (and fix manually).

It has actually been done multiple times, so I felt the need to clarify.


I am not really sure what to tell you, building it square is possible but I can’t really say why some self printed versions are so difficult to get right. Yours can be corrected with dual endstops I believe if you just can;t get it.

Like I said just use it for a while have fun revisit it in a while. Even with that big angle I bet you would not notice on through hole components on a medium sized PCB. That is actually really far off, you might want to check your printer.


1 Like

ty ryan. that’s what im gone do.

I didn’t mean to sound like I need your help to fix my issues with my prints. I know you can’t do that for the thousands of machines printed so far. Nice work btw!
Actually, I just wanted to understand the auto square / dual end stop feature, how it works , what the limits are and if it could possibly help me with my issue… and i think I have my answers now.

BTW: On my research on how “auto square” is implemented in the Marlin firmware i encountered a feature called “Bed skew correction”. Isn’t this feature actually what I am looking for (a software based correction of skewed machines)?
If I am not mistaken this feature could unskew nearly all machines without pushing, pulling and bending the rollers/gantry conduits against the force fed in by poorly printed or sloppy assembled middle assembly.

1 Like

Bed skew would work if you built your frame as a parallelogram.


You asked some good questions, I just try to see if I am missing any info and to try and clear things up for you and others. We have hardware and software fixes, as a Mechanical engineer I lean heavily on the machine fix before the software.

Haven’t really thought about it in depth, but I thought if you have the parallelogram plotting /milling issue you would benefit of this in any case. I might be wrong. Anyway, I haven’t found anything in this forum about it so I thought it might be worth to mention it once.

Yeah, I hope my questions and your answers will help others as well.
Even as a software engineer I want to try to fix my machine mechanics before tweaking out the problem by software /electronics. It might not have sounded like that but beforehand
I invested many hours/days of troubleshooting.
Considering this however and knowing that there are many guys out there with the same issues but less experience, less knowledge and less patience I reckon a software /electrical solution is the more convenient way to help them with community getting bigger and bigger every day. I am a bit worried that you can’t manage to help all those fanboys :wink:

Thanks Ryan. To clarify, in this and in the other thread where I harp on squareness, I am assuming that the machine can be physically built reasonably close to square, and by that I mean within maybe 1 mm or so over a 600 mm span. Although I presently have no use for it, I find it interesting to contemplate dialing in that last bit of squareness, down to the level that I might not be able to measure.

This is a very good way to fix the 5mm/500mm problem. I did this on my MPCNC (before burly and before the 525 upgrade). There were some parts I used that were about 10cm long and clipped onto the tubes at the corners. I would just pull the gantry into them when I started the machine and they would be as parallel as the corners.

Did you try this? For a specific user (like myself, who is better at math and software than drill bits) this would be a great solution. Not for everyone, but it should work.

2’ is two feet. 1" is 1 inch. So 2’1" is 2 feet and 1 inch or 25 inches. It’s really quite ridiculous. I’m 5’11 9/16" tall. :slight_smile:

Yeah, I have read about this solution from many other guys with the same problem. This would only be a temporary solution me. Pushing the axes against the mechanical endstops and turning on the motors at the same time seems to be rather inconvenient. However, I have not tried this myself.

No, I have not. As I am using Estlcam for CAM and sending the Gcode I cannot benefit of the features included in Marlin. Right now I am working on a CNC Shield especially designed for Estlcam based on Arduino Nano. With this shield you are able to use standard DRV8825 (Polulu Driver Carrier) stepper driver, no need for external Y-Adapter for the serial connection of X/Y-Motors (circuit on the PCB), 2 outputs (relay driver for electro-mechanical relays) , 8 inputs ( isolated by optocouplers), variable frequency drive/inverter rpm control circuit included, etc…
The first prototype is ready to go but this is all very time consuming.
If you have the required hardware and are willing to test this feature I would be interested in your results.

Assuming your are from U.S. : For gods sake, please use the metrical system. I beg you :wink:

Hi Ryan, I’d like to submit my idea regarding autosquaring without dual drive. What I did with my MPCNC is to connect the NC endstop switches for X (same applies to Y) axis in parallel, so that end position is detected only when both X switches are pressed. When X axis is out of square, one of X motor will lose steps until the other motor has pressed the second switch. This way I can autosquare even with an UNO controller and estlcam, and no changes in firmware. For this method to work, switch need to trigger when the roller is physically blocked at zero position. Obviously I assume the endstops positions are calibrated so that axis are squared when both sides have hit their endstops.