I see lots of small CNC milling machines these days, generally built like 3d printers: made of plastic or wood, or aluminum extrusion and bearings. But unlike a 3d printer, subtractive milling involves huge forces, especially if you're trying to remove lots of metal.
The other thing I observe is that almost all the machines use cartesian axes: linear guides that move in perpendicular directions. This makes a lot of sense in a manual mill where you're moving the axes by hand, but when it's computer-controlled, it's easy to do the math for all sorts of crazy coordinate systems. So it makes sense to improve the machine mechanically in exchange for software complexity that's easy to share and replicate.
So I set out to make a machine that:
- Is small enough to fit on a benchtop. (36,000 pound machining centers are great, but it's always seemed funny to me that such huge machines usually work on workpieces only a few inches across)
- Is stiff enough to accurately and quickly remove lots of metal. I don't mind if it's a few hundred pounds as long as it's compact.
- Exchanges as much mechanical complexity as possible to software.
Here's the result:
The two discs are flywheels from a Chevy smallblock, driven directly by steppers. The upper disc can move the spindle on an arc from the center to the edge of the lower disc, where the workpiece is mounted. So by rotating the two discs appropriately, we can put the spindle over any point on the lower disc.
One nifty side effect of this approach is that we get more torque and more accuracy in the lower table the closer we get to the center.
The complexity front was a huge success: the whole machine ends up being about a dozen parts in all. 8 non-off-the-shelf parts, 5 of which are used twice.
- Table and two legs
- Upper table
- Stepper mounting plate (2)
- Flywheels (2)
- Wheel bearings (4), axle (2), top cap (2), bottom cap (2)
The flywheels are cast iron, which is great for vibration damping. And the wheel bearings are from a Ford F-450 truck, and rated for thousands of pounds of load. The axle is a length of 2 inch steel bar, and the top and bottom caps preload the bearings and hold the assembly together. Here's the assembly, with prototype MDF end caps:
By comparison, here's a MakerSlide carriage picture I found at buildlog.net. It has the custom aluminum extrusion, two mounting plates, six bearings (which typically use eccentric mounts so that they can be tensioned against the extrusion) and a long drive belt:
Way less rigid, and way more complicated.
All of the parts are straightforward to mill on a manual milling machine. The top table is the only part with a curved contour, but it's not a critical dimension, and I just did it because I happened to be using a CNC Bridgeport. Here you can see all the dimension labels I added in Sketchup to help me program the Bridgeport by hand:
Not particularly relevant to the machine itself, but when it came to choosing a controller, I opted to port GRBL to Raspberry Pi rather than using an Arduino. The board costs about the same and has a lot more power, which I figured might be handy if I needed to implement the coordinate transformation in using a CPU-intensive hack.
In the next section I'll cover the many things that are still missing, but here's the end result for the machine in its current state. I taped a marker to the spindle and had it draw the Hackaday skull and wrenches. No Z-axis means no lifting the pen between segments, and no coordinate transform means that the image gets distorted in interesting ways, although it's still quite recognizable when drawn in that part of the space:
Things to improve
This is just a prototype. Here's what needs improvement:
- Backlash. I measured about 0.010" backlash in the ring and spur gears, which is great for a starter motor on an engine, but terrible for a CNC machine. I found a worm gear that will drive those threads with more torque (and more steps per inch), but it'd increase the mechanical complexity and I'm not sure if it'd improve the lash.
- There's no Z axis! Fittingly for a machine that's all about rotary axes, the up-down Z-axis, which needs to be linear, ended up taking more time than the rest of the project combined. I never did manage to create linear motion that I was happy with, so to get it into some semblance of working I finally just bored out a piece of aluminum and held the spindle in place with a big set screw.
- Software support. The math for rectangular->polar coordinates really is quite simple, but integrating it with a G-code interpreter is another matter. I managed to port GRBL to Raspberry Pi, but its assumptions about rectangular coordinates are baked in pretty deeply. My research into TinyG and LinuxCNC don't make me optimistic.
- Most of the machine is still made out of prototype MDF parts. The plan was to start with MDF, then re-do with aluminum, then use steel or cast iron for the final draft. I never got that far, so the black parts you see are just spray-painted MDF.
- Work-holding, tuning and calibration are completely unaddressed.