Milling Your CNC Router to Make it Flat

When you build your own router, or even one from a kit, sometimes the bed isn’t quite flat when assembled.  Considering how cheaply one can be built, this shouldn’t be too surprising, but the good news is that there’s a fix.  No, I don’t think you’ll be able to ever build a stamping die with the kind of machine that I have (A ZTW 7×12), but I’ve been able to get a runout on the milled surface of around .010″.  I still may take a couple more passes at it, but for now it’s good enough for my purposes.

Here’s a video of the surface being milled:

As you can see from the beginning, I went way too far into the surface to begin with.  The original code called for a .5mm drop from the surface, but when the surface isn’t flat, it can be quite a bit more depending on where the router is zeroed.  In the first part of the video, the sides are definitely lower.

After I figured out to zero in the center, I changed the G-code to take only .2mm (around .008inches) per pass.  After a couple of passes like this, things were much flatter.  I still need to do some more routing as the edges are still quite low, but in the middle of the bed everything is straight to within .010″ or so.

Also, to begin with I used a 1/8 inch bit that I got from ZTW.  As good as this is for certain tasks, there are better options for this operation, including this 5/16″ Dremel bit.  It can take 2 1/2 times the material (in the XY axis at least) off your bed per pass as the 1/8″ bit.  It seems to give a better finish as well.

As far as the bed itself, a piece of 1/4 inch MDF was cut to roughly match the original “7 x12” surface (actually a bit bigger).  This made a sacrificial bed that could be cut without changing the original surface.  I then drilled holes to match up to the side mounts that I made in this post.  The holes were lined up without the MDF, then progressively drilled with the original wood screws keeping everything in place (Done in progression, the first hole had no screws holding it, the second had the screw in the first hole holding it, etc.  The MDF was taken off and reattached to line up each original hole).

Putting a new bed on really didn’t take long at all, I had this install as well as a new high speed X-axis lead screw installed in about an hour and a half.  Milling the table took longer, but once I had the code worked out, it was rather nice to be able to do something else (take the dog out, clean the garage) while my new robotic minion did my work for me.

The G-code it created can be found here with a .2mm cut per pass.  Use at your own risk – units are in millimeters.


  1. Rockler Mini-Clamps for CNC Router Workholding - pingback on February 21, 2013 at 4:57 pm
  2. Hi, what is that gauge you are using at the end of the video clip? Any links appreciated.