Anyone who uses a CNC machine eventually realizes the importance of the Zero point. This usually happens when something goes wrong during a machining cycle, the machine needs to be reset and the current zero is lost. Fruitlessly searching for a lost zero prompted me to develop a repeatable process for finding the same zero time after time. Here’s how I do it.
The easiest to deal with are the X and Y coordinates. As i described in a previous post, limit switches on the CNC allow the machine to return to a hard-coded and highly repeatable zero point.
Most of the time, my current work piece is not located at this zero. From the machine zero, I jog the machine until it reaches an appropriate position over the work piece. Then I note the X-Y offset from the machine zero, making a point of writing it down. I then reset the X and Y zero points to the current position, knowing that I can retrace my steps back to that point when I need to.
Zeroing the Z axis is not as simple, as the offset is likely to be vary due to material thickness and tool length. Finding zero in this situation requires strategies based on the circumstances.
- For non-critical applications (eg, I am cutting right through the workpiece), I simply jog the Z axis until I can no longer slide a sliver of paper under the cutter. By backing it off, to remove the paper, and then moving it to the same Z+0.01mm the zero is good enough. This is then set to the new zero for the Z axis.
- CP also has a facility to use a Touch Plate to set zero, using the Z axis lower limit switch as a trigger point. The principle is that the tool and plate touching form an electrical circuit that the TinyG can detect. The software side is a simple dialog and the CNC needs a couple of wires clipped to the metal tool and a conductive touch plate of known thickness (mine is milled from blank PCB), shown below.
Importantly, mechanical imperfections in the gantry and other components, and the natural warping that comes with a large flat surface, will almost guarantee that the Z zero point is not consistent across the entire CNC bed.
There are generally 2 options available. The first is to level the bed using the CNC itself. A sacrifical layer is usually placed on top of the bed and the entire surface machined to the same height by the CNC. This technique is used here to create the tool holder for the flat acrylic front panel. Over the entire bed this will guarantee the distance between tool and machine bed is consistent.
The second method is to compensate for the imperfections using Z axis tool movements. CP provides a function to auto-level G-Code. Auto-levelling works by scanning the surface to be milled, mapping the surface deviation at a defined grid of points. CP then modifies the G-Code to take this deviation into account in Z axis movements, interpolating as required. A scanned surface in CP shown at right, with the deviation exaggerated 50 times. Auto-levelling is especially useful when milling PCBs, as the milling depth is around 0.1mm using an engraving tool, and small deviations could result in bridged copper tracks and a faulty PCB.
The probe used for PCBs is very similar to the touch plate – the surface of the PCB acting as the plate. Using auto-levelling with a non-conductive surface needs a special probe to be made. Mine (shown below) is a simple tact switch mounted on the end of a 1/8″ brass rod. The wiring and switch are stabilised and protected by heat shrink tubing. Various other designs can be found on the internet.
Interesting to note that my ShapeOko MDF bed has a deviation of up to 0.3mm over about 100mm. In other words, an engraving depth of 0.1mm at one end will end up 0.2mm in fresh air at the other!