Scaling and stalling

Hi folks!

I’m struggling quite a bit with calibration of (I think***) steps per mm with my XController. I’m making parts that are supposed to be a specific size and I’m having issues where features are ending up in the wrong positions. The most apparent of these is a clam shell lip. Think like the ridge and cavity you have on the inside of mated plastic parts.

On the X axis - the left side wall (3.85) is ~1mm thinner than the right side wall (4.76mm). The overall X part length is 123.9mm.

In the Y axis - top side wall is 4.08mm and bottom is 3.55mm. The overall Y part length is 53.4mm.

To date, I’ve been setting my steps per mm by mounting a laser pointer in the collet, laying a ruler on the table below and issuing a move command, measuring the output I got, then scaling. I’m generally doing this with 200-300mm moves and can get it fairly repeatable. I’d love to understand if there is a better way to derive the steps per mm from part measurement since that is what I ultimately care about.

The other major challenge I have with this machine is stalling. I use Chilipeppr and SPJS running on a Raspberry Pi to send commands to the XController. I’m able to run for hours with tens of thousands of instructions, then out of the blue it will pick a place to give up and stop. I used to have the same issue directly connected and using UGS. I’ve tried different cables, got one with gold plating, still no joy with this issue. It sucks when you’ve run a long job with a series of operations and tool changes, and on the last few minutes with the final tool everything stalls.

Any help anyone has on either of these woes is welcome - I’m close to relegating this thing to the trash heap and buying a full-on metal working mill.


Use Easel to create two squares. I would recommend that one be 30mm X 30mm and the other be 40mm X 40mm. Use a straight bit to cut them out by using an “outline” cut “on path”.

The small square will be smaller than 30 X 30 because of the bit’s diameter. Nevertheless, measure it to make sure that the square’s height and width are exactly the same. Measure corner to corner along both diagonals on the small square. If the distances are not the same your machine is not square. Repeat all of this with the 40 X 40.

Finally, measure both squares and subtract the small square’s side length from the big square’s side length. Regardless of the bit’s diameter, this distance should be 10mm. If the difference is more than 10mm you need to reduce your steps per mm and if it is too small you need to increase your steps per mm. For example, if the difference measures 10.2 mm instead of 10, multiply your current steps per mm by 10 and then divide by 10.2. This will give your new step setting.

Finally, it’s worth mentioning that bits are never precisely the stated diameter, and that runout on the spindle and vibrations within the machine all create bit movement. This causes the bit to cut a path slightly larger than the bit itself. You can calculate the bit’s cutting diameter from the squares; calculate 4 times the small square’s length minus 3 times the big square’s length. This should give the bit’s cutting diameter including the effects of runout.

At this point someone will probably point out that you could simply calculate 30 minus the small square’s length to get the bit diameter. The problem with that is that you aren’t sure your steps per mm setting is correct so you can’t really trust that your 30 mm square path is actually producing a 30mm square path on the machine.