So, you have a CNC laser cutter but you want a CNC mill? Problem solved.
This project is a small CNC mill that can be assembled from store-bought and laser-cut parts for about $800 without machine tools. (If you have access to a shop with a chop saw and a drill press that'll be helpful, but you can get by with a hacksaw and some wrenches.) As pictured it has about a 4" x 6" x 1.5" working volume, but it can easily be expanded and modified.
The killer app for this is making custom printed circuit boards. But it can also make plastic and wood machine parts (including all its own parts), mill custom aluminum instrument panels, create stencils, and make artistic etchings for print-making.
I've included both Adobe Illustrator and Autocad DXF files for the custom parts, as well as an Arduino sketch for controlling the brushless motor.
(1) Setting expectations, and words of caution
(2) Buy parts and find tools
(3) Laser cut the custom parts
(4) Assemble the Z-axis and spindle
(5) Assemble the X-axis carriage
(6) Assemble the Y-axis and bed
(7) Assemble the frame
(8) Wire it up
(9) Tuning, tweaking, and milling tips
(10) Software you may find useful
Step 1: Setting expectations, and words of caution
openMill is really cool, but it's not the first or the best table-top mill out there. We're huge fans of the MTM projects at MIT (particularly the work of Jonathan Ward, Ilan Moyer, and Nadya Peek), and Othermill, which were great sources of inspiration and ideas, many of which we shamelessly duplicated. The Shapeoko is another great example, and there are tons of other people doing neat DIY CNC projects, each with their own strengths and weaknesses.
We focused on making openMill easy to source parts for, build, and modify - even at the expense of design elegance or performance. You'll almost certainly see parts of this design you want to change - that's the point! We've tried to make it easy for you to make the changes you want.
How well will openMill perform? It depends on how well you build it and how well you use it. If it's well built, lubricated, and aligned and you keep the materials feeds low you should be able to get precision in the .001" range. But if you don't make sure the frame and rails are square and try to mill hard materials too fast then you'll get backlash and chatter.
More generally, even though it may only take you a few hours to assemble the mill, this project isn't really plug and play. Machining is hard, so expect a learning curve before you go from functioning mill to quickly making useful parts. You'll probably break some bits by trying to run bad G-Code. You may not get the axes well aligned on your first try. openMill can't stop you from doing things wrong (including things that will destroy the mill). But the fact that the parts are all cheap makes this a fun way to learn and experiment.
We've also worked hard to keep the costs low and the design robust, so you can make an openMill for about $800. But you should budget some extra money for duplicate parts in case you make a mistake or break something. And once it's working you'll find that you want to buy a few more endmills and some raw material to experiment with. We've tried to make it easy to upgrade. For instance, if you want to add a fancy lead-screw and wear-compensating nut (and boost the project cost by about $200), the parts already include mounting holes for them.
openMill is a high-speed super-sharp rotary cutting tool that moves robotically by itself without regard to the presence of valuable objects (read: fingers) in its path. It can easily put a hole all the way through your iPhone and the hand holding it, throw a metal shaving (or broken bit) clear through your eye, or set material on fire with friction. It also doesn't have shields or safety interlocks. So respect the potential for injury and danger, don't let it run unattended, wear safety glasses, and keep your hands away from it while the spindle is on. Seek adult supervision if you're under, say, 40.
Step 2: Buy parts and find tools
I sourced the parts from:
McMaster-Carr (T-slot framing, acrylic, linear shafts, bearings, fasteners)
SDP-SI (Rotary shaft, timing belt pulleys, rigid coupler)
Inventables (Helical couplers, stepper motors, Arduino, GRBL shield)
Hobby king (Brushless motor and controller)
Digikey (Power supplies)
MSC Direct (Endmills and drill bits)
A full parts list is attached as a CSV file.
You can cut the laser-cut parts yourself, or send them off to an online service. I've had good experiences with http://www.pololu.com
Tools you'll need:
Chop saw for aluminum framing (or hack saw and some elbow grease)
Drill press or vertical mill for boring out the rotary shaft (optional, but helpful)
Bench vise for press-fitting bushings (But you can get by with a 1/4-20 bolt and some wrenches)
Imperial and metric hex wrench sets
Philips screw driver
7/32 crescent wrench
Soldering iron, wire clippers
Step 3: Laser cut the custom parts
Now you'll need to fabricate the custom parts from 1/4" (6 mm) acrylic. Acrylic is a fantastic material because it's cheap, it laser cuts great, and is very rigid. Most of the holes in the custom parts are clearance holes, so it doesn't really matter if they come out a little big or a little small. But many of the bushings are press-fit, so these holes need to be the right size. This is tricky, because if your laser spot is bigger, out of focus, or just very hot you'll get a slightly larger hole. I put the press-fit holes on a separate layer in each file so you can adjust their size (after cutting test-holes) until you get a nice firm press-fit. (Make sure the hole centers stay in the same place!) If you're sending the files off, error on the size of holes that are too small. It's much easier to open them up with some sandpaper than to make them smaller. (However, lining them with epoxy will work for this in a pinch.) You'll notice that the top side of the cut hole is usually a little larger than the bottom side. This can act as a wedge to help you seat your press fit parts.
All of the 1/4" thick parts can be cut from two 12"x24" sheets of acrylic. White acrylic is easy to get and looks great, but you could use clear or any other color for a custom look. There are also a small number of 1/8" thick parts (These are the captive teflon nut holders, in the layer "Thin"). These will all fit easily on a 6"x6" sheet.
If you want to try making your parts out of a different material (MDF, aluminum, delrin) then go for it. But acrylic works pretty well...
Step 4: Assemble the Z-axis and spindle
Now you'll actually start assembling! We'll start with the Z-axis.
(1) Use 4 flanged bushings and 2 1-inch brass sleeves to join the top and bottom plate of the Z-axis. Use a bench vise to press the flanged bushing into the sleeves to clamp the acrylic in place. (This is a very firm press, but is necessary to keep the joints from rattling apart due to milling vibration.) If you don't have a vise you can make one using some washers, a 1/4-20 bolt, a 1/4-20 nut, and some wrenches. Don't over-press or you'll crack the acrylic. Once the bushings and sleeves are mounted to the plates, make sure that a 3/8" shaft will slide smoothly through each assembly. If not your bushings are probably misaligned. A little more pressing will straighten them out. If you don't get smooth sliding motion your Z-axis won't travel well, so fiddle with this until you get it right.
Pro Tip: If you've got a press-fit that won't quite go in, cool the inside part on ice to shrink it.
(2) Now add the spindle sleeve. This is clamped with a flanged bushing in the top plate, but extends through the bottom plate. Again, use a bench vise to seat the bushing into the sleeve.
(3) Mount the captive teflon nut assembly.
(4) Add the 1" stand-offs (and the 4-40 screws that hold them in place).
(5) Drill out the rotary shaft. This is optional but helpful - if you drill out the shaft you'll be able to choke up farther on your endmills and drill bits, which will reduce flex and vibration. But to do it you'll need a drill press and a vise to hold the shaft. Use a #29 bit and plenty of cutting fluid. Starting the hole with a center drill is also quite helpful.
(6) Add the ball bearings, 1/4" rotary shaft, thrust washers, rigid shaft coupler, and timing belt pulley. When you tighten the timing belt pulley onto the shaft, press down on the pulley to create preload on the shaft. You should have enough preload that the shaft can't slide up and down through the bearings, but it should still spin freely.
(7) Mount the motor to the lower plate using M3 screws, but don't tighten them down all the way. Then add the 2nd timing belt pulley and belt. Now you can tension the belt by pulling the motor away from the spindle shaft and tightening down the M3 screws. The belt doesn't need to be tight - just snug. You should now be able to spin the spindle shaft by turning the motor. If you feel resistance ease up on the shaft preload or belt tension.
Step 5: Assemble the X-axis carriage
This X carraige holds the Z-axis assembly and allows it to move up and down, and also slides along the X-axis rails.
(1) Start by press fitting flanged bushings into the rail holes, and clamp them by press fitting them into 1/2" brass bushings. Again, a 1/4-20 bolt can function as a vise to press fit these in a pinch.
(2) Mount the 20 mm right angle brackets to the side plates (with M5 screws and locknuts), and one NEMA17 stepper motor (with helical coupler) to the top plate (with M3 screws). Also, add the captive teflon nut assembly to the side plates (4-40 screws and nuts). You only really need one captive teflon nut. But if you're clever you can probably figure out how to preload two of them to reduce backlash.
(3) Mount the 4" rails and the Z-axis parts that go on them. Don't forget the thrust bearing and shaft collars!
(4) Use M5 screws and locknuts to screw the side and top-plates together. But before you tighten them down, slide 3/8" shafts through the X-axis bearings. This will ensure that you don't tighten down the assembly in a way that's misaligned. If the bearings on each side aren't lined up, the carriage won't slide smoothly. You may need to un-tighten and re-tighten the screws holding the carriage together until you get smooth sliding from both rails. Also make sure that the Z assembly will slide smoothly along the vertical rails. This is critical to getting smooth motion - the motors will be able to push a poorly aligned carriage along the rail, but it will stick and slip and cause backlash, rather than sliding smoothly.
Step 6: Assemble the Y-axis and bed
This part is easy, but again, don't tighten everything down until the rails are placed in the bushings in order to ensure alignment.
(1) Press fit the flanged bushings into the 1/2" sleeves on the bed face plates.
(2) Mount the teflon captive nuts to the bed face plates.
(3) Screw each bed face-plate into the 3" stand-offs using 4-40 screws.
(4) Thread 3/8" rods through the face plates and tighten everything down.
(5) The mill bed is made of two layers of 1/4" acrylic. The bottom layer has small holes that are designed to be tapped for 8-32 threads. These are super-useful for clamping to the bed, so tap these holes. (This is a little bit of a project with a hand tap - you'll be sore afterwards.) Once the holes are tapped, fit the bed over the pegs in the top of the face plates, and secure it with acrylic cement or epoxy. The top layer is a waste board, and has 8-32 clearance holes so 8-32 screws can reach the tapped holes in the bed.
Step 7: Assemble the frame
The aluminum T-slot framing is a little expensive, but it's super easy to modify and re-use, and it's also quite rigid when assembled correctly.
(1) First, cut the 4-foot lengths of framing to size. You'll want pieces that are: [piece lengths]. A chop saw works great for this, but you can do the same job by hand with a hack saw.
(2) Now use 20 mm spacers (with M3 screws) to assemble the rail mounts, and mount them to the cut T-slot framing (with M5 screws). (This turns out to be a lot easier to do before the frame is assembled than after.) You don't need to tighten the screws down - you'll want to be able to slide the mounts around to align them. Also mount the foot plates and rubber feet.
(3) Now assemble the framing using end-feed fasteners and corner brackets. However, as you build it, you'll want to mount the rails, shaft collars, and carriage assemblies.
(4) Once everything is basically put together you'll want to ensure that the X- and Y- assemblies slide smoothly on the rails, and are perpendicular to each other. If not, loosen up the rail mounts and nudge them a little before retightening them. This is a critical stage - your mill will only be as good as the smoothness of the travel and the perpendicularity of the rails. Also make sure that the Z-rails are pointed up, rather than canted forwards or backwards.
(5) Once everything is sliding smooth and straight, add the threaded rails and couple them to the motors using helical couplers.
(6) Use standoffs to mount your Arduino to the mounting board, and end-feed fasteners to mount it to a rail.
Step 8: Wire it up
Now it's time to wire things up! Pop the GRBL shield into the Arduino, then:
(1) Wire motors to the GRBL shield. If your motors don't have connectors on them, you can just take them straight to the screw headers. If they already have a Mate-N-Lok connector (or similar) on them it's worth the time to make an adaptor. (Mate-N-Lok to bare wire.) Check the GRBL shield documentation to make sure you wire the leads correctly.
(2) Wire a power adaptor to the GRBL shield. Again, it's worthwhile to make an adaptor so you can easily unplug power from the shield. I used a 2.1 mm barrel connector.
(3) Connect the brushless motor to its Electronic Speed Controller (ESC) using the 3 press-plugs. (Don't worry about getting the lead mapping right - if the motor spins the wrong direction when we eventually power it up you'll just need to swap two of these plugs.)
(4) Program the 2nd Arduino to control the ESC using the provided autoSpindleDriver.ino sketch. This sketch sends PWM signals to initialize the ESC (which will beep), and then slowly increases the throttle to speed up the motor. You can set both the rate and top speed by changing variables in the sketch. Don't connect the Arduino to your computer (eg. for programming) and the ESC at the same time. The ESC may overdraw current from your USB port and hurt your computer or the Arduino. Once the Arduino is programmed, disconnect it from your computer, and connect it to the ESC. On my ESC, the black wire goes to "Ground", the red wire to the Arduino's "Vin," and the white wire to a PWM pin, pin 10. The Arduino will draw power from the ESC once the ESC is powered.
(5) Fire up the ESC by plugging in the power supply. You should hear several beeps from the motor, and then it will start spinning up. If your motor starts, then suddenly stops it's probably because you ran it too fast and drew too much current for the ESC or power supply. Re-program the Arduino to drive it at a slower speed and try again. To stop the spindle, unplug the ESC from its power supply. If you notice the spindle spinning the wrong direction, turn everything off, swap two of the leads from the ESC to the motor, then try again.
(6) Power up the GRBL shield. Detailed instructions for setting motor current and configuring GRBL for your design are at: https://www.synthetos.com/project/grblshield/ You'll need to give the shield some information about your mill, such as the amount of travel each step produces. With 200 steps/rev. motors, 20 rev./inch leadscrews, and 8x microstepping the shield will need to produce 1259.8 steps to move 1 mm.
Step 9: Tuning, tweaking, and milling tips
Learning how to mill is a big job, but a few specialized hints for the openMill will help get you started.
(1) Really make sure the axes move smoothly and are parallel. Use a machinists square (or any other reliable right angle) to make sure.
(2) If you have too much vibration and noise from the spindle with the motor on, try changing the motor speed (up or down), and also check the preload on the spindle shaft. If the shaft is clamped by the pulley too tightly it won't spin smoothly - too loose and it won't rattle.
(3) It's common that the bed surface isn't totally flat relative to the tool movement. But you can fix this by using a large endmill to mill the bed (or part of it) flat. This is especially useful for doing fine etching, as with PCBs.
Step 10: Software you may find useful
All these tools are really cool, but sometimes they make mistakes. I always check the G-code they generate in a simulator to make sure they don't do anything crazy. Remember that GRBL can't always interpret all of the G-code that CAM programs generate, and this can cause problems too. Use at your own risk, and realize you may break some tools.
Universal G-code Sender - Cross-platform GRBL compatible software for sending G-code to the mill.
PCBgCode - This Eagle ULP generates G-code for isolation routing PCBs from EagleCAD.
Inkscape - Open-source vector graphics drawing.
MakerCAM - Free open-source G-code generation from uploaded SVG files.
OtherPlan - Free CAM software for G-code generation.