Final Project

The idea of the CNC machine I designed is to offer a cheap but solid and strong machine. I wanted to be able to mill different types of wood, plastics and aluminium.

My final design of the machine integrated different movement techniques. For the Y- and Z-axis I used a mechanism with a threaded rod and for the X-axis a rack and pinion system.

Underneath you can find the final design of my machine.

CNC Design with Fusion 360

To create the design, I used Fusion 360. The lower frame is made of 45x45 aluminim profiles and the bed is milled from aluminim to have a solid ground. To attach the bed to the profile I use 3mm DIN 912 Hexagon screws.

The y axis consists of four 21mm acrylic pieces, two on each side, which hold the whole construction. The weight is distributed on two linear rails. To move the y axis, I use two stepper motors, one on each side, which are connected to a rack and pinion mechanism. The two motors carry no weight.

The x axis has two profiles with linear rails for weight distribution. To move the z axis, I used a 8mm threaded rod, which is attached to the motor with a coupling. I also use a backlash-free nut to ensure that the part does not move when the motor is blocked.

The z-axis has aluminim parts fixed to the linear rail of the x-axis. The weight of the tool and the motor is held by two 8mm linear rods and the movement is generated by an 8mm threaded rod.

Producing the Parts

The bed of the machine is made of aluminium and was milled with the [2D milling technology] (https://alessandracrotty.gitlab.io/fabmachine/assignments/5.%202D%20Milling/).

The shoulders and the holders of the stepper motors were also milled in 2D. For these parts I used the 21 mm acrylic glass.

The rest of the attachments were made out of POM and 3D milled using the configurations of the 3D Milling assignment.

Motion System

As can be seen from the CAD design of my CNC machine, I have two axes that use the same technology. The Z and Y axes both have a threaded rod that move the head of the machine.

In order to avoid that the load of the head lies on the shafts of the motor, I use for the Y-axes linear guides and for the Z-axes linear rods for weight distribution.

Y-axis:

Z-axis:

For the X-axes I decided to use a rack and pinion system on each side to have the possibility to mount two motors. This increases the torque of the machine by distributing the weight between the two motors.

In the video you can see how smoothly the axes move. It was very important that at this point everything was well aligned, especially the x-axis.

To generate the movement, I decided to use the Nema 17 stepper motors. As I described in the previous task, I will use a threaded rod for the Y and Z axis and a rack and pinion system for the X axes to transmit the movement.

Installing Grbl on the Arduino Uno

To be able to move the axes with the motors, I have to connect them to a stepper motor driver and a CNC shield. The CNC shield is then supplied with a 12V power supply and is also connected to an Arduino Uno to transmit the G code. Here you can find the CNC Shield I used.

Before we can connect everything, we need to install the Grbl software on the Arduino Uno. Here you can find the latest Grbl version. Unzip the zip file in your Arduino library folder. Then open the Arduino software and navigate to File -> Example and you will find a Grblupload sketch. Now simply upload this sketch to your Arduino Uno.

Open the serial monitor and type in $$ to see the default grbl settings.

Universal GCode Sender

Every function of Grbl is available via the serial connection. However, it is much easier to use a graphical interface to control and monitor the CNC machine. As GUI I decided to use the Universal GCode Sender.

To test if the steppers can move the axes, I have to connect everything else. Since I use two steppers for the X-axes, I have to clone the X-axes on the CNC shield. To do this I simply connect the four pins of the X-axis with two jumpers.

For the first test I already used microsteps for each axis. For the X- and Z-axis I used 1/16 microsteps and for the Y-axes 1/4. Below is an illustration showing which pins must be connected if you want to use mirco stepping.

Before the machine is put into operation, we have to calculate the X,Y,Z steps/mm, because Grbl needs to know how far each step will bring the tool in reality. To calculate the steps/mm for an axis of your machine, you need to know the following:

  • The mm traveled per revolution of your stepper motor. This is dependent on your belt drive gears or lead screw pitch.
  • The full steps per revolution of your steppers (typically 200)
  • The microsteps per step of your controller (typically 1, 2, 4, 8, or 16). Tip: Using high microstep values (e.g., 16) can reduce your stepper motor torque, so use the lowest that gives you the desired axis resolution and comfortable running properties.

To calculate this I used the calculator on PRUSAPRINTERS BLOG

Below you will find an example for the calculation of the Y-axes.

For the X-axis I had to use a different kind of calculation, since I used a rack and pinion.

The calculation was: Motor step angle*microstepping/teeth

Once everything is calculated, you have to change the value of the Grbl setting by entering the correct setting number.

You must also specify the maximum travel distance for each axis to avoid collisions. Now you can test the axis using the control panel. You can also create a small G-Code to test if all axes can move at once.

For example:

At the end I changed the microstep of the X-axis to 1/4 because the stepper drivers overheated and restarted after a while. Because of this problem, the motors lost the steps and didn’t get enough current.

Below is a video that uses the G-code printed above to move all axes at once.

Milling Test

Next, I wanted to test the quality and the milling movement of the machine. To do this, I had to set a zero point and generate a G-code file, as I used for the 3D Milling assignment.

I used the jog controller on the GUI to move the axis.

Once each axis was in position, I selected the button Reset Zero. Then I checked if everything was set to zero at the bottom of the controll panel.

To understand how to create the toolpath, go to the 3D Milling assignment. As post process for this machine you need to select Grbl.

Now simply upload the G-Code to the Universal GCode Sender and start the job. As it is a test job I used a low cutting feedrate, but I actually could go much faster.

Improvements

Unfortunately I didn’t have the time to configure everything using the end stops to set a home point. I haven’t tested any other materials either, but all in all it works really well. To prevent the stepper drivers from overheating, I have to add a fan. Then I can also change the microsteps of the X-axes. Another problem has arisen on the X axis. Since the rack is not suitable for this profile, I had to think of a solution for the mounting. But because of the plexiglass the rack is tilted. It still works well, but I want to improve it.

Download

Download the CNC Fusion file