Introduction: CNC Router

Here's a basic overview of how my desktop CNC was built, I can't really provide a step by step guide, because this project has a lot of small details, and also some questionable design choices. So this article is meant to serve as inspiration to others, who are considering a simular build.

It is a small 3 axis CNC router, controlled by GRBL, it is capable of milling wood ( plywood, MDF and stuff ), plastics like PE, HDPE and acrylic and aluminium, with reasonably high precision and speed.

Step 1: Off the Shelf Parts - Do the Shopping

This machine uses a 400w BLDC spindle motor, that comes with it's own inverter - relatively inexpensive and easy to find, very common solution with hobbyists. But needs a 40V/ 10A industrial power supply. Something like this, but I didn't buy the mounting bracket and power supply with the motor:

Also don't forget to buy tooling and collets.

The machines axes are powered by NEMA 17 40Ncm torque motors, this works fine however, the more torque the better. These are connected to ACME trapezoidal leadscrews, I got online.

Also the Z axis moves on linear bearings, these are the same as on a 3D printer. ( SC8UU )

Also, also it has a separate power supply for the stepper motors. A 12V/10A industrial power supply.

That's it, at least for the mechanical build...

Building this CNC, I used various tools, so I'm not going to list them. Obviously you can figure something out, if you don't have the tools. This bulid has a lot of 3D printed parts, printed on an Anet A8 printer, using ABS plastics - I recommend ABS over PLA for these applications because it's not as brittle.

Step 2: The Frame

The frame is composed of mild steel box sections, welded to each other.

A few different kind of steels profiles are used:

40x40 and 20x20 for the X axis,

40x80 for the vertical supports of the X axis

50x30 for the Y carriage and the 'legs'

50x50 for the main Y axis support

25x25x3 L profile steel for the roller mounts

25x25x2.5 aluminium L profile for the 'sliders'

These were cut to length, drilled, tapped, welded and painted.

Before welding some of the box sections shut, they were filled with sand and gravel - this reduces the vibration noises, and also makes the base heavier, and harder to move.

The frame is constructed, so that there is space for a removable baking pan at the bottom of the machine - it's meant to collect chips, and it kinda works... but the shavings get everywhere nonetheless.

Step 3: XY Slider Sistem

Obviously this kind of machine should use proper linear sliders, but those cost a lot of money...

So I decided to build my own linear-slider system. On the X and Y axis, as the carriage is moving, the ball bearings ( 608 'skateboard' bearings ) are rolling on the aluminium L brackets on both sides. This can handle reasonably big loads, but it needs to be manufactured very precisely, which is very time consuming and difficult especially in this case, because it involves welding.

The parts were screwed together, test fitted onto the axes before welding, then tack welded, and test fitted again, and finally welded again. The tension between the bearings and the rolling surface can be adjusted using bolts and washers.

Step 4: Z Axis

The Z axis carriage is made of box section steel, who's inner dimensions are larger than the spindle motor diameter, so the motor is located inside the metal part, and it is fixed using 3D printed shims ( wedges ), that are bolted to the box steel. - This works great, as long as the shims and the housing have a tight tolerance.

The carriage moves on 8mm stainless shafts, and the whole thing is supported by 3D printed parts.

Step 5: Motormounts and Couplers

The motor mounting brackets are made out of the same steel sections as the frame.

The shaft couplers are 3D printed parts, with a rubber block between them. This shows of the capability of 3D printing to get functional parts fast and cheap!

The connection has to be somewhat flexible, because all the holes were hand drilled, and won't align perfectly.

This works OK, but real flexible couplers would be even better.

Step 6: Control Electronics

The controller is running GRBL firmware, which is a firmware designed for small CNC machines, it's easy to use and opensource:

The machine is controlled by an Arduino Nano, running GRBL, it gets the Gcode instructions over USB, and controls each NEMA 17 stepper via A4988 stepper motor drivers. The A4988 boards get their power supply from a 12V/10A power supply.

I would not recommend using an Arduino Nano, because the newer GRBL firmware does not support it, also this cheap CNC shield for the Nano has some design flaws: stepper micro stepping can't be enabled, because one side of the jumper header is connected to GND instead of 5V; The power connector is prone to oxidation and it can lose connection due to vibrations. - Thease faults were corrected using a soldering iron, and it is working OK now.

All and all it is usable, but an Arduino UNO with it's own CNC shield would be a much better option.

The circuit is simple enough, so I tried making my own CNC shield, witch works fine, but doesn't look very nice...

I had lots of issue with electrical noise. For now I made sure to ground all power supplies and the frame of the machine, and to use a proper grounded mains plug.

Planning to make my own proper PCB shield, soon!

Step 7: CAM and Controll Software

To make the machine move, it needs Gcode commands from a computer.

Gcode can be written by hand, or generated by programs. I mostly use Fusion 360 for generating Gcode, because it's easy to use and has a lot of features. But there are alternatives such as Freecad, which is opensource and rapidly improving.

I'm a beginner machinist, and mostly just do 2.5D parts, so really any software is fine.

Next step is postprocessing the Gcode. This step is optional, depending on the machine, there are existing postprocessors for machines runing GRBL. I wrote my very own in python that works for this machine.

Finally, the lines of Gcode have to be sent over USB to the CNC control board. Programs exist, such as Universal Gcode sender to do just that. But even a simple python script can do the job, so I wrote my own sender script in python.

Would not recommend using my scripts, but I will share the code if anyone's interested:

Also the code from my attempt at a CNC firmwara: ( fair warning, it does not always work - or rather it mostly doesn't work )

Step 8: Parts Made Using It

The machine is usable, but it has a lot of room for improvements.

It's nice to have my very own machine, it can be used for other projects, or as a way to learn CAM and machining in general. Works great for beginners like me, because I don't have to worry about damaging an expensive machine.

Hope these insights helped you, if you're planning to build your own machine.

Feel free to ask questions, or point out if any important detail was left out.

CNC Contest

Participated in the
CNC Contest