Introduction: CNC Using Acrylic and Aluminium


During the last year I built my own CNC machine. I wanted to build a low cost CNC machine for all sorts of little projects I had planned. (turned out that building a CNC machine took up all my "project" time this year)

While scouring the internet for plans to build my own CNC I found a second hand machine that had a router and most of the supplies I needed for 350 euro. I bought this and obviously this "starting" kit greatly influenced my design. In the next year I kept changing my router and now have a machine that is very different from what I bought in the beginning. I think many people go through the same journey when building their own CNC machine and therefore I want to share my "learnings".

Along the way I experimented with (and "learned" a lot from it):

  • Trapezium vs ball screws
  • Analog TB6560 drivers vs digital DM542 drivers
  • 24 V power supply vs 36 V power supply
  • Acrylic supports vs MDF
  • Raspberry Pi to control my GRBL arduino
  • Limit switches (and the horrendous false triggering problems that go with it)
  • Fusion 360 design and Grbl post processing
  • Milling and engraving in wood, acrylic, aluminium and brass.

Unfortunately I didn't document my build along the way but I'll try to explain what I did and share every document and photo I have. I myself benefited greatly from this forum. So this is my take in trying to give something back.


Original supplies: (i.e. after I disassembled everything I bought):

  • 3 x Nema 23 motors
  • 3 x TB6560 drivers
  • 3 trapezium screws (10mm - 55cm length for X and Y, 10 mm - 30 cm length for Z) + nuts and supports
  • 2 x aluminium rails 30mm x 60mm length:50 cm
  • 4 x round steel supports (diam: 20mm) - length: 50 cm (X and Y axis supports)
  • 2 x round steel supports (diam: 16mm) - length: 30 cm (Z axis support)
  • 8 x 20mm SCE20UU bearings
  • 2 x 16mm SC16LUU bearings (note the L which stands for long!)
  • A 24V power supply
  • A Kress FME 1050 router
  • and a LOT of MDF!

For the first version I only added

  • 3 sheets of transparant acrylic 600mm x 300mm x 6mm
  • 3 sheets of black acyrclic 600mm x 300mm x 3mm

I had access to a free FabLab where I could cut these sheets any way I wanted. However, if you have no laser cutter available there are many companies offering this as a service.

Step 1: Acrylic Supports

I wanted to replace the MDF with acrylic (aka plexi glass) as I saw many projects using water/oil spraying as cooling solutions. I didn't see how that would work with MDF. I later learned that you could easily mount a plastic receptacle but in the end acrylic is easy to cut with high precision, is sturdy and looks great.

I always use "2 layers". One transparant layer of 6mm and a black layer of 3 mm on top. I.e. every element is 9mm "thick".


  • a support for the "base": front and back (left hand side and right hand side are made from 30x60 aluminium, front and back are made in acrylic and contain all the holes for the supports and the motors)
  • left and right supports for the Y axis
  • a construction for the Z axis. (see picture)

(see photos to see how they are mounted)

I included my Inkscape designs which I used to laser cut the plates. IMPORTANT NOTE: these are the designs for my first version. I added different ball screws with different supports afterwards and had to drill a couple of "new holes" by hand. I also 3D printed a couple of adapters afterwards. Therefore I would NOT take these design and cut them "as is" but rather use them as inspiration for your own designs.

  • cnc panels1(_black) contain the base and left and right Y axis supports.
  • cnc panels2(_black) contain the Z axis supports.
  • cnc panels3(_black) contain the front plate for the Z-axis and the "bed".

Step 2: Notes on Assembly

This design uses a moving table on the X-axis (in contrast with many others using a riding Y-axis and a fixed table). A major downside of this approach is that you loose part of your maximum "travel" distance. The table is supported by 4 bearings which slide on the supporting steel rods. The distance between these supports is "lost". This means that you easily loose 20 cm of travel distance. When using ball screws of 55 cm this means that you end up with a work surface of 35 cm x 35 cm. The advantage is that this is easier to build and by having a "fixed" Y-gantry, the Y-gantry is much more stable than a moving Y solution. I am working on a solution for this loss of workspace (by using longer rods than my ball screws) but that means redoing every support element of my build. So that'll take a while.

Another attention point is that if you mount the work surface directly on the bearings that the working table is "too low" to pass over the motor. I.e. you need to insert stubs in between to raise the working table high enough so that it can pass over the motor. I 3D printed these stubs but in my first design I also cut those from the acrylic sheets. Any solution will do as long as you can make 4 stubs with the exact same thickness.

Step 3: Trapezium Vs Ball Screws, Grinding Noises, Low Speed Problems

When I bought my "second hand" kit, it contained 10 mm pitch 2mm trapezium screws with TB6550 drivers.

