CNC Mill

After I graduated with a BASc in Mechanical Engineering from the University of Toronto, I decided to see what five years of school had taught me, and I built myself a mill. It’s a 3 axis CNC benchtop vertical machining center, designed to be manufactured and assembled using common hobbyist tools. Unlike conversions of manual milling machines, this mill was designed for CNC control. It has the same components as professional equipment, such as ball screws and linear rails for motion control, and ER-series collets for tool holding.

The frame and motor mounts are made of solid aluminum tooling plate, which has superior rigidity and damping properties compared to hollow aluminum extrusions used in most hobbyist CNC mills.


Frame: 3/8” to 3/4” thick aluminum tooling plate, metric socket head cap screws

Travel: 5.5” X, 5.5” Y, 4.0” Z

Spindle: 400W, 12,000 rpm, ER11 collets, max tool diameter 7mm, <0.0005” runout

Motion: High precision ball screws and linear rails. NEMA 23 stepper motors. <0.0005” repeatability

Control: Arduino Due flashed with g2Core firmware, gShield stepper driver

Tools Required For Assembly: Cordless drill, drill bits, metric tap set, tapping fluid, metric counterbore set, dial caliper, metric hex key set

Power Requirements: Standard 120V 15A outlet

Total Cost: Approx. $2,000

Use Case

This mill was designed for the advanced hobbyist who wants to make high precision parts but does not have the space, budget, or power requirements for a commercially available machine, (E.g. Tormach) but seeks more power, rigidity, and size than desktop hobby mills. (E.g. Sherline, Taig) It was sized to fit on a small table, and currently sits on an IKEA bar cart. Major assemblies can be lifted by one person, and the entire machine can be lifted by two.

A major requirement of the design was that manufacturing and assembly could not use any machine shop tools such as lathes, mills, or even drill presses. The goal was to use only handheld tools. Consequently, the frame design took advantage of cut-to-size aluminum tooling plate. Aluminum tooling plate is sold milled flat, allowing for precise construction of the frame. Ordering the plate cut-to-size eliminated the process of cutting the pieces, leaving only drilling, counterboring, and tapping to complete manufacturing. These processes were easily done with a cordless power drill and a tap set.

Because the mill was designed primarily for CNC control, motion components were chosen for high precision and low friction. All three axes are supported with linear rails and moved by ball screws driven by NEMA 23 stepper motors.

A major compromise made was the spindle choice. The hobbyist use case required that it be powered by a standard 120V wall outlet and not require a compressed air source for tool holding. As a high precision part, cost was also a factor. A basic spindle powered by a brushless DC motor was sourced from eBay.

To reduce cost, an Arduino-based system was chosen to control the mill. An Arduino Due was flashed with g2Core, an open-source CNC motion control firmware. A gShield motor controller is mounted to the Arduino to drive the stepper motors. The UI of the controller is provided by Chilipeppr, a free and open-source workspace designed for CNC control. The total cost for electronics was under $100.


Throughout the design process, the largest challenge was avoiding conflicts between bolts. The saddle, where the X and Y axes connect, has a high concentration of fasteners, as well as areas where the linear rails are in close proximity to structural frame connections. Fully modelling each counterbored hole and its fastener helped to avoid any conflicts.

The first manufacturing challenge was found in sourcing the aluminum tooling plate. Although a standard product, it is not regularly stocked by most metal suppliers. A local supplier was found, but had a $90 per piece minimum order, no matter how small. An online source was then found, which had no minimum per-piece price, as well as instant pricing. This eliminated the process of submitting an order, then waiting for a quote before finalizing the purchase.

Setup of the electronics was also challenging. Documentation for firmware settings is extensive, however steps for flashing the firmware and connecting components to the pinout on the Arduino board had to be found through a combination of YouTube videos, Github pages, and forum posts.

Remaining Work & Upgrades

The two tasks remaining in this iteration of the mill are to build an enclosure and install limit switches. An enclosure will contain dust and debris, as well as significantly reduce noise. Electronic limit switches allow the machine to stop without crashing into the mechanical hard stops, but with more reliability than software-defined limits. It also enables the use of automatic homing for easier setup.

Future upgrades will involve an overhaul of the electronics system. A new, more reliable CNC controller will be chosen that doesn’t rely on a patchwork of software to function. The steppers will be replaced by Teknic ClearPath brushless servos, further increasing precision and reducing noise. The spindle will also be replaced with a name-brand unit with higher reliability, power, and precision.