Thursday, October 15, 2015

CNC Router Build

I built a 3-Axis CNC router in the Fall of 2015. This post documents the build process.

I got the kit from CNCRouterParts. You can order entire machine kits, or sub-systems separately (machine hardware, electronics, base, etc.). I choose to get their steel base kit, the 4'x4'x8" machine, and the plug-and-play electronics. I also bought a spindle package from them.

The Packages

It took 2 weeks from order to delivery. They shipped across the US from Washington state to Michigan. The kit arrived in 13 packages. The heaviest was the rails (tube shown below) which weighed 72 pounds. The packaging was excellent - very organized and easy to figure out what was what. Nothing was damaged during shipping by UPS Ground.

Here's a look inside a typical box:

Part are wrapped, bagged, or protected by cardboard. Parts are group logically into assemblies. For the entire machine I was missing two bolts and two nuts, both easy to pick up at the hardware store. I had one bad T-nut.


I needed to clear space in my shop to accommodate the machine. This took some doing, but I got it done - whew! That saw till is going to have to move out of the way but for now it's okay.

I also needed to construct a temporary work table to let me build the various components. I used two saw horses and some laminate coated tempered hardboard for a work surface.

The instructions are provided online via web pages and PDF files. I used an iPad to view these and it worked great because it is definitely necessary to zoom in to see the details.

There are a few extra tools / materials I found I needed before I began:

  • A magnetizer / demagnetizer. This is handy for making the allen wrenches hang on to the screws. I used the Wiha® Tools Magnetizer/Demagnetizer Tool. This cheap little thing ($8) works really well!
  • Taps and tap wrench. These are used to clean up the screw threads on the gantry risers which have been powder coated. Some of the powder coating gets into the threads and must be cleared out. 
  • Some Locktite Threadlocker. This is used to secure the motor pulley set screws on the motor shafts. I'd recommend the breakable stuff - you may need to move them during the adjustment phase. 

The Base

Time to get building! Hmmm... I think I'll start with the base! This was very easy, with a helper, to put together and get everything squared up.

The leveler feet have a ball and socket joint to flex to accommodate a non-level floor. They extend about 3" max as well on pretty solid 1/2" diameter screws. My floor was significantly sloped so I wound up using some extra wood blocks beneath the front legs so the screws didn't have to extend as far.

The rails are connected using a tapered bracket which triangulates the corner:

The base is pretty solid as is. I'll get a shelf in place and store my displaced machines (spindle sander, table top belt sander, hollow chisel mortiser, etc) to make it even more steady.

The Machine Table

With the base leveled up I started on the machine table. This is made from 80/20 aluminum extrusions, angle brackets, and T nuts.

You can see the T-nuts in the rail to the left of the bracket. These work nicely. Good thing - there are hundreds of them in this entire project! They are usually pre-assembled onto a component and slid in from the end of the extrusion but they can also be slipped into the gap and rotated into place quite easily. 

Some clamps level up the cross members to the side members. These were checked with a machinist square to make sure they were accurately set. Measuring from corner to corner it is dead square - onward...

The Pro kit has steel rails, mounted at 45 degrees to vertical, which carry the gantry. Here's a close-up of the brackets which hold the rails:

The brackets are every 15" or so along the length of the rails. They get aligned flush and seated before being tightened down.

A gear rack is installed along each rail next. The stepper motors turn a gear which engages the rails. This drives the machine along that axis. The gantry has motors on each side, with one slaved to the other so they operate in tandem. The X axis is slaved to the B axis.

The Gantry

Next up is to build the gantry that slides back and forth for the Y axis of the machine. There are two risers on each side and a very heavy duty extrusion between them.

The powder coated steel plates for the risers needed to be tapped in a few spots - the powder coating had made its way into the threaded holes. This was very easy to rectify and only took a few minutes for the few parts where it was required (three total for the whole machine).

The gantry rides on bearings on hardened steel rails. The lower bearings are adjustable in tension. Short, square extrusions get secured to the riser plates. The main gantry extrusion sits on those verticals.

The bearings on the bottom get engaged with the lower rail, then tightened just a bit more. The locking nut is tightened after verify they slide smoothly.

Here are the risers installed, with the horizontal extrusion secured in place:

The Z Axis / Motor Mount