(PS. Pitch means the distance the nut on the screw advances for one rotation. A small pitch means high precision but slow. A high pitch means loss of precision but fast).

Long story short: I could never run it faster than 400 mm/minute and it made a tremendous amount of noise.

If you look up these "symptoms" on the internet you'll get an explanation along these lines:

- Your motor is "stalling" due to: running to fast, bad bearings, misaligned axis, not enough power, ...

The problem is I checked all these things and could never find anything. The main problem turned out to be the "pitch" of 2mm in combination with the drivers and the power supply.

I wanted to have a minimum speed of 1000 mm/minute. With a pitch of 2mm this means that my motor has to do 500 rotations/minute. That's nearly 9 rotations per second!

At 400mm/minute my motor already did 200 rotations/minute = more than 3 rotations/second. My power supply and driver where simply not up to that task so I lost steps and had horrible grinding noises. (However, at very low speeds I could get fantastic precision :-))

So I upgraded. I went for real "ball-screws" this time (these have little balls to guide the nut over the axis which results in less friction and smoother movement). Clearly the pitch needed to be higher too. But what to choose?

I found that typical pitch values for ball-screws are 5 and 10. 10 means one cm for each revolution. A typical stepper motor does 200 steps for each revolution (there is something called micro-steps that allows you to multiply this number by 2/4/8/16/32/... but these are steps "in between". I.e. these steps are not as "strong" (not the same amount of torque) as the "full" steps). So if I consider full steps only, one step will bring me 10mm/200 = 0.05mm further. This was precise enough for me (the whole machine vibrates when you are milling, the errors in bed leveling are typically bigger and your drill is going to "flex" a very tiny bit and even the temperature has an influence on this tiny scale. So all this combined means that it is very hard to reach a 0.01 mm precision on a home built machine). By using a pitch which is 5 times higher than my previous screws I could expect a speed increase x 5. So that should deliver a gain from 400mm/minute to 2000mm/minute.

I bought ball screws with nuts and supports on Ali Express (these) and they work perfectly for me.

By further upgrading my drivers to digital drivers (DM542) and upgrading my power supply to a Meanwell 36V I even reached 2500 mm/minute AND I got rid of the grinding noises.

Step 4: Electronics and Limit Switches

The electronics are nothing special. I used a "bare bone" Arduino and flashed it with GRBL.

I did not add a CNC shield as I already had separate drivers (3 x DM542). The CNC shield is typically used if you install the drivers directly on the shield.

There are plenty of instructables on how to connect a GRBL Arduino with stepper drivers and stepper motors so I am not going to repeat that here.

I 3D printed an enclosure for the Arduino and the 3 DM542 stepper drivers and wired everything up (see photo)

I further used a raspberry 4 with a 7 inch touch screen to run UGS (Universal G Code sender). This could be replaced by a portable but the big advantage of a raspberry is that it is "dust" proof. I set it up with a shared samba drive so I can just copy files from my desktop to my raspberry to start milling.

The down side of not having a shield means that you need to come up with a solution for the limit switches. I installed very simple switches and connected them directly to the limit switch pins on the Arduino. This is a bad idea. These switches do trigger by their own due to interference from the nearby motor cables (separating these cables by a couple of cm does not solve the problem ;-)).

There is a long explanation of what the problem is and how to solve it here: wiring limit switches

It has a nice design of a PCB I need to make and an explanation on how I then proceed in wiring the switches. I am still looking for someone who can make a lot of these and sell me one.

I use my current bad solution for homing only (I disabled hard limits in GRBL) and even then I often get a wrong trigger. Also because my hard limits are disabled I already installed dozens of these switches as I just crushed them while "returning to zero" and other fancy movements (enabling them is not an option as my machine then suddenly stops milling in the middle of a piece). So this is high on my TODO list.

Step 5: Fusion 360 - Orientation

I struggled a while in getting the designs right for the CNC machine I just built.

The first problem is the orientation of the axises.

