cnc router, Electronics, Woodworking

DIY CNC Router - Binding and Backlash - a journey of discovery

Pretty such since the first time I turned on my cnc machine I became familiar with the term 'binding' the various axis had points where due to slight inaccuracies of construction the threaded rod was rubbing against something causing so much friction that the motor stalled. Normally a gentle nudge by hand was sufficient to get things moving again, however binding is very bad. Every time this happens you have effectively 'lost' a move that your cnc was trying to make. It may even recover its self, but you quickly come to recognise the sound of a failed move. This is the sound of failure. The CNC is no longer where it thinks it is relative to any previous move. Initially I had binding issues on all 3 axis. I had foolishly built the original structure with various 'support' points for the treaded rod, these were not responsible for any driving action, but they were drilled to be only barely larger than the threaded rod. That turned out to be a terrible idea, as short of absolutely perfect alignment each of these just provided a point for the rod to rub against and increase friction. So job one was to remove all of those, each axis really just needs to have the threaded rod connected at the motor, and 'supported' by the driving nut. That done the z-axis became pretty reliable, no more binding. The X axis still suffered some issues that I talked about previously, where my driving nut was enclosed in a block that was just a little too tall, at the far end of the workspace from the motor things seemed ok. But as the gantry was pulled back to the motor the height difference between the motor and the driving nut caused things to strain, and ultimately sheared the coupler in half. The Y-axis was a little more tricky, the brackets that hold it on the rails are metal, and the original design had tapped holes through the brackets that acted as the driving nut. one on each side. When this wasn't working I elected to replace it with a block with a captured nut as I had in the x-axis. But that required me to totally dismantle the y-axis and open out the holes through the metal brackets. Sadly I already drilled the hole with the largest drill bit I own. So I had to go at it with a dremel and some cutting discs, and an abrasive but to work the hole open wider.

With the last adjustments made I finally found I could run my machine without binding. This has the effect that I can also run it faster, since less friction means the motor can operate with less concern over torque.

Home free? well no. As I wrote about previously, I was still seeing what seemed like odd behaviour which I eventually tracked down to the 'sloppiness' when changing direction, between the nut being pushed up hard against one side, and it become pushed up hard against the other.

This effect ( I now know) is called 'backlash' To a greater of lesser extent it is a very common issue in cnc systems. It turns out that most of the 'real' parts you might build an axis from are specifically designed to minimise/eliminate backlash. But of course it turns out that this is the yin to bindings yang. The closer you make the tolerances to avoid backlash, the more friction, the more friction the more binding. I took apart the x-axis and found there to be a small gap allowing movement. which I filled with a carefully cut piece of wood. Then clamped closed again. Excited to test out I rushed to repeat my test and found that I had reduced the backlash to 2mm. woohoo, 33% better... but still off. clearly I need to take more action in this area. But more on that later.

So it turns out that whilst it was binding I wasn't really seeing these issues as clearly, since the very friction that was causing the problems was providing drive instantly after a direction change. But now I have mostly eliminated binding, I'm at the mercy of backlash. Now that is not a bad thing, I'll take backlash over binding any day. And here is why...

Binding is an ostensibly random effect that drops 'some' moves and has a random impact on the resulting movements. Where as backlash is entirely predictable. It always has the same impact, and it always happens when you change direction. Also backlash is not additive. It cancels out when you turn back. This is how I came to realise the nature of the problem, by looking at the results of my cribbage board drill attempt, I realised that whilst I had apparently had an inaccurate move back to drill one hole, a little time later in the pattern everything lined up perfectly again. This hints at a way to work around backlash, at least for certain applications, until I can find the right balance in the hardware to eliminate the effect. If you always approach every cut/drill from the same direction, you'll maintain perfect accuracy.

Let me give an example The machine starts having previously moved forwards into what we now consider 0. You then move forwards 10mm. which it does exactly. then you move right 10 and drill again. this is fine. a parallel hole. Now we move backwards 10mm, but we stop at 2, not 0. If you drill here then you are off and your pattern is ruined. It would be tempting to suggest that you tell the machine to go to -2 and drill there. since you know you will lose 2mm and it will actually be at 0. This is not such a great idea, it means that you end up drilling at places that are different in reality to where the machine thinks they are. It would be difficult to make this adjustment all over the place and keep things straight in your head. However. If you instead go back to -4, what you arrive at is -2. From there, you ask to go back to 0. The machine thinks its at -4 so attempts to move 4mm forwards, the first 2 mm is lost in backlash, and so it actually moves just 2mm. so There you are, back at 0. and importantly the machine thinks its zero as well. An issue here is that I have no control over the way pyCam generates Gcode. it uses an algorithm with the objective of minimising machine movements. and has no concept of backlash. and GRBL (0.8) also has no built in support for managing it, though it is on their future list. However for a simple program like my cribbage board drill program, I could simply edit the commands by hand. Which is what I did this week. I move the machine back behind the start point, then bring it forwards to the first hole. From there I drill every hole forwards of that point in that row. Then I move the machine over to the next row, and backwards to past 0 again, then forwards to the start of that row, then repeat. Here is the result

Backlash woes

Backlash woes

It worked! well, that part worked, I had a bunch of other issues. the zaxis was giving me grief and it stopped adjusting height correctly, on the first pass it wound up too high and stopped drilling, on the second pass it wound up too low and effectively crashed the drill bit through the wood. however for the purposes of this test it was successful, I got two parallel lines of drilled holes all correctly spaced.

Clearly this approach can't work in all circumstances. and it would make most things very slow, as you ostensibly have to always move backwards past the point you want to drill then move forwards to it. However, for certain jobs, like my cribbage board, this provides a way to achieve the specific accurate result you want, despite the backlash. So the question becomes, can I use this approach to help me machine out parts that are accurate enough to help me actually fix the root problem?

What is required is an 'anti-backlash' setup, and the design I've found that seems the way to go is to have 2 nuts, separated by a compression spring. The spring acts to take the slack out of the nuts motion on the threaded rod. The question I have is whether I can put this together and maintain low enough friction to avoid binding. So now I have a two pronged attack on inaccuracy in my CNC machine, the first is software, by manipulating the sequence of commands, can I ensure I always cut in the positive direction and thus work around the problem. The second is hardware, can I build a setup for the xaxis that actually eliminates the backlash, or at least reduces it to levels low enough to not be a problem. I figured if I can get it down to less than 1mm it would likely be acceptable for most applications I'm likely to have.

Of course I could just buy a proper leadscrew and associated anti-backlash components... but where is the fun in that?