The Z axis is the only part that comes fully assembled out of the box. You simply need to secure it to the gantry.

Here it is bolted on, prior to the spindle being mounted:

The Spindle

There are many, many spindle options. I ordered an air cooled, 2,2kW, 220V, single phase motor. The main advantage is it can be speed controlled via GCode or the pendant.

It has its own variable frequency drive (VFD) and enclosure which I'll mount to the wall.

Rack and Pinion Systems

The Z axis motion is via a ball screw. The X and Y axes are rack and pinion drive. These should have been simple - but were the most problem filled portion of my build. The real issue was the placement of the belt on the pulleys. I had some gears with a bit of wobble but was able to sort that out by taking them apart and rebuilding from scratch. I also had belts which would travel from one side of the gear to the other across the length of the axis. It started with the Y axis. But became a problem in X and slaved X (B). I also had to redo Y again to get things just right. In my opinion, the instructions which state that the pulley should be mounted 1.25" from the face of the motor is incorrect. This should be more like 1.375". This helps to center the belt on the larger gear and better control the creep.

Here are the parts prior to assembly - three identical assemblies:
Here's the Y axis assembly in place. Note the spring/screw which applies tension between the gear and the rack. You can see in this image that the belt is not very well centered on the gear.

Here's one of the X axis drive assemblies:

Cable Management

Cable trays make it easy to manage the cables coming form the spindle, Z axis motor, Y axis motor, X axis motors as well as the proximity sensors used to home the machine. 

Those were pretty easy to install - a bit of testing to get them placed just right.


I purchased the "plug-and-play" electronics package. It is as advertised - very little configuration required. There's one cabinet for all the components. There is a separate cabinet for the spindle electronics. The computer connects to the cabinet with a Ethernet cable.

The four Nema 34 stepper motors. Two for the X axis, one for Y, one for Z.

Here are the motors mounted. The Z axis motor is by far the easiest to set up.

Proximity Sensors

Proximity sensors are used to limit the travel of the machine, and provide a reliable location for "home", . They detect the presence of metal at a distance very repeatably. This allows you to turn off the machine and return to the exact same position after you restart.

To test the setup I set the electronic boxes on some stools/plywood and hooked everything up.

Once I knew things were working I installed the electronics cabinets on the wall and organized the flow of the cables. You control the alignment of the X axis (which is driven by motors on each side) by adjust the relative position of the proximity switches. If the X axis is racked forward a tiny amount move the slaved motor's proximity switch in or out to correct it.

It took a bit of testing to get the tension on the rails right. At times I'd have them a bit too loose and hear some chatter at spots along the racks. I wanted them as loose as possible to minimize wear but tight enough for smooth, vibration free motion. Once set I tightened up the screws against the lock washers.

Dust Collection

With everything running it was time to deal with dust collection. I had a Delta two stage dust collector system already. I just had to reconfigure it for use with the CNC. It draws a lot of air. So much so that the two 55 gallon drums lift off the ground from the suction until they are about 1/8 full! So I'm not anticipating any issue there.

I bought the dust shoe from Kent CNC. This surrounds the bit to ensure all the chips get into the collector. It is removable (held by magnets) to make it easy to change tools.

Here's a close-up of the three magnets which secure it:

The rest of the dust collection hardware was from Lee Valley (blast gates, high quality polyurethane hoses, and nice, properly designed hose clamps).

The hose is attached to the top of the Z Axis with simple plastic cable ties. There is no motion of the hose near the spindle.


I picked up an auxiliary pendant for controlling the machine away from the computer. I went with one from VistaCNC. They have quite a few models and I choose one of the cheaper ones - the P2-S. You can start and stop a running program, as well as control the feed rate and spindle speed. You can also jog the machine smoothly and accurately. Finally you can set the fixture offset position (usually G54) right from the pendant - very handy.


The software which drives the machine is Mach3. There are drivers to allow the Ethernet cable to be used to communicate to the hardware (rather than a parallel port).
There were a few videos which I found particularly useful for getting things going. None more important than this one: Coordinate Systems, Homing and Limits


I'm began using Mastercam to generate the code for the router. I'm using the Generic Router post (MROUTER.PST). There were a few pieces of GCode which I found critical to getting the machine running smoothly. An unintentional toggle between code G61 (Exact Stop) and  G64 (Continuous Velocity) was a problem at first. In Exact Stop mode the machine stops after every move. This results in insanely jerky motion!  A value of G8 was resetting it from the desired G64 back to G61.

