I needed a CNC machine for other projects.  I could not afford to buy one as even 'desktop' machines can be as high as £1500 and so I decided to build one.  I had two criteria.  The first was that it had to be accurate and so that precluded anything made with plumbing materials, wood or plastic parts and secondly, if I was going to build it, then it had to be a useful size to enable me to use if for virtually any project that I take up.  Generally, the larger you build a CNC, the more costly it is in terms of proprietary parts such as linear rails and lead screws, etc.  However, my machine is made from materials easily obtainable from hardware and building products stores and even some parts from a salvage yard although some metal parts will need to be laser or plasma cut.  Despite it's relative cheapness, with care, you can construct a machine that is not only sufficient for all DIY use but probably good enough for light industrial use for plasma cutting, etc.  My machine is not quite assembled (I still have the electrical wiring to do) but t

This project was originally intended to be published in 'instructables' as a series but I have decided to publish the whole project.  I have already published an instructable for the linear rails but will include an updated version in this one.  This is going to be a BIG instructable as I will try to take you through every step to give a finished mechanical part of a working CNC machine leaving you just the electronics of your choice to fit.

The whole project was designed in 'Solidworks' as a 3d model to ensure viability of parts.  As additional parts were designed, they were inserted into the 'model' to ensure fit and practicality.  Several metal parts that require laser or plasma cutting were drawn in 'AutoCAD' to provide 'DXF' files that can be used by your local fabrication shop to cut the metal pieces.   The DXF files for metal cutting can be downloaded from  I had to upload the files to another site rather than AutoDesk 123 as there was no facility to upload multiple files onto a project page. The required metal thickness for each file is denoted in the title (i.e.; 16 gauge (1.8mm) and 5mm, etc.  

My machine is not quite assembled (I still have the electrical wiring to do). The long object alongside the machine bed is the metal channel that carries all the wiring to the gantry inside a 'chain' type, flexible conduit.  The picture also shows one of these chain conduits on the top of the gantry which will eventually carry the wiring to the 'Z' axis motor and routing spindle and will also include additional wiring, etc for future expansion to plasma cutting and a 3D printing system which I hope will form further instructables.

I hope you enjoy this instructable and find yourself with a really useful (and relatively cheap) CNC Machine.


For my front and rear cross members, I used two box sections that were originally supports for industrial shelving found at my local junk yard.  The metal thickess is around 16g (1.8mm) and when cut down they gave me a useful width of 785mm.  All of the drawings are designed for this width but there is no reason why you cannot use longer sections (within reason) but you will have to alter some parts of the DXF files to accommodate the extra length.  The cross-sectional size of my members were 40mm wide by 100mm deep.  You can, of course, obtain other box sections though I would advise that they are 100mm - 150mm deep.  For the two intermediate cross-members, I used two 785mm long sections of 50mm x 25mm steel box section.

In order for the cross-members to be fixed to the supported linear rails (see next section) it will be necessary to fix steel cleats to the ends of the box sections.  The attached drawing shows a method of doing this.  I used 3,2mm (10g) x 40mm wide strips of mild steel.  Whatever size metal you use, it will have to fit between the webs of the 'I' section of the linear rails.  For the intermediate rails, I welded 130mm long sections with the strip level with the top of the box section.  For the front and rear sections, I used a 170mm pieces at each end with one end bent at 90 degrees for the last 40mm or so. (see drawing).  To fix the completed linear rails it is necessary to cut a small notch in the rear vertical edge of the front cross member below the attaching flange to allow the lower web of the I section beam on the linear rail so that the underside of the top flange of the linear rail 'I' section fits tightly down on the top of the cross member.  The rear, main cross member will require two such notches as the member is not fitted at the end of the linear rail.  

The two intermediate cross members are fitted at third points along the linear rail between the two main members and ensuring that the top of the box section is fitted tight under the 'I' beam's top flange in order that the tops of all cross members are at the same level to which your chosen machine bed is fixed.  Fixing of the linear rail to the cross member flanges is carried out using M5 bolts (preferably by drilling with a 4.2mm drill  and with the holes tapped with an M5 thread into the box section flanges).  Use at least 3 bolts evenly spaced along each flange.


For the following step (Linear rail construction) it will be necessary to construct a jig.  The jig in the photograph is the one that I used to build my rails.  It worked really well except for one drawback; when drilling the holes, metal swarf was apt to slip down between the steel rod and the jig making it difficult to move the rod and with the possibility of scratching it.  I have modified the sections for the jig channel to include a large cut out which prevents the swarf from jamming against the rod.  Swarf is easily brushed out between the drilling of each hole.  The parts for the jig can be seen in the 5mm.DXF detail attached to this step.  The jig consists of a base plate which has a central 10mm hole for centering on your drill press table and 3 metal strips for each side of the channel.  

The first job is to countersink the six holes on the underside of the base plate for each side of the jig channel.  I used a 10mm drill in my drill press and cut until the maximum diameter hole was just reached at the under surface.  Each side of the jig channel comprises two pieces with 5mm fixing holes and a single (top) piece with 4.2mm holes.  These 4.2mm holes will need to be tapped with an M5 x 0.8 thread (make sure you are tapping the right holes).  After the threads are cut, the jig may be assembled as shown in the photograph using three 5mm strips per side and using countersunk,M5 x 20mm, allen socket, bolts from the underside and ensuring that the cut outs on the channel pieces are facing inwards.  The two holes close to the inside edges and either side of the cut out (not shown in the picture but are on the new DXF file) are for locating dowels used to centre the flat metal bar when drilling.  The holes are cut at 4.2mm and may be tapped for M5 bolts or they may be drilled out to 5mm and short pieces of metal rod brazed or glued into them. 

The trammel piece (part F on the 5mm.dxf file) shown on the front of the drill press table in the photograph  is used to keep the centres between the rod supports constant at 150mm.  The two outer (5mm) holes have 5mm metal dowels brazed or glued into them.  The centre hole has the top part of a broken 4.2mm drill fixed into it.  The trammel is fitted into the two sets of open holes to the left hand side of the channel pieces to provide 75mm and 150mm spacing for your linear rail supports.

And there you have your completed jig and you are ready to go to work on the linear rails.


The long axis of my machine is 1800mm long.  Unsupported linear rails for this length would have had to be massive to support their own weight and that of the gantry, not to mention the stresses imposed by the router.  Supported proprietary rails are very expensive (around £8 per 100mm length).   I overcame this by building supported linear rails at each side for comparatively little outlay.

The main supports for the rails are 25mm x 50mm. aluminium (I am British lol), 'I' Section.  My supports were originally joining pieces for demountable office partitions found at my local junk yard.  A relatively cheap alternative would be to buy a couple of cheap aluminium spirit levels from eBay which can be 1800mm or more long and have the advantage of strength and a milled top edge.   On top of the I sections is bolted a length of 25mm x 5mm bright steel rail.  These rails then support 16mm, bright mild steel or stainless steel rods mounted on metal 12mm long x 8mm dia. electrical spacers which give good clearance for the housings of 16mm linear bearings.

For this section of the build you will need two lengths each of the following materials cut to the desired length of your  machine:
16mm, bright mild steel rod or stainless steel rod.
25mm x 5mm bright steel bar. (black steel will NOT do as it is rolled and therefore does not have the correct width.  Bright steel is ground to the correct dimensions).
25mm x 50mm Aluminium 'I' section (or two builders spirit levels of the correct length)

You will also need sufficient 12mm long x 8mm diameter electrical stand-offs drilled from the standard 4.5mm bore to 5mm enough to make supports at every 150mm.  You will also need a quantity of  M5 x12mm, countersunk, allen socketed bolts for fixing the flat bar to the aluminium and a number of M5 x 25mm, countersunk, allen socketed bolts for fixing the flat bar, through the stand-offs and into the 16mm rod.  Twelve M5 x 20mm countersunk allen bolts are also needed to construct the jig.

The tools that you will need are a drill press, 5mm and 4.2mm drill bits, a set of M5 thread taps  and a set of 'ball-end' allen keys.  If possible, you may wish to obtain a set of 'spiral cut' taps as opposed to the standard items as they are much better for cutting 'blind holes' though they are more expensive and less easy to obtain.

 I have wasted a considerable amount of materials before I arrived at the only viable method of accurate drilling and for that you will have to construct a jig as detailed in the previous step.  

16mm metal rail rod

You will need to go to an engineering shop to have a 1mm deep flat milled onto the 16mm rod as I have found it impossible to drill into a round surface even using an end mill in a drill press.   This depth also provides for the correct width to mate the 8mm diameter stand-offs onto the rod.  (see sketch).

Linear rail construction

First centre your jig onto the drill press table using a 10mm drill fitted into the chuck and through the central hole in the jig bottom plate.  Ensure that the jig is bolted securely onto the drill press table through the diagonally cut holes in the jig plate.

Insert a 4.2mm drill into the chuck and set the table at the correct height so that the tip of the drill finishes 2.5 - 3mm above the jig plate at it's furthest vertical travel.  It is essential that the same amount of travel is used all of the time when drilling the rods and so it is a good idea to use a 'distance' piece that you can place in the jig channel for every time that you change drill size.  

Place the trammel into the first set of 5mm holes at 75mm from the central hole.  Place the 16mm metal rod between the channel guides with the flat facing upwards and butt the rod up against the central pin of the channel.  Place the 25mm x 5mm flat bar over the 16mm rod between the dowels set into the tops of the channel guides and position the end of the bar over the end of the rod.

Drill through the flat bar and into the metal rod to the full vertical travel of the drill bit.  For the first hole only of each rail, tap the hole of the metal rod using the full set of M5 taps finishing with a number 3 (plug) tap.  Replace the 4.2mm drill with a 5mm drill and drill out the hole in the flat bar to 5mm.  Then temporarily, using one of the 12mm bolts, bolt the rod and bar together.  Put the 4.2mm drill back in the chuck and ensure that the maximum travel is as before using the 'distance' piece.  Drill all of the remaining holes through the bar and rod (ensuring that the bar is firmly between the dowels) at 150mm using the trammel at the correct holes in the jig channel guides, for each rail. Then remove from the jig.

separate the two parts of the rail and tap all of the remaining holes in the metal rod using the M5 taps as before then set rod aside. Change the drill to a 5mm one again and drill out all of the remaining holes in the flat bar to 5mm.  Turn the bar over and countersink all of these holes using a 10mm drill until the full circumference of the 10mm hole is just visible on the surface of the bar.

Next, we have to arrange the fixings between the flat bar and the aluminium 'I' section beam.  It is essential that the edge ot the flat bar follows the edge of the aluminium beam.  My rails were a little difficult as the aluminium section was 1" (25.4mm) which made it a little wider that the 25mm flat that I had to place them both between two pieces of metall with a little packing on one side.and the whole lot placed in clamps.  Just like for the flat bar and rod, the flat bar and aluminium need to be drilled together using a 4.2mm drill bit.  As long as the two sections are drilled simultaneously, the distance between holes is nowhere near as critical as with the flat bar and metal rod.  Holes should be drilled alternatively on each side of the bar between the metal rod fixings and between 5 and 6mm from the edge of the bar.  If this dimension is exceeded, you will find it difficult to insert and tighten the fixings between the flat bar and the aluminium as the metal rod must be installed before the flat bar and aluminium can be joined..  Tap the holes in the aluminium using the M5 tap.  Then as with the metal rod fixings, enlarge these new holes in the flat bar to 5mm but this time, countersink the holes on the TOP of the bar.

Finally, using M5 x 25mm, countersunk allen bolts through the bottom face of the flat bar, through the electrical stand offs and into the metal rod.  Torque these fixings well, possibly using thread sealing compound to prevent them loosening.  Then place this assembly over the aluminium beam and bolt it to the aluminium beam using M5 x12 countersunk allen bolts.  This is where you will see the benefit of drilling the holes near the edge of the flat bar and using 'ball-ended' allen keys..

And there you have it.  A pair of supported linear rails.


​Throughout this instructable, there is a need to fit clamps to various parts.  It is just as well to prepare all of the 20mm and 22mm clamps cut from 10mm stock using the 'clamps.dxf' file.  The clamps are designed to fit tightly onto the 20mm rails and the 22mm roller skate bearings.  They require a 'pinch' bolt across the gap in each clamp to close it firmly.  This job is done by drilling through both 'tongues' of the clamp in a drill press using a 4.2mm drill. (it is advisable to fit a spare length of 20mm rod into the 20mm clamp and a roller bearing into the 22mm clamps before placing the lower part into a drill press vice.  This will help against the pressure of the drill partially closing the gap and misaligning the holes)  Next open out the hole on one tongue only using a 5mm drill then tap an M5 thread into the 4.2mm hole in the other tongue.  You can then insert an M5 x 16mm allen bolt through the tongues to tighten the clamp around it's respective components..


All of the sheet metal parts required for this stage will be found in the 16g.DXF file with the exception of the X-Axis plate cleat (6), X-Axis Plate (7) and the left and right carriage plates (15 & 16) which are found on the 5mm.DXF file.  You will also need a number of clamps laser or plasma cut  from 10mm steel plate.  It is possible to use 8mm plate but it will make drilling and tapping for the 'pinch' bolts that more difficult.   These clamps will be found on Clamps.DXF.  Notated drawings of the DXF files are included in the pics attached to this section.  

In addition you will need the following:
2 No. x 20mm steel round bar x 535mm long (Z-Axis rails)
2 No. x 20mm steel round bar x 890mm long (X-Axis rails) - Note:  this length is to suit the cross-members I have installed and you               will need to adjust the length to suit your own installation. 
8 No x 20mm linear bearings.
4 No.x 16mm open linear bearings for supported linear rail (Y-Axis) 
2 No. x 22mm roller skate bearings from eBay.  Others will be needed elsewhere in the project so is better bought in lots of 10.


The gantry section of the machine is subject to a great deal of inertia when in use due it's own weight and abrupt changes of direction.  I would suggest that whenever a joint is specified as a tapped thread, this should be used instead of a nut and bolt as nuts are prone to loosening when a structure is subject to forces that the gantry will encounter.  By all means, you may back up the tapped bolt with a 'nylock' nut if you wish but keep it to 'as well as' rather than 'instead of''.

Gantry sides.

Although the parts that carry linear bearings are pre-drilled using standard centres from data sheets, I have found that, depending on source, some of the bearing mounting holes are inaccurately drilled and you will need to offer the bearings up to their respective (5mm) parts and ease the holes using a hobby drill with an abrasive bit or use a needle file in order that they properly line up along the inside edge of the carriage plates.  Even 0.25mm is enough to affect the action of the linear bearings causing wear to the rails and creating friction or even not allowing the part to move at all.

When you are sure that the holes are properly aligned with the bearings then we can carry on with the construction.  The first thing to do is to temporarily fit the 16mm bearings to the left and right carriage plates (15 & 16) then fit them onto the linear rails and check that they run smoothly/  When they are so doing, you can remove the bearings and put them aside for now.

Next, the carriage plates need to be fixed to the left and right hand gantry panels (10 & 11).  The carriage plates must be fitted in order that the notch on the side locates between the wings and legs on the gantry panels and are flushed with the outside of the panels.  You will find that the carriage plates make a snug fit into the panels.  The plates need to be welded to the panels but due to the much different thicknesses of the metals, you will need to only weld in short runs (see photo) else the carriage plates will warp.  I found that TIG welding is the best method as it applies local heat very quickly.  If there is still a slight warpage which affects the operation of the bearings, they can be adjusted with thin shims between the plate and the bearings. Once both panels slide easily up and down the linear rail, we are ready for the next operation.

Z-Axis rails

fit two of the 20mm bearings ((9) onto one of the  20mm X-Axis rods (8) then slide a 20mm clamp loosely onto each end.  Feed each end of the 20mm rail into the top holes of the gantry panels until they are equally spaced and the gantry panels are completely upright.  Fit an additional 20mm clamp to the end of the rail where it protrudes outside the gantry panels then insert two M5 x 30 bolts and nuts through both clamps and panel at each end and tighten.  Tighten the clamp pinch bolts.  Repeat the operation for the lower rail.  It is essential that you check the gantry for 'squareness' at this point and adjust the clamps where necessary.

Top and bottom gantry rails

Hook the top flange of the top rail (1) over the vertical (not angled) wings of the gantry side panels (10 & 11) so that the left hand end (as seen in the exploded parts diagram) is flush with the edge of the left hand panel face.  Drill and tap at least two diagonally spaced bolts through the  top rail into the vertical wings of the side panels on each side.  

It is intentional that the top rail overhangs the right hand gantry panel.  This is because the rail doubles as a channel for a cable 'chain' conduit (see photo) for the Z-Axis wiring which will be routed up the right hand gantry panel.  The additional length can then be used for connectors for the wiring which will greatly enhance maintainance.  The use of a cable 'chain' conduit when you come to install the electronics is essential as it spreads the flexing of the electrical wiring over its own length and avoids stress points in the cable which could cause failure which will be very difficult to trace.  On top of that, the sight of chain folding onto itself in use looks really 'cool', just like a commercially made machine.  I have deliberately not included any other detail for the wiring as your choice of electronics and connectors will be a matter of your individual choice of components.

(Note:  It is at this point that you need to check the operation of the gantry along linear rail of the Y-Axis.  It should slide very easily along the whole length of the linear rail and any adjustments made.  A quick look at the photograph of my machine in the intro will show that I have completed the fitting of all mechanical components to my gantry and the total weight of the gantry construction is in the region of 15 - 16kg yet I can easily push the whole thing from one end of the linear rail to the other using the back of a long fingernail and without bending the nail.  Now that is smooth.)

Fit the bottom rail (13) to the gantry so that the ends fit between the wings of the gantry panel legs (see rendered pic).  Drill and tap an M5 bolt into both sides of the joint at each end of the rail. The bottom rail is the part that is pushed and pulled by the Y-Axis lead screws and has to cope with the total inertia of the gantry including abrupt changes of direction together with the loads imposed from a spindle cutting material and so you may consider it necessary to back the bolts up by welding or brazing the joints between the rail and the panel wings after final assembly so that they are as strong as you can make them.

The X-Axis

Temporarily bolt the X-Axis Plate onto the linear bearings installed on the top and bottom rails (8) using M6 x 15mm bolts and spring washers and torque them up fully.  Check that the assembly moves easily along the length of the rails and adjust as necessary with shims and/or by easing the holes in the plate.  Tap threads into the holes in the stepper motor casing and mount onto the right hand gantry panel.

The Z-Axis

Take the two 535mm long x 20mm metal rods and bore a 6.8mm hole into each end to a depth of approximately 25 - 30mm (You will probably find that this best accomplished using a centre lathe if you have one, else you need to take it to an engineering shop). Then using an M8 tap, cut a thread into each hole (again, I found it easier to do this in a lathe by inserting the tap into the tail stock chuck and by turning the chuck with your hand)

Using two M8 x 20mm bolts, fix the Z-Axis top plate (18) (from Item H of the 5mm.DXF components) onto the top of the two rods.  Slide on the four vertical 20mm linear bearings (9) onto the rods and temporarily fix them to the appropriate positions on the X-Axis Plate (7) using M6 x15mm allen bolts and spring washers.  Adjust these bolts so that the rod assembly can slide easily up and down the bearings.

Temporarily bolt the X-Axis plate cleat (6) through the lower set of holes on the cleat to the upper set of holes on the X-Axis plate (7) in order that there is only a few millimetres between the flanges of the two components.  Place the NEMA23 centre drilling adaptor (item J from the 5mm.DXF components) you will find that the adaptor will drop through to rest on the cleat (6) but will still be retained in position.  Using a hand held electric drill, drill through the hole in the adaptor using a 6mm drill right through the cleat (6) flange.  Remove the adaptor.

slide the Z-Axis top plate on it's rails until it is close to the drilled cleat (6) then using an 'automatic' centre punch through the centre of  the hole in the cleat, mark a point on the Z-Axis top plate (18).  The top plate will need to be drilled to accept the lead screw and PPABD (see step 11) then when completed, the bottom plate (17) will need to be bolted to the bottom of the Z-Axis rods.

Remove the X-Axis plate cleat from it's temporary position and using a 22mm clamp together with a temporary 6mm bolt through the  22mm clamp centre adaptor (J) from the 5mm.DXF parts, drill through the clamp mounting holes and through the top of the cleat.   Refix the cleat into it's final position using 4 number M6 x 16mm allen bolts and nylock nuts.

Tap an M6 thread into the four mounting holes of the NEMA23, Z-Axis stepper motor and mount into it's position at the top of the X-Axis plate (7) using M6x20 bolts

The lead screw for the Z-Axis is a length of 8mm threaded rod, therefore the marked hole in the Z-Axis top plate (18) and the 6mm hole in the cleat (6) needs to be enlarged using ever larger drill bits until a hole of around 12mm is formed which will give sufficient clearance for the lead screw.  Because of the weight of the Z-Axis assembly that would otherwise be taken solely by the aluminium connector between the stepper motor and lead screw, it will be necessary to fit a 22mm bearing bolted above the cleat as can be clearly seen in the pictures of this section and described later in the Z-Axis lead screw step.

The bottom Z-Axis plate (17) is designed to accommodate a small router that I will be using for fine work.   It is also a useful configuration in order to mount a plasma torch using custom made clamps if you wish to do so.  This plate is also fixed to the ends of the 20mm rods (12) using M8 bolts into the drilled ends.  I have included a DXF file which can be used to make a replacement bottom plate from 20mm thick aluminium to accommodate a standard 43mm collar spindle motor for heavier cutting.

Step 6: PPABD

Now is the time to introduce you to the PPABD (Pader Patent Anti-Backlash Device).

Lead screw nuts are prone to wear cause by friction between the nut and the metal lead screw and to the general inaccuracy of proprietary nuts on the threads of industrial threaded rod.  This will cause a 'slackness' and will result in a small delay between when the lead screw starts to turn and when the thread in the nut actually starts to move the machine part..  This is called backlash, and whereas it may not cause great problems in many other types of machines, a CNC machine needs to eliminate this problem as much as possible in order to maintain accuracy.  There are many proprietary methods used on commercially made lead screws to try and eliminate this problem including low friction plastics and recirculating ball systems.

Many commercial lead screw nuts that do not use a recirculating ball system for anti-backlash use a special engineering grade plastic called Delron.  Delron has the ability to be machined easily and has very low friction properties.  Unfortunately, Delron is difficult to obtain in sheet form and is also expensive.  Fortunately, there is a reasonable alternative.  HDPE (High Density Poly Ethylene) has almost the mechanical and friction properties as Delron.  It can take a thread cut into it and does not wear much.  HDPE can also be expensive if you were to buy it in a large sheet but there is a much cheaper alternative.  Most Department Stores have a kitchenware section that sells ordinary plastic food preparation chopping boards.  Many of these chopping boards are made of Polypropylene but others are marked as being made of Polyethylene which is exactly what we are looking for.  Choose one of these boards that are at least 10mm thick. and cut it into several sections (keeping some for spares as the parts on the machine will wear eventually and need to be replaced) using the template (E) from the 16g.DXF sections.

Again, using the template, drill all three holes through the HDPE with a 6mm drill.  The centre hole will need to be drilled out further depending on whether it is to be used on 8mm or 12mm drive screws.  If tapping metal, the normal pilot drill sizes for 8mm and 12mm taps would be 6.8mm and 10.2mm respectively but I have found that tapping plastics such as HDPE is better done using a slightly smaller pilot drill such as 6.5mm and 10mm which are easier to source and give a much tighter thread without requiring any greater effort to tap.

The PPABD is for use in a channel as is the case with the X and Y Axes and has the benefit of providing an accurate lead nut and also additional stiffening of the channel at the point where it is most stressed.  The Z-Axis unit is fixed to a much thicker steel section and so does not need the stiffening attribute of the complete PPABD.

After cutting the M12 threads through the centre hole of each piece of HDPE for both of the X and Y Axes, the lead screw is threaded through holes in the sides of the channel and  through two pieces of the HDPE which are spaced approximately 25mm apart. (see sketch section) then a short piece of 6mm threaded rod is passed through both outer holes in the two channel sides and both pieces of HDPE.  Nylock nuts and washers are used to fix one piece of HDPE firmly against one side of the channel and at the other end of the rod to form a rigid strut to prevent the channel from distorting due to the thrust from the lead screw against the weight of the gantry components.  The second piece of HDPE has a pair of washers and a nylock nut on one side in order that the nuts may be tightened a little and used to take up any wear in the threads by opposing the thread in each piece of HDPE slightly against the other.  It is not necessary to tighten the adjusting nuts initially as there will be no wear.  When it becomes necessary to take up back-lash, simply bring the adjustment nuts and washers up against the HDPE block then tighten a 1/4 turn.


For all of the lead screws in my project, I am using Stainless steel threaded rod of the type used by electricians to hang cable trays beneath floor slabs.  Although slightly harder to machine and more expensive than mild steel items, it is much more rigid and will not bend as easily and cause inaccuracies when turning.  

The wider the gantry on a CNC machine, the greater the tendency for the sides of the gantry to move move independent of each other if driven by a single lead screw in the centre. I had originally intended to fit two lead screws to my Y-Axis to prevent this and also because of the anticipated weight of the gantry assembly, it was intended to fit a stepper motor to each of these.  However, upon discovering just how easily the gantry moves up and down the linear rails, I decided to use just one motor but with a belt and pulley drive to each lead screw.

I am using T5 pitch drive belts and pullies.  There are two 40 tooth puliies connected to a shaft on my stepper motor and a 20 tooth pulley on each of the lead screws.  As I am using 12mm, stainless steel, threaded rod for my lead screws, the thread pitch of 1.75mm is around half of a proprietary (Acme) lead screw and therefore the 40:20 ratio of the pullies will very much reduce the time it takes for the gantry to travel the length of the machine.  Each of my timing belts are 160 tooth which gives me a centre of pulley to centre of pulley length of 124.6mm

First measure the exact centre of the rear rail and drill a 6mm hole where the stepper motor is to be sited.  You must then scribe a 124.6mm arc using a suitable trammel either side of the drilled hole to find the position for each of the lead screws.  Next, drill a 6mm hole on each of the arcs that corresponds to the centre height of the gantry bottom rail (13) ensuring that they are both the same height from the bottom of the rear rail.  At this point, you should support the Y-Axis linear rails with timber and remove both end rails so that they can be placed on top of each other in a drill press to enable the holes to be drilled right through both rails in exactly the same positions.   Temporarily refit the rear rail and pull the gantry up to it ensuring that the gantry bottom rail is tight up against the rear rail and drill through the 6mm holes either side of the rear rail to mark the lead screw positions onto the gantry bottom rail. 

Drill through both sides of the gantry bottom rail for each lead screw using a 6mm drill then using the template (item E in 16g.DXF), drill the two 6mm holes either side   Open the centre (lead screw) up to approximately 16mm to allow plenty of clearance for the lead screws when fitted.

Next, using the NEMA23 template (G) from the 5mm.DXF parts, fit it over the centre hole on the outboard side of the rear rail using a temporary 6mm bolt through the centre then drill the four mounting holes right through the rear rail.  Remove the rear rail and using a 38mm hole saw in the drill press, cut a hole in the outboard side of the rear rail to accommodate the raised boss on the stepper motor. 

For the next operation you will need the 22mm clamp centre adaptor (J) from the 5mm.DXF parts.  Fit the adaptor into one of the 22mm clamps (from clamps.DXF) then using a temporary 6mm bolt into each of the 6mm holes drilled onto the inboard side of both front and rear rails mark the fixing bolt holes for the clamps.  Once all of the holes are marked, drill right through both front and rear rails.  Repeat this operation for each of Y-Axis lead screw bearings and the pulley shaft bearing at the stepper motor.

Enlarge each of the lead screw centre holes in both cross members and the pulley shaft hole to enable the bolt for a 25mm hole punch and cut a 25mm hole in each of the cross-members positions.on the in-board side.  Also cut 25mm holes in the out-board side of the rear (motor) cross-member to enable insertion of the lead screws.

Fit all of the 22mm bearing clamps into their correct positions using 6mm threaded rod right through each of the front and rear main cross-member using metal tube spacers inside each cross-member to prevent the action of the CNC machine from distorting the walls of the cross-members.

Cut both of  the 12mm threaded rod lead screws to the same measurement as the distance between the inboard sides of the front and rear cross-members plus 20mm.  Using a centre lathe, reduce the diameter of the lead screw at the front end to 8mm for a distance of 20mm from the end and cut an M8 x 0.9mm pitch thread.   At the motor end, reduce to 8mm for a distance of 50mm and cut an M8 thread to this also.

Make up a PPABD for each lead screw onto the gantry bottom rail as shown in the picture.

To install the Lead screws, feed them through both holes in the rear (motor) end rail then thread them through both HDPE blocks in the PPABD  ensuring that the adjustment block is not restrained.  Fit a 22mm bearing onto the end of the rod and secure with an 8mm nylock nut.  Loosen the clamp on the front cross-member and allow the 22mm bearing to go through the 25mm hole into the box section.  This will allow the lead screw to clear the rear (motor) box section and allow the fitting (in order) of an 8mm nut, a 20 tooth pulley, two more 8mm  nuts, a 22mm bearing and finally another nut.  At this stage, it will be necessary to fit the timing belt loosely over the lead screw.  Lock the 22mm bearing at the end of the lead screw using the nuts either side.  Adjust the position of the lead screw so that both bearings are properly aligned in their respective clamps and tighten the pinch bolts on each clamp.  Lock the pulley in line with the 40 tooth pulley on the stepper motor shaft when fitted using the nuts either side.


Tap the four mounting holes of the stepper motor using an M6 tap.  Using 8mm ID spacers tubes inside the box section, mount the motor using 6mm threaded rod secured with nylock nuts on the inboard side of the rear cross-member.  Fit a 22mm bearing into the clamp on the inboard side, insert an 8mm metal rod through the bearing and connect to the motor shaft using a proprietary connector,  Fit two 40 tooth pulleys back-to-back onto the 8mm metal rod and secure in position.  If you have access to a lathe, you might find that the assembly can be made more compact by cutting off the centre boss of each pulley then form a fixing for the pulley onto the shaft by drilling through the pulley surface, tapping  and fitting a long grub screw.  I have also bolted my two 40 tooth pulleys together though that is not strictly necessary but will give more security when locking the pullies onto the shaft.

Please note:  The picture is showing the end rail profile of my machine.  If you are using a standard box section, the studs will NOT be visible.  Also, the picture is not showing the 8mm ID tube spacers which may be inserted through either of the holes in the box section during assembly.


The timing belts are very strong but will stretch a little over time.  This is undesirable as it will cause backlash and may even cause the belt to disengage from the teeth of the pulleys.  To overcome this, it is necessary to fit a belt tensioner to each of the belts. 

First fit the timing belts over the installed pullies then just above the mid point of each belt mark a point on the rear cross member then drill an 8mm hole right through the cross-member.  Refer to the sketch on how to construct a simple belt tensioner and fit into place on each belt.  The two pieces marked 'K' on the 5mm.DXF file provide the two arms of the adjustor.  The 75mm length for the threaded rod entering the end rail is suited for the width of my end rail.  This length must be adjusted so that the rod can be fitted right through your chosen width of rail box section.  Do ensure that the captive nut brazed to the end rail has a clean thread to enable the threaded rod adjustment.

When the tensioners are fitted, adjust the 22mm bearings over each belt by means of the two positioning nuts.


Cut M6 threads into the mounting holes of the Z-Axis stepper motor and mount it into position on the RH gantry panel using M6x10mm bolts.

Select the X-Axis channel (part F from 16g.DXF) and fix it to X-Axis plate (7) using four 6mm nuts and bolts.  Using the template ('E' from 16g.DXF) construct a PPABD similar to the units on the Y-Axis lead screws.

Fix a 22mm clamp to the inside face of the LH gantry panel at the lead screw position.  Cut a length of 12mm threaded rod to the length from the end of the motor shaft to the inside face of the LH gantry panel plus 10mm.  Using a centre lathe, reduce both ends of the 12mm rod to 8mm for a distance of 20mm.  Cut an M8 thread to one end of the 12mm rod.

Slide a 22mm bearing onto the threaded end of the 12mm rod and lock in position with an M8 nylock nut.  Enter the lead screw through the hole in the LH gantry panel, through the clamp and PPABD then join the unthreaded end of the 12mm rod to the motor shaft using a proprietary connector.  Finally, tighten the clamp on the LH gantry panel.


I chose to use 8mm threaded rod for this axis because there is less need for rigidity as it is much shorter than the others, easier to fit and also to help keep the weight of the axis to a minimum.

Cut a 6mm thread into each of the mounting holes in the Stepper Motor and mount onto the X-Axis plate (7) using M6x16mm bolts.

You should have already cut the holes in the X-Axis Plate Cleat (6) and the Z-Axis top plate (18).  Fit a length of 8mm threaded rod to the motor shaft using a proprietary connector having threaded the rod through the holes in the cleat and top plate.  Measure the rod to a length of  the distance between the motor shaft and to the underside of the top plate at it's maximum point of travel plus 60mm and cut to length.  Fit a 22mm bearing to the top of the threaded rod  just below the cleat and fix in position using and M8 nut either side of the bearing.  temporarily fit a 22mm bearing clamp to the bearing and use it to mark the fitting holes in the underside of the cleat, drill, tap and fix the clamp using two M6x10mm bolts.  This is to take the weight of the Z-Axis onto the cleat instead of the motor shaft.

You will need to fit a modified PPABD as before.  The two pieces of HDPE will need to be cut to fit between the 20mm rails. Do not forget, the HDPE blocks for this axis must be drilled witha 6.5mm drill and tapped with an M8 tap.  It will help if you drill and tap the lead screw holes in the two pieces of HDPE first, then thread them onto the lead screw so that they are both tight up against the lower side of the cleat then it will be easier to position the two 6mm holes for 6mm threaded rod when drilling through the top plate.  Finally mount the whole assembly onto the underside of the Z-Axis top plate (18) in a similar fashion as to the other lead screws..      . 

There is no need for a lower fixing for the PPABD as the weight of the Z-Axis will constrain it.



As stated before, I have deliberately not detailed any of the electronic side of the CNC Machine apart from the stepper motor size (NEMA23) as they are a matter of individual choice and any further attachments must be made to suit them.  I will make certain recommendations that you may find helpful.

Circuit and driver boards

You may have noticed that the rear rail is not at the far end of the machine.  This is to protect the stepper motor and, with the fitting of a suitable base, a good place to install the electronics and stepper motor drivers.  If you have the facility, it may be a good idea to enclose this area with a suitable panel and to mount additional cooling fans.

Cable chains

It is more or less essential that the wiring to the X and Z axes are contained within a plastic cable 'chain' as hanging cables are a hazard and the continuous flexing (which usually occurs in one part of a cable) will eventually cause failure of the conductors within it.  The chains are readily available from Electrical Factors or from eBay.

I have installed a 40mm wide (to suit my chain) channel with 15mm sides to run along the whole of the right hand side of the machine bed.  The channel may be made from 16g steel as used elsewhere but I have not included it in the DXF files as it's length depends on the overall length of your machine and will probably be cheaper to have it folded separately or you may even find a suitable section in a junk yard.  The channel is supported at either end by a simple 'L' bracket fixed to the linear rail 'I' section.  The cables to the Z-Axis may be run in a chain along the channel in the back of the gantry top rail.  In each case, you will have to construct a suitable bracket on the gantry and the X-Axis plate to accept the top end of each cable chain.

Additional wiring

I have  installed a plastic junction box onto the RH gantry panel to terminate all of the cables coming from the long cable chain.  From there, I have used flexible plastic conduit to the top gantry rail and also from the driver board to the bottom of the long cable chain.  It will keep the cables from being damaged and will also make a more professional job of the whole machine.  Notice the essential panic stop button on the side of the junction box.  I have placed the button here because it will always be close to the cutting tool and therefore the most likely place for the operator to be if an emergency occurs.


I hope that you have enjoyed this instructable and that you go on to make a really worthwhile machine.  I trust that it was not too ponderous for you but I have tried to show you all the steps that I took and to help you avoid some of the pitfalls.


CharlieB14 made it!(author)2015-07-29

Hello. You've done a great job with this. I was wondering if you had the solidworks files available for download? I think it would help me work out where everything goes and if I can start such an ambitious project.

TtY made it!(author)2015-01-20

Please upload the files DXF again , now they are not available

Pader made it!(author)2015-01-26

Hi, sorry I have taken so long to reply. I had to search for the files. You may retrieve the files at:

eggert made it!(author)2014-03-10

Nice construction, I'm also planning something similar. I plan to improve iterationally, for example start with threaded rods and upgrade to ball screws later, if necessary.

Did you measure what accuracy you get from it?

rogeroh33 made it!(author)2013-01-11

does anyone have the files? pleqase email me a link or send files to

CSwick2 made it!(author)2012-08-23

Ahhh ok. That makes sense.

Thank you for explaining your reasoning. That is actually quite helpful.

I am a guitar designer (Solidworks) that's been looking through CNC designs for the last 2 years in order to pick out the best machine to start making my designs reality lol

I have to ask, because your design is based around being budget-friendly, how much did it cost you for everything??

I have seen similar machines (namely, the k2) selling for well over $8,000 USD at baseline and since that would be my only other viable option, I'm hoping the cost of your design (including the cost of the parts you had to have laser/plasma cut, and electronics) would be less than that. And also, is this design Mach3 friendly ?

Pader made it!(author)2012-08-24

I am afraid that I cannot be precise in the costing as it has been a fairly long term project. I have been somewhat lucky in obtaining the parts for my machine. The front and rear support rails (X axis) and the aluminium linear rail supports (Y axis) I obtained from a local junk yard at the cost of their scrap weight. As mentioned in the instructable, these two items can be substituted by simple steel box section and aluminium spirit levels from ebay or elsewhere.

I was lucky with engineering side of things. I have a small 350mm centre lathe with a 4” chuck and was able to reduce and thread my lead screws together with various other small jobs. If you are able to do the same, use 12mm stainless steel threaded rod supported inside ½” copper pipe by another person to prevent the rod from whipping whilst turning. The laser cutting and folding was carried out by a local firm whose owner is something of an enthusiast himself. He charged me around $100 for all of the cutting and folding (plus some parts that had to be redesigned) and also for a custom steel case for the electronics that I am waiting for on the basis that I was prepared to wait for the parts and he would make them between production runs. The TIG welding of the gantry sides to the carriage plates together with the flat cut on the Y axis linear rail cost me another $20 at another generous engineer’s shop.

My machine uses 4kN stepper motors for the X and Y axes and a 3.1kN motor for the Z axis. The Z axis motor is smaller due to help given by gravity. I have another 4kN motor which I intend to use for a 4th (rotary) axis in the future. I am not a great fan of stepper drivers such as Gecko, I have been trying to help out one of the Engineers mentioned above who is setting up a plasma cutting unit but I found the whole system of wiring entirely incomprehensible and even when getting the axes to work, they sometimes just stopped for no reason. In my opinion, the modular units are much easier to work with. Most of my electronics came from an internet firm with the exception of the breakout board from the computer.. The reason being that cnc4you do not do a board that has a remote control facility which I found necessary on such a long machine. I got my BOB from ebay together with a hand control and digital readout. Unfortunately, that BOB did not have opto-isolation which is essential to protect the computer and so I daisy-chained a very cheap basic BOB that did have opto-isolators onto that board. The total cost of the two boards was around $32 plus $87 for the hand control and digital read out. Total cost at current prices for 4 motors, drive belt system, custom power supply and 4 motor driver modules $407.43. I thoroughly recommend this company as they custom design all of their gear for manufacture in China to their exact specification and are extremely helpful and will advise you what to use whether they supply it or not. These prices include tax at 20% and it may be worth your while to use them as you will not be liable for the tax outside the EU.

If you were to add a further $100 – 150 for sundry items, you would have a pretty good idea of the total cost

I shall soon be doing an additional instructable showing how I wired the system including remote control. Possibly, after that, another for conversion to 3D printing.

Pader made it!(author)2012-08-25

I forgot to factor in the cost of the steel parts. You may be able to get them cheaper but I bought the 16 and 20mm rods, the flat metal stock and the stainless steel threaded rod which cost in the region of another $150 because I had to buy stock lengths of 6m from a steel supplier.

I also forgot to mention that most CNC systems that communicate by way of a parallel printer port are compatible with Mach3. However, you will need to buy a post processor programme that will convert the solidworks file to 'gcode' such as weldmesh which you will need to instruct the machine to carry out it's functions in the correct order,

Just for interest, later versions of Solidworks will output code for post processors and also for 3D modelling.

CSwick2 made it!(author)2012-08-25

Ahh ok. Well, I believe I have found a budget-friendly metal CNC machine (~$3000 usd for a 40"x48" cutting area) that is made here in the U.S. so I will probably be going that route. Thank you for all of the information though. It has been nothing short of enlightening.

I have a post-processor that I use in conjuction with MasterCam (For solidworks)---guess you can tell where all of my $$ went haha that outputs Mach3 G-Code, which is why I was asking.

CSwick2 made it!(author)2012-08-24

Thank you very much for your prompt and thorough response. I will keep an eye out for future CNC related instructables by you.

This one is on my "favorites" list and I gave it 5 stars.

CSwick2 made it!(author)2012-08-23

This is one of the best DIY CNC instructables I've seen on here.

I do have one quick question though..and this could be a stupid question since I know almost nothing about CNC design lol But why not use roller-chain instead of belts?

Personally, I think it would be more durable and would (likely) fix the backlash and stretching issue that you mentioned.

Pader made it!(author)2012-08-23

Thank you for the compliment.

I had seriously considered using steel chain and even had a set of custom sprockets laser cut as part of the 16g.dxf file (since removed from the published file) and even bought a pair of duralier tensioning cogs as it would be nigh on impossible to fit a chain of exactly the right length.

It was at this point that I completely discarded steel chain. At least any chain that I could get hold of that was not horrendously expensive and massively large. The trouble with chain is that they either have roller sleeves on the cross links that contact the sprocket teeth which automatically introduces slack (unless each link also had a roller bearing) or, as is common on a bike chain, no roller sleeve resulting in constant metal to metal contact with the chain and the sprocket which would cause considerable wear unless oiled but that oil could not be used in a precision cutting environment as it would immediately clog up with material swarf, Steel chain has yet another problem and that is the considerable increase of inertia due to it's weight. The constant reversal of motor torque would quickly cripple motors and other parts of the frame.

That left only two alternatives. A rack and pinion drive which were not only expensive, would require two motors and are usually much slower due to the need to use geared drive pinions or the there are the belts that I have used.

The belts are precision profiled from a tough polyester compound which provide a very close fit to the machine pullies which minimise backlash. They also are strengthened with several high tensile steel wires within them to reduce stretching. In fact, they stretch much less than a steel bike chain, are actually cheaper and they do not require lubrication. However, because even a tiny amount of backlash is detrimental to accuracy, it is essential to use a tensioning arrangement that can be adjusted over a long period.

In the near future, I shall be making a small change to the specification of the machine as I have found that the single roller bearing on the tensioners is rather narrow and sometimes slips off the belt. I will modify the instructable to either put two bearings on each or else fit large washers either side to provide a guide for the belt as is present on the pullies.

Thank you for your interest.

martinbrown321 made it!(author)2012-04-29

Looks fab Pader. Really like the 'PPABD' !!

DRH1469 made it!(author)2012-04-23

TIP:  Try adding more steps into the instructable and less writing in each step. I found it hard to understand the writing because (NO OFFENCE) it was a bit cluttered so as I say try reducing the amount of writing and increass the number of steps

Anyway Well Done :)

Pader made it!(author)2012-04-23

Thank you for your constructive criticism. I have re-vamped the document and added parts. I saved on the edit page, does that update the document on site?

By the way, I did not see my instructable included in the entries, did I miss it?


DRH1469 made it!(author)2012-04-25

I believe it does update it. When you edited it did you click publish or did you just click save? If you clicked publish it would ask you the same questions as when you first published it but at the bottom of the page it would say something like: Yes Update This Instructables or something similar. If you clicked save it would just save it not update it on the site.

2nd question: It is entered in the make it real challenge because I just voted for you.

Oh, and I rated it 5 stars.


Pader made it!(author)2012-04-25

Thank you. As you may gather, I am fairly new to entering competitions and I confused notification that my entry had been received with notification for having passed moderation which I have since received. I actually got two of each because I have entered the Metalwork Challenge also.

I really appreciate your vote and especially the rating of 5 stars.

pfred2 made it!(author)2012-04-23

I'm in the process of making my own CNC machine and you've done many things I have not. That is entirely by my own conscious design though. Good luck to you.

rimar2000 made it!(author)2012-04-22

Impressive work, congratulations!