Introduction: Benchtop Micro Milling Machine

About: I'm a former bicycle industry designer turned professional jeweler. I like working with my hands and am happiest when I'm in the shop building my creations. If you need help with your project just let me know!

This is a micro sized benchtop mill that is suitable for milling small parts in soft metals such as Aluminum and Brass. While it is a manual mill it wouldn't be too difficult to convert it to CNC by adding suitable stepper motors and a CNC controller.

The travel specs are:

X axis- 150 mm

Y axis- 75 mm

Z axis- 150 mm

This design uses off the shelf assembled linear slides and 80/20 Aluminum extrusion for simple assembly and accurate alignment. The beauty of this design is its modular nature- you can make it any size you want and it's super easy to build.

Be sure to check out the build notes on all of the enlarged images!

Let's get started!

Step 1: Tools and Materials


To build this you will need a few basic tools. I'll list substitutes as necessary.

Machinist's square (for checking alignment)

Allen wrenches

Tap and tap handle- I used both 6mm and 4mm taps.

Calipers (for accurately marking holes to be drilled.)

Bandsaw- You could have Aluminum plate cut online by a company such as Sendcutsend and you can order the 80/20 Aluminum extrusion cut to length. Onlinemetals will also cut material to size.

Lathe- I used a lathe for making handles and the motor mount plate but it's not absolutely necessary. You can buy premade handles and use a different method for mounting the motor.

Drill press- This is pretty much a necessity for making this as it'll be very difficult to drill accurate holes by hand.


I literally had almost all of these materials on hand- some of it I had been hanging on to for years. Having said that I have checked to make sure all of the materials used are widely available. I think the only new parts I bought were the ER11 collet chuck and the 12V power supply.

Linear slides- I used Igus SLW prebuilt linear slides. The size I used is the 1040, which has a 10x2 trapezoidal lead screw. One full rotation of the lead screw = 2mm table travel. The beauty of these is that they are configured as bolt on units so the rails and the lead screws are in perfect alignment and you don't have to worry about them binding- getting this alignment right is one of the most difficult aspects of building a milling machine. Igus has a huge variety of linear slides available in all sorts of configurations.

A less expensive alternative would be to use a Proxxon KT70 XY table for the base and an Igus linear slide for the Z axis. I've seen some really nice machines built using the Proxxon table but you're a bit more limited with small table size.

Note that with these Igus linear slides the supported load must be less than 2X the bearing distance- If your Z axis (vertical axis) has bearings placed 2" apart your spindle must be placed less than 4" out from the Z axis base or you run the risk of premature bearing failure or binding. The further apart the linear slide bearings are placed the more rigid the machine will be.

Base frame- I used 80/20 2" x 4" Aluminum extrusion, approximately 22" long. eBay is great for 80/20 surplus sales.

Lower braces- 3/4" thick Aluminum plate, 3" x 5" (all of the Aluminum plate was sourced from a local Aluminum recycler as it was MUCH less expensive than sourcing online.)

Upper mounting plate- 3/4" thick Aluminum plate, 4" x 10.5"

Lower mounting plate- 3/4" thick Aluminum plate, 4" x 7.5"

Various thicknesses of Aluminum plate/round stock for handwheels, tooling plate and motor mount plates.

Steel nuts- I used 1/2" x 1/8" steel bar. You can buy premade T-nuts online from 80/20 but they cost a lot more.

Spindle- I used an old Foredom #44 handpiece for the body (check eBay) and a ER11 8mm shaft collet chuck. A Foredom #30 handpiece should also work as it has the same 8mm x 7mm x 22mm bearing size. It is also possible to retrofit machine tool high speed angular contact bearings in this size.

Pulleys/belt- I used a MXL timing belt and pulleys.

Motor- this was sourced from a cheap 14V Makita cordless drill at my local ReSource.


12V 30A power supply- from Amazon. Note that this power supply does not include a cord or power switch. I used an old computer power supply cord and a regular wall/outlet switch.