I found this post online to help with the problem: Stop/Start, Jerky, Shutter Movement with Mach3.

Once I understood what was happening I had to edit the post file to fix it. With that change the router ran very smooth.

The kit also comes with a one year commercial licence for Autodesk Fusion 360. I've been working with this program for a week now and I'm really impressed. The user interface is fantastic - I found it very easy and intuitive to do the toolpath programming compared to Mastercam (which I've been using for 5 years). I have some previous experience with Autodesk Inventor which made the experience of the modeling in Fusion seem logical and familiar.

When I generated GCode using the CNCRouterParts post for Fusion it ran perfectly without having to do any editing to to the post. The motion was smooth right off the bat.


With the build complete I needed to calibrate it and run some test cuts.

Calibration in Mach3 involves asking the router to move a known distance then measuring the exact amount it moved. After you enter the values it calculates the modified motor stepping value.

I did this using a simple toolpath which used an upshear endmill to bore (4) 0.25" holes into some scrap Baltic birch plywood. The holes were 4" on center.

I then placed 0.25" dowel pins into the holes and used digital calipers to measure the distance. As you can see I did this a few times!

The X axis was good right off the bat.

The Y axis required a few repetitions to get it right. After several tries I got it within a few thousandths.

I'm going to redo this with 12" digital calipers to get some greater spacing to the pins for better accuracy. I'll also drill the holes nearly all the way through the material to eliminate any wobble. Good enough for now...

Surfacing Test

Next up a surfacing test. Using a scrap piece of curly maple I cut in two surfaces - one synclastic and one anticlastic. The modeling was done in Rhino and the toolpath programming was done in Autodesk Fusion 360. I'm really liking Fusion!

Fist a roughing pass. I actually had to do this twice since I was zooming around in Mach3 during the first attempt and that interrupted the cutting. That was surprising! You can see the shift between the two cuts in the roughed areas below.

Then a finish pass with a 1/4" ball end mill stepping over 0.05". This was the "morphed spiral" toolpath which does the entire surface from the inside out without ever lifting the tool. This might have cut better with a simple parallel finish pass.

I used a card scraper to clear off some tool marks where the machine changed direction. I then sanded out the scallops using 180 then 220. I added some Golden Oak stain to make the curl in the maple pop. I haven't applied a finish yet:

It's working well :)


I'm pleased with the machine I built using the CNCRouterParts kit. It was exciting and fun to put together. There were a few challenges but all were overcome without too much stress or frustration. The machine runs nice and smooth and getting it to work with Mastercam and Fusion wasn't difficult.
I'm excited to have a CNC machine in my shop. I've used the routers at Taubman College for five years and I'm thrilled to be able to experiment much more now that I own the machine.

Sunday, July 5, 2015

CNC Routing a ZBrush Sculpt

I made use of the Roland 4-axis router at the Penny W. Stamps School of Art & Design to make a walnut version of a portrait sculpture I created in ZBrush.

Here's the ZBrush sculpt (more details on its creation are available here). It has been decimated down to about 400,000 polygons to make is manageable for RhinoCAM (the software used to drive the router).

Mounted in the bed of the router is the block of walnut. It is about 3" x 4.5" x 8". It is clamped by the 4th axis at one end and by the tail-stock at the other end.

Roughing begins using a 3/8" diameter 2 flute end mill. This is pretty rough yet only 0.05" was left for the finishing pass.

The 4th axis of the router is rotated to the other side and roughing continues.

The first finish pass is done using a 1/8" ball end mill. It is cutting from the face to the back of the head.

Here's the final finish pass using a 1/16" diameter ball end bit. Only in the smallest crevices was any material removed.

Here's the part after the router has finished: 

Here's are a few clips of the routing process. This is shown at the actual speed of the router:

After routing there's still a need for hand work. Some sections of tear out need to be sanded/scraped out (above the left eye, at the base of the neck). The back of the ears had some very strange tool marks that needed to be filled (I used a mix of sawdust and polyurethane). And the area where the block was attached needed to be carved away and finished to match the curvature of the head and texture of the hair.

With some finish and a base: