11. Final project¶
Design and Production¶
The goal of my design is to provide an inexpensive but sturdy and usable machine, which uses off-the-shelve parts wherever possible to keep costs and machining time manageable.
My final design ended up being a three axis CNC machine with a fixed gantry and a theoretical working area of 280x280x75mm.
Below you can download the Fusion 360 file for the whole machine. For manufacturing purposes the custom components of the machine have been saved in invdiviual files and inside them you will find the settings used to manufacture each part. The invdiviual parts are provided for downloading below in the appropriate sections. During the production of some parts some settings have been adjusted directly on the machine and are not reflected in the settings. When trying to replicate these parts please keep this in consideration and adjust as needed.
X-Axis¶
The X-Axis provides the base of the machine and has to be very sturdy. The shoulders of the Y-Axis are directly attached to its sides.
Frame¶
The Frame is the main part that is giving the X-Axis its strength. It is made up of six 30x30mm Aluminium profiles which are held together by angle brackets. The four center profiles have a length of 50cm and the two profiles on the outside have a length of 40cm.
Motor Holder¶
The Motor Holder is attached to the motor driving the lead screw for the X-Axis on the back and to the two innermost profiles on the sides. This design both provides the right distance between the two profiles for the rails to be aligned to the holes in the Reference Plate while also centering the motor.
Bed Assembly¶
Reference Plate¶
Guide Block Spacer¶
Lead Screw Receiver¶
Endstop Target¶
The Endstop Target is intended to be used as a target for an endstop located on the underside of the reference plate. This part is necessary since the the only point where the reference plate comes close to another usable target point is the motor holder between the two innermost profiles. The problem with positioning the endstop there would be that there is no good was to route the cable from the endstop to the controller. In addition the exact position of the Endstop Target is adjustable.
Y-Axis¶
The Y-Axis uses fixed sides with two 42cm profiles connecting them. On the profiles 40cm linear guide rails are mounted where the Z-Axis can move.
Left Shoulder¶
In the Left Shoulder two sunken holes for the Aluminium profiles, a cutout for the coupler and leadscrew and screw to mount the motor on the outside are integrated. Integrating sunkel holes for all the motor screws creates a flat surface allowing the Z-Axis to reach its full movement potential.
Right Shoulder¶
The Right Shoulder is identical to the Left Shoulder except for the missing motor mounting point.
Z-Axis¶
The Z-Axis is the most complex assembly in the whole machine as it was optimized to have as small a width as possible to make the most of the space available for movement.
Top Plate¶
The Top Plate hase holes for the motor mount, the guide rods and the Aluminium profiles located on the sides.
Bottom Plate¶
The Bottom Plate is a simplified and streamlined version of the Top Plate. This is possible since it doesn’t need holes for the motor.
Motor Spacer¶
The Motor Spacer is the main component allowing the whole Z-Axis assembly to be much thinner. The used motor has a circular protusion in the middel. The cutout for this protrusion would otherwise have to be integrated into the Top Plate, which thanks to the machining direction would required the hole to go the whole way through and would mean the top plate would be much wider to allow for it.
Bed Assembly¶
This assembly connects the moving Proxxon to the static Z-Axis frame.
Holder¶
This part provides attachment points for the actual spindle holder.
Proxxon Holder¶
The Proxxon Holder has a hole to fit a Proxxon MICROMOT 50/EF inside and is the only part that has to be replaced if there is a desire to use another spindle.
For more on this part please take a look at 6. 3D Milling.
Y-Axis Mount¶
As described before the Y-Axis has two linear rails mounted on its connecting profiles. This assembly is designed to fit onto it and provide the attachment for the rest of the Z-Axis to the overall machine.
Mount Plate¶
Mounting plate to attach to Lead Screw Receiver and linear guide blocks on one side and to the profiles of the Z-Axis on the other.
Lead Screw Receiver¶
Designed to fit an antibacklash nut and align with the lead screw coming from the side of the Y-Axis.
Assembling everything¶
Having manufactured all parts I started assembling everything together.
Y-Axis¶
As the Y-Axis is the simplest axis to assemble and its width is needed to assemble the X-Axis I decided to start with it.
Everything went together as planned. Weirdly while the profiles fit into the Right Shoulder I had some difficulties getting them to fit into the Left Shoulder and had to manually enlargen the holes in that side.
Overall this axis turned out well and feels very sturdy when being picked up.
Z-Axis¶
Next up I assembled the Z-Axis. One aspect that I didn’t pay attention to was that the profiles can rotate freely while being tightened down. To alleviate this problem I clamped down the profile to the table.
After securing the Bottom Plate I hammered in the guide rods and slid the Holder in. Finishing everything by installing the Top Plate, the motor spacer and the motor with attached lead screw.
X-Axis¶
With both other axes assembled the only thing left to do was to assemble the X-Axis. Using angle brackets to get the profiles perfectly perpendicular to each other I am going corner by corner to assemble the outer profiles. Before screwing done the second side profile the already assembled Y-Axis was attached to the other side to get the exact distance between the two profiles right.
After assembling the outer frame the two innermost profiles, already attached to the Reference Plate and the Motor Holder, was put in and aligned with the center using a caliper. The beautiful result of all this you can see below.
Completing the above steps we end up with a nearly finished machine.
Final touches¶
After attaching the Proxxon Holder and the Arduino with CNC shield I connected everything to my MacBook and fired up Ultimate Gcode Sender Platform v2.0.
Grbl configuration¶
While the default settings for Grbl are chosen to get the machine moving safely without any changes they are not accurate in terms of how many steps are actually needed to move an axis a certain amount of millimeters. In the following I will shortly describe which settings I changed and provide the full settings list of my machine. These settings are not final and only meant to be good enough to get a first testcut done.
If you want more info about the used electronics have a look at 10. Control Software where I go into more detail.
X-Axis¶
While the X-Axis moves very nicely for the most part when it comes closer to the front it starts loosing some steps due to a slight misalignment between the height of the lead screw receiver and the center of the motor. For this reason I selected the furthstest most point as the zero point of the X-Axis. With its configuration to use quartersteps and a T8*2*8 leadscrew it has 100 steps/mm and 200mm of movement range. In testing it had some problems with fast movements and was run at 100 mm/min, but it should be able to be run at much higher speeds once the misalignment is fixed.
Y-Axis¶
The Y-Axis has the same problem with the misalignment of the lead screw receiver and the motor center but it is more noticeable on this axis. As it has the same configuration as the X-Axis it also uses 100 steps/mm and ran at 100 mm/min, but has a maximum movement range of 230mm.
Z-Axis¶
The Z-Axis is the best moving axis out of all three and is configured to use sixteenth steps. In combination with a T8*2*8 leadscrew this results in 400 steps/mm and 75mm of movement range. In testing moving at a rate of 500 mm/min worked reliably with higher speeds also not seeming to be a problem.
Final configuration¶
In the end I landed on the following Grbl configuration, which is definetly not yet perfectly optimized but is good enough to do some first cuts and has the appropriate values for the steps/mm for the axes and good softlimits.
$0 = 10 (Step pulse time, microseconds)
$1 = 25 (Step idle delay, milliseconds)
$2 = 0 (Step pulse invert, mask)
$3 = 4 (Step direction invert, mask)
$4 = 0 (Invert step enable pin, boolean)
$5 = 0 (Invert limit pins, boolean)
$6 = 0 (Invert probe pin, boolean)
$10 = 1 (Status report options, mask)
$11 = 0.010 (Junction deviation, millimeters)
$12 = 0.002 (Arc tolerance, millimeters)
$13 = 0 (Report in inches, boolean)
$20 = 0 (Soft limits enable, boolean)
$21 = 0 (Hard limits enable, boolean)
$22 = 0 (Homing cycle enable, boolean)
$23 = 0 (Homing direction invert, mask)
$24 = 25.000 (Homing locate feed rate, mm/min)
$25 = 500.000 (Homing search seek rate, mm/min)
$26 = 250 (Homing switch debounce delay, milliseconds)
$27 = 1.000 (Homing switch pull-off distance, millimeters)
$30 = 1000 (Maximum spindle speed, RPM)
$31 = 0 (Minimum spindle speed, RPM)
$32 = 0 (Laser-mode enable, boolean)
$100 = 100.000 (X-axis travel resolution, step/mm)
$101 = 100.000 (Y-axis travel resolution, step/mm)
$102 = 400.000 (Z-axis travel resolution, step/mm)
$110 = 500.000 (X-axis maximum rate, mm/min)
$111 = 500.000 (Y-axis maximum rate, mm/min)
$112 = 500.000 (Z-axis maximum rate, mm/min)
$120 = 10.000 (X-axis acceleration, mm/sec^2)
$121 = 10.000 (Y-axis acceleration, mm/sec^2)
$122 = 10.000 (Z-axis acceleration, mm/sec^2)
$130 = 200.000 (X-axis maximum travel, millimeters)
$131 = 230.000 (Y-axis maximum travel, millimeters)
$132 = 75.000 (Z-axis maximum travel, millimeters)
First test cut¶
After testing the axis seperately it is time to test the working of the whole system. To do this I measured a block of foam, modeled a simple T for Tobias in Fusion 360 and exported the Gcode as described in the previous assignment.
With the block of foam attached to the bed…
and the generated Gcode loaded into Ultimate Gcode Sender Platform v2.0…
I set the zero point and started the machine…
and got the following result.
As you can see the program ran to completion and while it missed some steps in the Y-Axis due to the the motor driver overheating the results in the other axes look great. I am very happy with this result especially for the first part manufactured on my machine.