Arduino- I used a Pro Mini but any Arduino will work.

5K potentiometer (10k will also work)

5V voltage regulator- I used one of these but a 7805 would also work.

Speed control- I used an old Ace R/C 30A speed control I had sitting in a box for 25 years (I knew my hoarding would pay off!) but just choose a speed control suitable for your motor that can take a PWM control input- almost all R/C speed controls are set up like this.

Hobbyking is a great source for inexpensive electronic speed controls (also called an ESC.) Note that the majority of modern R/C speed controls are designed to be used with brushless motors but you can still get inexpensive brushed controllers if you happen to find a suitable DC brushed motor.

Step 2: Building the Base

Begin with the 80/20 extruded Aluminum base. This is the backbone of the machine so it's important to get it setup nice and square- use a machinist's square to get the alignment correct. An 11" long section forms the back upright and a 10.5" long section is used for the lower base. These are bolted together using braces made from 3/4" thick Aluminum measuring 5" tall by 3" wide at the base (the exact shape of these is unimportant.)

I made steel nuts from 1/2" wide x 1/8" thick steel bar by drilling holes and tapping them with a 6mm tap. Two of the edges of the nut need to be beveled so it can slide in the extrusion.

The 3/4" thick Aluminum upper and lower mounting plates were then bolted to the extrusion using 6mm bolts. These plates have 6mm tapped mounting holes in them to accept the linear slides.

Mounting the plates like this allows them to slide up/down and forward/back for positioning adjustment. This makes adjusting the mounting height of the Z axis a breeze so you can raise it later on if you need more room under the spindle to hold a tall part in place.

The reason for using 3/4" thick Aluminum plate is twofold: First, It gives a nice solid surface to mount the linear slides and second, it drastically increases the mass of the machine making it much more rigid and less prone to vibration.

Step 3: Fitting the Spindle and Motor

The spindle is made from an old Foredom #44 handpiece that had been disassembled so only the body and bearings remained. The ER11 collet chuck simply slides right in place and a MXL timing belt pulley is fastened to the collet chuck shaft using a set screw (a spacer is needed so the pulley clears the top of the spindle housing.) It's not the fanciest spindle out there but it works pretty well for small sized end mills and it's very inexpensive and easy to make. There is much debate about using deep groove radial ball bearings in a spindle but for lower RPM applications (under 20,000 rpm) on small mills it seems to work just fine as both Taig and Sherline milling machines use them. For high speed/high loading spindles that are running all day long angular contact bearings are the way to go and proper balancing of the assembly becomes critical. For more info about home made high speed spindles have a look here, here and here.

The spindle mount was made from an old bicycle 1" round tubing clamp block. The tube clamp block is bolted to an Aluminum plate that attaches to the Z axis slide. To the front of this block is mounted a 3/4" thick by 1 1/2" wide Aluminum bar that serves as the motor mount support. The upright plate that supports the motor mount is made from 1/4" thick Aluminum plate and has slotted holes at the top for adjusting belt tension. The slots were made drilling holes and then filing with a small round file.

The motor came from an old 14V Makita drill I found and the mounting plate for it was made from 1/2" thick Aluminum. I had to turn a recess in the mounting plate for the motor using my lathe so the motor shaft has enough clearance to mount a MXL timing belt pulley on the other side. This is by no means the only way to mount a motor- there are probably fifty different mounting methods so choose whatever works with the motor of your choice.

Step 4: Making Handwheels

Now I needed some handwheels!

I only had one suitable handwheel in my junk box so I made the other two by turning them from round Aluminum bar stock using my lathe. I made the knobs on the handwheels from some 1/2" diameter bronze rod I had laying around. There is a recessed hole in the knob and they are attached to the handwheels using 4mm screws.

The handwheels are attached to the linear slide lead screws using 4mm set screws ( I used socket head cap screws instead of traditional set screws as they're easier to remove later on if the handwheels need to be replaced.)

Step 5: Motor Electronics

To give the motor variable speed I wired up a R/C DC motor speed controller (more commonly known as an electronic speed control or ESC) to an Arduino.

There is a voltage regulator connected to the 12V power supply to provide the necessary 5V to the Arduino. While the Arduino Pro Mini I used can handle the 12V output from the power supply I wanted to use a separate 5V regulator in case I ever swapped out the power supply for something with a higher output if I ever go to a more powerful brushless motor.

The Arduino just acts like a servo tester in this circuit- it provides the necessary PWM signal to the motor controller that tells it to change speed based on the position of the potentiometer. Instead of the wires going to the servo they go to the R/C input of speed controller. The wiring and code for this is extremely simple. Of course you can also use an inexpensive pre made servo tester to output the signal to the speed control.

Here's the code-

Controlling a servo position using a potentiometer (variable resistor) by Michal Rinott

modified on 8 Nov 2013 by Scott Fitzgerald */


Servo myservo; // create servo object to control a servo

int potpin = 0; // analog pin used to connect the potentiometer

int val; // variable to read the value from the analog pin

void setup() { myservo.attach(9); // attaches the servo on pin 9 to the servo object }

void loop() { val = analogRead(potpin); // reads the value of the potentiometer (value between 0 and 1023) val = map(val, 0, 1023, 0, 180); // scale it to use it with the servo (value between 0 and 180)

myservo.write(val); // sets the servo position according to the scaled value

delay(15); // waits for the servo to get there }

The neat part about this is you could use this speed control setup to make a power feed for the X axis table by connecting a geared motor to the X axis lead screw!

Step 6: Making a Tooling Plate

Since the top of the X axis linear slide is bare I needed to make a tooling plate. A tooling plate is what allows you to bolt things like spoil boards and vises/hold downs to the X axis so you can hold parts to machine.

I made the plate from 3/8 thick Aluminum and drilled holes on a 1" square pattern and tapped them with a 10-32 tap. Since there were a lot of holes to tap (and the material wasn't too thick) I mounted the tap in my drill and used that to drive the tap (with lot of cutting fluid.) Worked great and a total time saver!

As well as just using the tooling plate I wanted to be able to mount a T-slot plate for greater versatility. The profile I used is 80/20 1030 (1" x 3") that has slots on 1" centers. This is done by drilling holes through the T-slots at the ends just large enough for a allen head wrench to pass through to tighten the 10-32 socket head screws that secure it to the tooling plate. Super simple and it only takes a couple of minutes to bolt it in place. Now I can mount things like sliding low profile vices and the small rotary table I'm building.

Wait a minute... Mixing metric and imperial?! How dare you sir!

Yes - absolutely sacrilegious but there's a good reason for this. My Taig lathe uses this 1" bolt spacing and 10-32 thread mounts for all of its accessories and I wanted to be able to swap parts easily between my lathe and my mill. So totally justified. :)

Step 7: Finished!

And there you have it! I powered it up and did some test cuts and it works wonderfully. I have been wanting a small mill like this for a very long time as I have so many projects that can make use of it. :)

Yes you can buy milling machines relatively inexpensively these days but the beauty of building something like this is you can get exactly what you want, you know what goes into it and you can modify it later on to suit your needs.

If I didn't already have a motor and speed control I would have definitely gone with an inexpensive brushless setup as they are very quiet and quite powerful (this drill motor is not quiet.) Ideally I would make the entire spindle from scratch using matched precision angular contact bearings with proper preload adjustment, etc. for higher spindle speeds but for right now this setup works quite well.

As soon as I have more time I'll make a proper case for the electronics and I'll build some additional tooling for it to make it more useful. When that happens I'll be sure to update this.

As always if anyone has any questions just ask- thanks!

Metal Contest

First Prize in the
Metal Contest