Thread: A sufficiently strong machine
[Please note this post is not quite finished - I will be editing it in the next few days to include costings among other things]
Just over two years ago, when I made the steel frame for my router giving it the ability to machine aluminium, my friend (Sasha) wanted an increasing number of parts made. We decided to design and make a CNC Router together, which Sasha would keep, leaving me free to use mine. Just to make things clear, this project had no link whatsoever with Sasha and myself being at University, it was simply done during our free time.
For anyone with a short attention span, here's a picture of the very nearly finished machine:
In particular Sasha wanted to machine computer water cooling parts, so the side of a standard ATX computer case was chosen as the required machining area of the machine. Since these parts would primarily be made from metals, including steel, the machine had to be strong yet still portable to fit in rented accommodation. The latter rules out just getting a big enough milling machine. The basic specifications we agreed upon are therefore:
1) Portable (Fits through door)
2) 500x500x??150 axis travel.
3) Able to machine non-ferrous metals efficiently and accurately
- High stiffness (from 4)
- Flood coolant (from 4)
- Zero backlash
Why so much? We wanted a DIY machine to rival a professional one. We wanted to try out some new things. We think many DIY machines achieve very poor value for money, and many designed by 'professional' businesses leave much to be desired.
The drawings for this machine are released under the Creative Commons Attribure-ShareAlike License.
[Drawings to be added within next few days]
The drawings and this post are not intended to be used as instructions for how to build this machine, merely guidelines so if you wish to make a copy I advise discussing it with myself first.
Initially, we planned to design our own ATC spindle using two hobbyking PMSMs, however this was a project in and of itself and we decided to postpone it. I made a prototype inspired by <link>, however it didn't achieve the required gripping strength and the design doesn't lend itself to high RPM.
Instead we chose the usual 80mm diameter 2.2kW spindle, but higher quality with ceramic bearings (although the spindle rotor conducts electrically to the case, so the verdict remains open on weather they're actually ceramic or if the rotor is somehow grounded). Impressively, the runout was measured to less than 5 micrometers. This is the exact one we bought from aliexpress.
To increase reliability, eliminate moving parts and save space we decided to water cool everything in the control box. After the stepper drivers and VFD were dismantled, water blocks were attached to the motherboard, stepper drivers and VFD. These were then mounted alongside the power supply and breakout board inside the control box. Since the spindle already required water cooling, this was pretty straightforward.
Obtaining zero backlash
To achieve 'zero backlash' two identical ballnuts were preloaded against each other other - nothing new here, it's just not normally seen on CNC routers. This will eliminate backlash up until the point when the axial force applied to the nut exceeds the preload force, above which the system will exhibit backlash. This is not a significant limitation since the preload force was selected to be sufficiently greater than the force each axis would experience, be that due to cutting force or acceleration.
The Z-axis is easy since gravity pre-loads it, due to the large mass of the Z-axis, so there was no need incorporate a second nut here. Although the cutting force parallel to Z could exceed the weight of the axis whilst drilling, a <0.05mm error introduced due to backlash is insignificant here. For the X and Y axes two ballnuts were used on each screw, with one attached as normal and the other preloaded against the screw using disk springs. This nut is constrained rotationally via pins, since any rotation would introduce backlash. Easiest to explain with a picture, so here's the finished mechanism on one side of X, which is identical to the other side:
The Y-axis uses a similar system, with the nuts embedded in cylindrical cutouts to save space and get the ballscrew closer to the rails:
The high stiffness requirement dictated making a substantial frame, however it could not be too heavy for portability reasons. After a suitable mixture of calculation and guesswork we opted for 60x60x5mm box section and a largely generic frame was designed with the obvious diagonals added for additional strength:
The required stiffness for the machine dictates using an adjustable height bed, so an array of holes were drilled in the frame to accommodate this:
We did not want to sacrifice strength of the frame just to make it easier to mount the X-rails accurately, so we decided to fully weld the frame and compensate for any discrepancies in the rail mounting surfaces later on. M12 tapped holes have been added in various places so that the frame can be filled with sand or some other material to aid damping. This will be done some time in the future if deemed necessary - for now the frame is empty. The following images show the process:
My free bandsaw paid for itself here.
Senior supervisor Sparky scrutinised the process:
The frame was powder coated by a local company, costing £30 which was their minimum order. Nice finish and very much worth it:
At the expense of tapping a large array of holes (15x15, about 4 hours with a cordless drill), a clamping system with the following features was selected:
- Resurfacing or otherwise machining into the bed isn't a permament mark on the bed – the strips can relatively cheaply be replaced.
- Clamping via T-slots and nuts.
- Countersunk screws can be removed to bolt directly to the bed using the existing grid.
- Remove required screws and clamp from the bottom of the bed through the tapped holes using a smaller bolt size – awkward but nice to have for that one time that it's crucial to have an uninterrupted machining surface with virtually no possibility of collision with clamping fixtures.
Probably the most important metric of any machine bed however is the rigidity. After basic finite element simulations (which I see no point in posting as it amounts to just pretty pictures), we opted for 25.4mm sheet, with 9mm deep troughs to accomodate T-nuts and promote coolant drainage. The 10mm thick T-slot strips were accounted for to add further rigidity. The bed is mounted to the frame via 7 intermediate blocks milled from the same 25.4mm sheet and are attached via M12, M8 and some M6 bolts, each of which bolt onto one of the 7 vertical supports on the frame.
The X axis:
Since we obtained two 25mm linear guides for a good price, the X axis is the strongest axis of the machine. It is driven by ballscrews on both sides, each supported by a preloaded pair of angular contact bearings to eliminate end float. Like with other driven ballscrews in X and Y, the angular contact bearings are mounted in a bearing cartridge which allows for adjustment in one dimension, while the mount for the cartridge allows adjustment in the other. This way adjustment in two dimensions can be obtained with slots which still offer very rigid mounting.
The following images shows us verifying that the bearings on the Z-axis screw are preloaded properly by measuring that there is no end float on each ballscrew:
Although early designs used steel box section for the gantry, we eventually decided to make the entire gantry out of aluminium sheet to increase rigidity, improve machinability and allow for greater flexibility in the design. In order to make better use of volume and reduce overhang, clearances between each axis were minimised (to 1mm) and rails and other features were sunk into their respective sheets. This resulted in a compact yet sufficiently rigid design. These are the sorts of things you can't do if you start making the machine before fully finishing the design.
The preloaded ballnuts are wiped by generic rotary shaft seals and contained completely inside the gantry. These seals are just standard shaft seals, but they seem to do a good job of wiping swarf off ballscrews, which leave us free to put the ballscrews in the best positions instead of worrying about keeping them away from swarf.
For the top and bottom plates, 20mm sheet was used with 1” thick flat bar for the rail mounts. For the remaining covers we used 10mm sheet. We milled the mounting surface for the X-rail bearings using my milling machine and milled the surfaces for the Y-axis rails using the bridgeport (clone) milling machine at school, as my machine didn't have sufficient travel. This obtained accurate smooth surfaces with reference edges to ensure accurate alignment of the linear bearings.
X-axis rails: THK 25mm 760mm
Travel: 450mm with wide block spacing (current), 500 with reduced bearing spacing.
Ballscrew: 15:30 ratio using 5M HTD belt, RM1610-2 pitch double start ballscrews x2.
The Y-axis is essentially just a box which houses the Z-axis, and provides a rigid structure linking the Y-axis linear bearings and associated ballscrew. Again, the ballscrew is protected by rotary seals. In order to ensure the perpendicularity of the box and help with tramming, an accurate reference edge was machined on two plates to accurately mount the other two.
The Y-axis plates are 20mm and 25mm thick:
Rails: Hiwin 15mm, 540mm long
Ballscrew: Same as X.
Rails: THK 25mm
The Z-axis is a rectangular enclosure that contains a ballnut mount and two rails, the bearing blocks for which are mounted on to the Y-axis. Clearly the use of a box structure is substantially stronger than the standard single overhanging plate approach.
Unfortunately, the rails intended for Z were slightly shorter than anticipated, and as a result, only part of the Z axis travel is available until they are replaced. However with over 100mm of travel this currently doesn't pose a problem. Some of the holes in the Z-axis plates had to be positioned on the end, which meant the only way I could think of to drill them accurately was by putting the plate in the lathe and using the lathe to drill them:
The bottom of the Z axis mounts the coolant assembly.
The coolant assembly holds the coolant hoses, as well as a servo operated spanner to lock the spindle to facilitate future more automated tool changing, in addition to being a mount for an air extraction pipe. There are also mounts for 2 webcams and lasers (perpendicular for onscreen alignment), which have not yet been added. Currently, a stripped down version involving just the coolant pipes is in use, until the spanner made from EN19 steel is completed. This was a surprisingly annoying part to machine, due to my lack of suitable size drills.
The aforementioned 2.2kW 80mm spindle had the endbell removed, and small encoder shaft was press fitted into a hole drilled into the back of the spindle shaft. To achieve low runout, the inserted shaft was skimmed in-situ from spindle power. The encoder was then mounted, along with a PCB incorporating a PIC microcontroller to add an index pulse and provide a divider on the quadrature output for sensible output frequencies at high speeds. In future, this feedback could potentially be used to accurately compensate spindle speed, PID control of the spindle using linuxCNC or field oriented control.
Initially, the spindle was mounted on up to four 20mm thick spindle mounts, however due to problems with low thread engagement, this was later upgraded to two much thicker mounts I machined from 60mm thick pieces of 4" square bar for better rigidity.
[Image showing new spindle mounts to be added]
The oil system was implemented late in the process, and despite being functional, it would have been beneficial to design it from the start. Despite this, oil is distributed via tubes to every rail bearing and ballscrew from three easy to access ports. This system is more important than usual, since the ballnut prealoading means the ballscrews aro continuously operating with a much higher force than on most CNC routers. Without adequate lubrication this would substantially shorten their life. The tubes are retained with pipe clips from arc euro (one of few parts sourced from England) and rest in channels routed through the various plates. The lubrication system took a long time to complete due to the significant number of small parts, and awkward routing of the tubes especially in the Y-axis. Automation of oiling via an intermittent pump remains a future upgrade.
Mounting X rails:
This proved to be quite difficult to achieve accurately, although in the end we succeeded as a measured error of within just +-0.03mm in Z was achieved over the full length of each rail.
The plan was to measure how bent the X-axis box section was and compensate for this error. By using my surface plate and taking readings on to, or from, the box section, it is possible to accurately measure the profile which we have to compensate for. Since the surface plate is not automatically aligned to the box section, there will be a straight line error which is just the tilt of the surface plate, so we eliminated this by finding the linear regression function from our readings and subtracting it. This leave a plot showing the deviation of the rail from a straight line, so the maximum and minimum of this plot shows the overall error.
The following graph shows the height error on the frame that we have to deal with - almost +-0.7mm:
The initial plan was to use that graph to machine an aluminium strip, which the opposite profile on, such that when it is bolted to the frame the errors cancel out to leave a straight line, i.e. flat surface. Clearly it is important to make sure that this profile is machined on to the aluminum accurately, so we used my CNC router and made a jig to hold the aluminium strip. By surfacing the jig on my CNC router, then bolting the aluminium strip to be machined on top, any error due to my X-rails is cancelled out. That just leaves machining the correct profile, which I did by making a spreadsheet to generate the g-code to move the cutter through the correct path. To measure the initial error, we bolted the rail to the aluminium strip just machined flat, placed a dial indication on one bearing block and indicated to the surface plate. Unfortunately I don't have a picture of this, but it's the same as this setup except the rail is mounted on the aluminium:
Here's a couple of pictures showing machining it using the jig:
After doing that, we measured the new error. This improved the error, but was still not good enough. So we used this new measured error, and subtracted it from the profile just machined to compensate - i.e. tried an iterative process to minimise the error. This didn't make much difference, in fact the second 'correction' made the error worse. This means there must be something else introducing the error, which wasn't compensated for by machining the strip. The following graph shows the two attempts:
After failing to correct the error with shims we found, by indicating across the width of the rail surface, that the error we were measuring was due to twist:
Since, when mounted to the linear bearing, the indicator is measuring on a long 'arm' a small angular error on the rail bearing is magnified. By trying to compensate for this iteratively, we were subtracting a measured combination of both linear and rotational error from the previous profile which was assumed to be a purely linear error, which explains why the second correction actually made the error worse. At this state it is interesting to note that the bearings slided smoothly on the rails, so although compensating for the heigh error with shims or a machined profile is sufficient for the bearings to run smoothly, this does not by any means assure accuracy since neither method compensates for the angular error.
Consequently, we opted for epoxy levelling. Another option would have been to measure the angular and height error, which could be done by taking readings with the indicator on two different length bars, and simple trigonometry, and use this to mill 3D surface to compensate.
The epoxy chosen was west system 105 with 209 hardener, since this is the lowest viscosity we could find and the long curing time gives it more time to set level. Two aluminium barrier pieces were cut and a temporary barrier was made across the back for resin to flow between each side, so that both surfaces end up at the same height - i.e. in the same plane. This was the setup:
Pouring the resin:
The new error, using the same metric as earlier was extremely small along most of the length of the rail, with a ramp at the end which turned out to be the bearing rubbing on the aluminium resin retainer, which was easily solved, so in the end we obtained a much improved profile accurate to +-0.03mm. Just to emphasise how well the resin worked, here's the original frame error, the first compensation attempt and the resin plotted on the same scale:
This plot shows the error arising from the X-rails once the gantry was assembled:
This is a perfect example of how many machines that 'work', or rather 'don't fail' can be seriously lacking. From reading build logs on forums like this one, it is evident that these small errors in rail mounting do not make a big difference, since the vast majority of people don't have the means to measure it - you need a surface plate or a precision straight edge to do it properly, yet these machines still work. Overall however I think it was time well spent since we can now rely on this machine being very accurate. I will mount my rails on to epoxy resin, since it seems to so quickly and easily solve all the problems.
Cutting parts from 20mm aluminium:
We tessellated all the parts from the design to make them efficiently fit on a 20mm sheet of aluminium, within the travel limits of my machine. This made the overall array 740*1400mm, so we ordered two 2.4*0.74m pieces of 20mm aluminium plate from ASC Metals. One to make this machine and the rest for general use and my new gantry. There's not much left now as I keep using it for other people's parts, and I haven't even started my new gantry! Here's the delivery:
Quote of the day, from the driver "Where's your forklift?". He had a point with the plates each weighing 96kg. Luckily the driver helped us carry it. By us I mean Sasha carried them whilst I supervised and my mum had kittens.
Some general pictures of cutting the parts:
Unsurprisingly it took a long time to cut all of these parts, with no significant problems except even after much troubleshooting Mach3 deciding to make my machine consistently lose position, at which point we switched my machine to LinuxCNC and had no further issues.
25mm thick parts:
Most of these were pretty generic to machine, except for the bed took several hours to cut on my router and to date is the biggest and most expensive part I've cut on it. The finish is quite nice, as the MDF bed on my machine (at that point) helps damp the vibrations and with a big part like this the rigidity of the bed isn't a significant problem. I had trouble drilling the holes round the outside of the bed on the router, so they were just spotted and then drilled on my milling machine. These holes are to accommodate strips as an initial barrier to coolant (bit pointless). Also seen is the excessively massive drain at the front of the bed, again for coolant. This will have a contraption mounted to it to collect swarf and filter the coolant.
For the most part assembling the machine is straightforward, but time consuming due to the sheer number of parts. In particular the oil system makes assembling the Y and Z axes more difficult as they have to be assembled in a very particular order. Some general pictures follow:
I have measured the stiffness of the machine by applying a constant force and measuring the deflection at the spindle using a dial indicator. To measure the force I used some cheap, but seemingly accurate, hanging scales, as can be seen in the following image:
By applying a force of 200N and measuring the deflection I found the stiffness in X and Y with the Z-axis at 50mm extension. I did the same test on my milling machine (Clarke CMD1225C column mill) and hence found that this machine is a similar stiffness to my milling machine, although a bit weaker in Y.
As specified initially, the machine needed to be portable. This was achieved by designing it to split easily into the three mains parts, specifically the frame, the bed and the gantry.
The frame weighs just over 100kg, so is manageable with two people when two bars are inserted through the top as picture above. The gantry, without motors and spindle, weighs 60kg and the bed weighs 40kg so these parts are easy to carry. The whole machine is around 225kg.
Toroidal transformers to output 70V for drivers.
DQ860MA stepper drivers
3.1Nm Nema 24 stepper motors from cnc4you
Control box inside, unfinished but working, note the water cooling tubes:
Achieved 5m/min on X and Y, with acceleration 4m/s^2 on Y and 2m/s^2 on X. Not tested yet with the machine frame fixed down, so these may go up or down. Not much more to say really as that's plenty fast enough.
Before finishing the machine, I assembled the majority of it to find any problems or parts that would need altering. This gave the opportunity to test cutting something, so I put an offcut of 20mm 6082-T6 aluminium plate on the bed:
I tried a 6mm 2fl cutter and easily got 6mm depth of cut at 1200mm/min, so I tried a 10mm 2fl cutter. That easily did 5mm DOC, so cutting a slot 10mm wide by 5mm deep again at 1200mm/min. I tried milling with 70% stepover, and it worked fine up to 11mm DOC, however I didn't try more as I didn't want to push things until the machine was finished, especially since this was with no coolant and less than half the fasteners in place. The finish was still good after that cut, so more is clearly possible.
Due to an error with drilling some holes in the ballnut mounts, I had to make them again, which seemed like a good excuse to try some more cutting with this machine, again with 20mm plate:
I don't think I'll get away with not posting a video, so here's a taster of what's to come:
Overall we're happy with the machine. All the parts of the drive chain are adequate, and the main specifications of the machine have been met. It's strong enough to cut aluminium pretty quickly with just one X ballscrew attached.
However if I made another one of these machines (I could be persuaded), I would change change the following things (roughly in order of importance):
- Add second ballscrew to Y-axis.
- Incorporate greater than 80mm spindle.
- Taller gantry beams.
- Vertical strips under bed to strengthen.
- More access for oil system tubes to aid assembly.
- A trunnion table would be nice.
Other than that I'm pretty happy with it.
Last edited by Jonathan; 28-08-2013 at 10:07 PM.
What an epic build well done ..Clive
Congratulations that's a fantastic machine you've built there Jonathan. . . . . . been waiting long time to see it but worth the wait. .
Jonathan, great build log and very well thought out.
I cant add anything more than what Jazz and Jim have already said, apart from as ive said to you before... you one day are going to be a very successful man. And once again, I take my hat off to you sir.
Thanks for posting all the photos and info.
Very interesting and educational.
Great machine and very informational build. I will implement some of your ideas on my next build, especially the system for oiling the bearings.
I am slightly curious about the ceramic bearing spindle. From my understanding, if you / god helps no to happen/ hit the spindle by accident on the table or a part, what would happen to the ceramic balls? You say there is an electric contact. Maybe only the lower pair is ceramic?
From where did you get that encoder for the spindle? Does your VFD support encoders?
Very nice machine.
"However if I made another one of these machines (I could be persuaded),"
How much would persuasion cost
Congratulations Johnathan, that is a fantastic machine and a very interesting and informative write up. Well done. G.
Fantastic looking machine Jonathan!
I'm interested in that epoxy process.
Does the epoxy "self level" itself to a finish that doesn't need any more work at all? Just mount the linear rails?
Or was there more work involved?
By therouterlady in forum Manufacturer NewsReplies: 0Last Post: 18-09-2013, 04:28 AM
By black5f in forum Items For SaleReplies: 0Last Post: 14-01-2012, 06:20 PM
By MrWiz73 in forum General DiscussionReplies: 14Last Post: 30-03-2011, 04:17 PM
NEW MEMBER: Strong 1212DS - any good?By MrWiz73 in forum New Member IntroductionsReplies: 0Last Post: 29-03-2011, 10:13 AM