It seems that typically CNC machines use a rather "weird" (I know I shouldn't judge :-)) definition of the 3 axises.

  • X = moving front to back
  • Y = moving left to right
  • Z = moving up and down

I am not sure that this is standard but saw this configuration many times on the internet.

Now this is different from what I am used to. I am an IT-er and I use normally

  • X= moving left to right
  • Y = moving front to back
  • Z = moving up and down

So X and Y are "swapped". This means if you start your design in Fusion 360 and you create a sketch in "top" view then you have to rotate your design 90 degrees to make it compatible with your machine.

The next problem was the "moving" table.

This builds moves the table, not the router. I.e. to have the router moving "forward" over the table, the table needs to move backward. This means you have to tell GRBL to "invert" this axis.

A full explanation of all settings can be found here:

In my case to invert the X-axis I used $2=1 (this can easily be set using the menu option "firmware" settings in UGS and is then "remembered" for ever.).

A good trick is attaching a pen instead of a bit on your router and let it draw your name. I had to try a couple of times before it came out as expected. I had it in "mirror" writing first, then rotated by 90 degrees, then backwards before it finally came out as it should.

Once you get the orientation right the next problem was "engraving". It sounds so simple. Just make a design with a couple of words and engrave this in a piece of wood or aluminum.

Turns out that this is a lot more involved than I thought. These are the steps:

  • Open Fusion 360 in "Design" mode
  • create a sketch
  • create a rectangle that is big enough to contain all your texts
  • use the text tool to write text in the rectangle.
  • finish the sketch and go to "Manufacture" mode
  • create a setup with no stock (set margin to model to 0)
  • choose 2D "engrave" toolpath
  • Set the bottom to the maximum depth otherwise Fusion decides how deep it will cut based on the tool you selected. (I typically set the bottom on -0.3mm to engrave a brass plate)
  • choose post process - choose Grbl/grbl as post processor
  • post -> a text editor opens with the result

This file always starts with something like this:

  • ...
  • G90 G94 G17 G21
  • ...
  • G54
  • G0 X12.26 Y172.978

The G54 command moves your machine to "zero" first. Now if you set your zero to be just on the surface then your machine goes to zero, lower its bit to the surface and moves directly to its first point WITHOUT lifting Z first! This results in a very big scratch in your piece or equally bad: a broken drill.

So I always replace G54 with "G0 Z15" and move my machine manually (i.e. by selecting Go to zero in UGS) before I sends my G-code. Then the first command will first lift my Z-axis before moving to its first point. There are other solutions but it is good to be aware of these kind of problems before you try your first piece!

Step 6: Milling and Engraving in Wood, Acrylic, Aluminium and Brass.

Trying to figure out speeds and depths for your chosen bit and material is an absolute nightmare when you just start CNC-ing. There are complete encyclopedias written on this subject.

Even when I tried to follow the guides on the internet on the correct speeds and depths it still went wrong. That's because I simply didn't understand enough yet. I didn't know what they were talking about. Things that greatly influence these numbers are the quality of the tool and the quality of the machine. Professional milling machine with professional bits can cut faster and deeper than a home made machine. So if you just port these numbers things still go completely wrong.

So how to start? This is going to sound really weird but: don't bother and just start to experiment BUT within "safe" limits.

What I learned (take this with BIG grain of salt as I am still very new at this and I could be completely wrong here!):

  • Be aware of the dangers! Main dangers are: fire and flying bits. Install a "dead man switch" which stops the machine immediately and make sure you can trigger this "from a distance". (this can be as simple as using an outlet with a switch and a very long cable to your machine). Wear goggles and protective clothing when being close to a working machine.
  • When learning start with a "sturdy" bit and use smaller and smaller bits only if things keep going right
    • Ideally start with a shaft shank bigger than 6.35mm (1/4 inch)
  • You cannot go deep in one cut, (but you can go pretty fast)
    • Wood -> don't do more than 2mm per cut
    • Aluminum/brass -> don't do more than 0.2 mm per cut (you can use multiple passes to go deeper)
  • Don't make very long deep "slots" in wood. Going deeper and deeper in the slot is going to heat your drill. This can and will result in fire if you keep it up without proper cooling!
  • Don't go "too slow". Going slow causes friction, which results in broken bits and/or fire
    • (With slow I mean doing less than 100mm/minute).
    • It sounds like a good idea to start "safe and slow". It is not.
    • I tried milling aluminum and brass and had a hard time telling the difference in quality between 300mm/minute and 1000mm/minute.
    • However: the smaller the bit, the slower you need to go (especially in tight corners the tip of a small bit tends to break while changing directions)
  • Don't go "too fast" when going "deep" Deep and "fast" don't go well together
  • Make sure your bed is "level". Do this by taking the biggest flat mill you have (ideally one that is specifically made for this) and remove the upper layer of your sacrificial board (going up and down until you covered the complete workspace)
  • Acrylic is "difficult". It seems to be soft but after a short while the plastic starts to "melt" and a "blob" attaches itself to your bit. This often results in a broken bit. The trick here is to go fast enough to not build friction so that the plastic doesn't melt but slow enough that you still get good quality. This is an area where I still have to learn and where I really need to have closer look at the speed and depth guides.
  • I had good results using WD40 to "cool" the bit while it is milling brass or aluminum. Just spray a bit on the surface where the bit is milling. (seems the debate is open here. Some people swear it is needed to get good results and others say that it is only needed in "extreme" case like trying to cut through stones with a very small bit). My take is that I always use it on "hard" materials like aluminum and brass.