u/BitsandBolts404

Image 1 — My diycnc build log
Image 2 — My diycnc build log
Image 3 — My diycnc build log
Image 4 — My diycnc build log
Image 5 — My diycnc build log
Image 6 — My diycnc build log
Image 7 — My diycnc build log
Image 8 — My diycnc build log
Image 9 — My diycnc build log
Image 10 — My diycnc build log
Image 11 — My diycnc build log
Image 12 — My diycnc build log
Image 13 — My diycnc build log
Image 14 — My diycnc build log
Image 15 — My diycnc build log
Image 16 — My diycnc build log
Image 17 — My diycnc build log
Image 18 — My diycnc build log
▲ 156 r/hobbycnc

My diycnc build log

CNC Build Log

I wanted to give anyone who's interested a little insight into what it took to build my CNC and all the challenges I faced along the way. This is a project I've wanted to complete ever since I made my first CNC out of MDF back in 2012. There was a lot that went into this build, so I'm leaving some stuff out and mostly logging the parts I found interesting and that may be of help to others.

The machine is made mostly from aluminum, except for the steel frame, steel rails, and the tool steel used to create a flat surface for the X axis. I originally planned on making the gantry from steel, but that would have required outsourcing the machining for most of the build, and I wanted to build as much as possible myself — all part of the fun for me. On the motion control side I'm using 750W DMM servos with their DYN4 drives, controlled by a Mesa 7i77 board and 5i25 card in a mini PC running LinuxCNC.

The Frame

This project started with the steel frame, which consists of some scrap 3" × 3" × 1/4" steel tubing I was able to get cheap from a local supplier. This was my first time welding something of this size, and while my welds looked good enough, my lack of experience showed up as the table warped… a lot. I ended up with one corner about 3/16" too low, far from what I hoped for. Obviously I never expected the frame to come out perfectly flat straight off the welding table.

My initial plan was to use a precision 48" flat bar and shims to get the desired flatness across the 18 mounting locations where the 1" aluminum plate would sit. This idea sort of worked, but I found it tedious and it was difficult to capture global heights, because every time I moved the bar it lost its starting reference. I thought there were ways around this with better sequencing and mapping in CAD, but I ended up with a better solution: a linear photodiode array and a laser level.

Measuring with a linear photodiode array (TSL1401 )

These sensors can be found online for cheap and feature a 128 × 1 array of photodetectors. The sensor array is about 8mm tall, giving a pixel-to-pixel distance of 0.0025". So the window is quite small, but the resolution is great because you get an analog response for each pixel.
The first problem I encountered was that I tried using my construction laser level, but the beam was nearly 5mm wide and the pattern wasn't sharp. So I ended up finding an adjustable Powell lens laser on eBay for $90. I was able to get the beam down to around 1mm over the steel frame's footprint and could measure down to comfortably 0.0015" on the surface plate. I can write this device up in more detail for anyone who's interested.

Plate leveling

Once I had all the measurements, I turned some 3" washers on my lathe accordingly. Then I moved each washer to its correct location with double-sided tape facing up and paste wax on both surfaces touching the tape. The 1" aluminum plate was then placed on top of the washers, sticking to the tape. This step was done to transfer the aluminum plate's flatness to the washers, since the steel tubing is still far from flat.

Next came the epoxy, which I thickened with fumed silica and aluminum powder to the consistency of peanut butter. I elevated the aluminum plate on some 2×4s — with the precision washers now adhered to the plate — then placed dollops of epoxy under each washer. The plate was lowered and allowed to cure for a week at 75°F in my shop.

After that, I removed the aluminum plate one last time, re measured, and shimmed accordingly. I never intended for the washers to get me all the way there. Their main function was to get me close in elevation and start me off with a flatter plane to measure from, since even a slight tilt in the TSL1401 sensor can lead to a large error.

Machining

Now that the foundation was done, everything else felt much more manageable. I was able to machine all the parts on my little G0704 mill/drill and verify them on my surface plate. This took over a year, but it saved me quite a lot of money and I gained a lot of valuable experience.

There was one thing I wasn't able to machine, and that was getting the Y axis steel 2" × 4" × 48" bars flat. I tried doing this on my mill/drill, but as some of you can imagine, having a 100 lb bar sticking out halfway past the machine was not a great idea. Finding someone locally to grind these bars took a little time — and by "locally" I mean a 2.5 hour drive each way. But $400 to grind two bars parallel sounded like a steal after contemplating hand scraping lol. Once I got the bars back, I made a compound support rest to take the weight off the machine while I drilled all the holes. This was much easier now that the bars were flat and I had a surface to reference from.

One other piece of machining I had fun with was the main X axis carrier block. Because of my design choice to put the two X axis rails on perpendicular planes , as opposed to the parallel arrangement most DIY CNCs use , I needed to join the two sub-assemblies that carried each rail. I ended up going with a shrink fit plus bolts to create a solid connection between them. After machining the two pieces and verifying with gauge blocks twenty times, I stuck the beautiful big block of aluminum in the oven at 400°F for two hours and put the smaller piece in the freezer. Then I set the hot piece outside on some aluminum blocks and inserted the little piece as quickly as possible. After torqueing the bolts and letting the aluminum rest for a couple of weeks, I re-machined the mating surfaces.

Assembly

At this point everything was machined and ready for assembly, so I'll go over a little of how I assembled it and did my best to ensure the machine was accurate and square.

The first thing was setting the steel bars parallel to one another and getting the spacing correct. To do this I used a giant set of 40" calipers, measuring at both ends. Once the bars were set, I moved to the Y axis rails, which initially get set the same way. After the rail ends were set, I made a stand for my indicator to sit on one of the Y axis rails and measure off a precision 48" flat bar. With one Y axis set, I adjusted the other to match using the indicator.

With the Y axis rails set, I moved on to the gantry. This was much easier, since I could fit the whole gantry on the surface plate. The rest of the gantry assembly and adjustment was fairly straightforward and similar to above, just smaller, so I'll leave that out. With the gantry done, I placed it on its Y axis block and began squaring the Y and X axes (I'll go over this in more detail below). This is very important for a dual Y axis machine, and I wish I had spent more time here up front. But I pushed on with assembly at that point I was so close to the first cut.

Tuning and commissioning

After the whole machine was assembled and the electronics were done, I moved on to the first movements. The DYN4 servo drives have an inner PID loop that needs to be tuned before moving on to LinuxCNC. The process is fairly easy if you've ever tuned a PID loop, and there's plenty of good info out there on this. One thing I'll note: because the inner loop and the control signal live in different systems, there's a slight delay between them. So I and others have found that setting acceleration to the max value of 127 is helpful.

After the DYN4 side was configured, I installed LinuxCNC and confirmed the Mesa cards had the correct firmware and setup, then set up LinuxCNC with the config wizard. This was fairly straightforward and I didn't run into any issues. One thing I'll note is to double- and triple-check that your encoder and servo agree on travel direction and rotation when commanded.

Syncing the dual y-axis

Now the machine was almost ready for its first cut. Almost. I opened up LinuxCNC and double- and triple-checked each joint independently, then moved on to homing. Everything looked good and the motors homed successfully, but as soon as I moved that Y axis: ERROR, joint 1 following error. Joint 1 ended up throwing an overheat error at the dmm drive and shutdown so the motors no longer could work in sync. 

The first thing I did to troubleshoot was check squareness again, and there was most of my problem ,about 0.007" over 12", which I figured wasn't too bad. So I tried to software my way out of it. LinuxCNC has an .ini file that contains a lot of your machine's setup info, and one of the things you can change per joint is the home offset, so each Y axis motor can be used to force the gantry into being square. This sort of worked, but I was still getting random errors.

So I moved on to the next easy target on the Y axis: testing for backlash. That was even worse. It wasn't the ball nut causing the backlash , the BK fixed end block had absolutely no preload. My method for setting the preload was to remove the servo and put an indicator on the end, then apply a moderate force back and forth and measure the play. I also kept on eye on the encoder position to ensure no rotation was being applied. Then I removed the bearings, cut shims to size, and retested until there was close to no play and the ballscrew turned freely but with slight resistance by hand.

This helped further and almost eliminated the joint 1 error. The error still persisted though, and I ended up having to disassemble part of the gantry and re-square it, which is exactly what I'd been trying to avoid. I'm glad I did, though, as that's what finally stopped the syncing errors. So if you're having trouble with a dual joint axis setup, I encourage you to spend a lot of time making sure your Y axis is mechanically taut and square.

How much it cost

I attached a spreadsheet going over everything i could find on all that went into this. Initially i thought i was closer to only $4,000 but oooo was i off lol. Probably spent around 8.7k after everything is said and done. This bom does include things like a surface plate and other measuring equipment i needed to complete the project. But im also sure i missed some things and probably over counted my McMaster orders.

BOM

Over the next couple weeks ill be adding the following and do an update when completed
1.WAY covers!
2.Vacuum spindle enclosure with built in camera and lighting
3. Coolant system
3.(2) pallets for the vertical station
4.(2) vacuum table pallets
5.5th axis indexer

There's a lot I'm leaving out, and I'm happy to cover anything in more depth — just let me know. 
:)

u/BitsandBolts404 — 10 days ago
▲ 70 r/diycnc

My diycnc build log

CNC Build Log

I wanted to give anyone who's interested a little insight into what it took to build my CNC and all the challenges I faced along the way. This is a project I've wanted to complete ever since I made my first CNC out of MDF back in 2012. There was a lot that went into this build, so I'm leaving some stuff out and mostly logging the parts I found interesting and that may be of help to others.

The machine is made mostly from aluminum, except for the steel frame, steel rails, and the tool steel used to create a flat surface for the X axis. I originally planned on making the gantry from steel, but that would have required outsourcing the machining for most of the build, and I wanted to build as much as possible myself — all part of the fun for me. On the motion control side I'm using 750W DMM servos with their DYN4 drives, controlled by a Mesa 7i77 board and 5i25 card in a mini PC running LinuxCNC.

The Frame

This project started with the steel frame, which consists of some scrap 3" × 3" × 1/4" steel tubing I was able to get cheap from a local supplier. This was my first time welding something of this size, and while my welds looked good enough, my lack of experience showed up as the table warped… a lot. I ended up with one corner about 3/16" too low, far from what I hoped for. Obviously I never expected the frame to come out perfectly flat straight off the welding table.

My initial plan was to use a precision 48" flat bar and shims to get the desired flatness across the 18 mounting locations where the 1" aluminum plate would sit. This idea sort of worked, but I found it tedious and it was difficult to capture global heights, because every time I moved the bar it lost its starting reference. I thought there were ways around this with better sequencing and mapping in CAD, but I ended up with a better solution: a linear photodiode array and a laser level.

Measuring with a linear photodiode array (TSL1401 )

These sensors can be found online for cheap and feature a 128 × 1 array of photodetectors. The sensor array is about 8mm tall, giving a pixel-to-pixel distance of 0.0025". So the window is quite small, but the resolution is great because you get an analog response for each pixel.
The first problem I encountered was that I tried using my construction laser level, but the beam was nearly 5mm wide and the pattern wasn't sharp. So I ended up finding an adjustable Powell lens laser on eBay for $90. I was able to get the beam down to around 1mm over the steel frame's footprint and could measure down to comfortably 0.0015" on the surface plate. I can write this device up in more detail for anyone who's interested.

Plate leveling

Once I had all the measurements, I turned some 3" washers on my lathe accordingly. Then I moved each washer to its correct location with double-sided tape facing up and paste wax on both surfaces touching the tape. The 1" aluminum plate was then placed on top of the washers, sticking to the tape. This step was done to transfer the aluminum plate's flatness to the washers, since the steel tubing is still far from flat.

Next came the epoxy, which I thickened with fumed silica and aluminum powder to the consistency of peanut butter. I elevated the aluminum plate on some 2×4s — with the precision washers now adhered to the plate — then placed dollops of epoxy under each washer. The plate was lowered and allowed to cure for a week at 75°F in my shop.

After that, I removed the aluminum plate one last time, re measured, and shimmed accordingly. I never intended for the washers to get me all the way there. Their main function was to get me close in elevation and start me off with a flatter plane to measure from, since even a slight tilt in the TSL1401 sensor can lead to a large error.

Machining

Now that the foundation was done, everything else felt much more manageable. I was able to machine all the parts on my little G0704 mill/drill and verify them on my surface plate. This took over a year, but it saved me quite a lot of money and I gained a lot of valuable experience.

There was one thing I wasn't able to machine, and that was getting the Y axis steel 2" × 4" × 48" bars flat. I tried doing this on my mill/drill, but as some of you can imagine, having a 100 lb bar sticking out halfway past the machine was not a great idea. Finding someone locally to grind these bars took a little time — and by "locally" I mean a 2.5 hour drive each way. But $400 to grind two bars parallel sounded like a steal after contemplating hand scraping lol. Once I got the bars back, I made a compound support rest to take the weight off the machine while I drilled all the holes. This was much easier now that the bars were flat and I had a surface to reference from.

One other piece of machining I had fun with was the main X axis carrier block. Because of my design choice to put the two X axis rails on perpendicular planes , as opposed to the parallel arrangement most DIY CNCs use , I needed to join the two sub-assemblies that carried each rail. I ended up going with a shrink fit plus bolts to create a solid connection between them. After machining the two pieces and verifying with gauge blocks twenty times, I stuck the beautiful big block of aluminum in the oven at 400°F for two hours and put the smaller piece in the freezer. Then I set the hot piece outside on some aluminum blocks and inserted the little piece as quickly as possible. After torqueing the bolts and letting the aluminum rest for a couple of weeks, I re-machined the mating surfaces.

Assembly

At this point everything was machined and ready for assembly, so I'll go over a little of how I assembled it and did my best to ensure the machine was accurate and square.

The first thing was setting the steel bars parallel to one another and getting the spacing correct. To do this I used a giant set of 40" calipers, measuring at both ends. Once the bars were set, I moved to the Y axis rails, which initially get set the same way. After the rail ends were set, I made a stand for my indicator to sit on one of the Y axis rails and measure off a precision 48" flat bar. With one Y axis set, I adjusted the other to match using the indicator.

With the Y axis rails set, I moved on to the gantry. This was much easier, since I could fit the whole gantry on the surface plate. The rest of the gantry assembly and adjustment was fairly straightforward and similar to above, just smaller, so I'll leave that out. With the gantry done, I placed it on its Y axis block and began squaring the Y and X axes (I'll go over this in more detail below). This is very important for a dual Y axis machine, and I wish I had spent more time here up front. But I pushed on with assembly at that point I was so close to the first cut.

Tuning and commissioning

After the whole machine was assembled and the electronics were done, I moved on to the first movements. The DYN4 servo drives have an inner PID loop that needs to be tuned before moving on to LinuxCNC. The process is fairly easy if you've ever tuned a PID loop, and there's plenty of good info out there on this. One thing I'll note: because the inner loop and the control signal live in different systems, there's a slight delay between them. So I and others have found that setting acceleration to the max value of 127 is helpful.

After the DYN4 side was configured, I installed LinuxCNC and confirmed the Mesa cards had the correct firmware and setup, then set up LinuxCNC with the config wizard. This was fairly straightforward and I didn't run into any issues. One thing I'll note is to double- and triple-check that your encoder and servo agree on travel direction and rotation when commanded.

Syncing the dual y-axis

Now the machine was almost ready for its first cut. Almost. I opened up LinuxCNC and double- and triple-checked each joint independently, then moved on to homing. Everything looked good and the motors homed successfully, but as soon as I moved that Y axis: ERROR, joint 1 following error. Joint 1 ended up throwing an overheat error at the dmm drive and shutdown so the motors no longer could work in sync. 

The first thing I did to troubleshoot was check squareness again, and there was most of my problem ,about 0.007" over 12", which I figured wasn't too bad. So I tried to software my way out of it. LinuxCNC has an .ini file that contains a lot of your machine's setup info, and one of the things you can change per joint is the home offset, so each Y axis motor can be used to force the gantry into being square. This sort of worked, but I was still getting random errors.

So I moved on to the next easy target on the Y axis: testing for backlash. That was even worse. It wasn't the ball nut causing the backlash , the BK fixed end block had absolutely no preload. My method for setting the preload was to remove the servo and put an indicator on the end, then apply a moderate force back and forth and measure the play. I also kept on eye on the encoder position to ensure no rotation was being applied. Then I removed the bearings, cut shims to size, and retested until there was close to no play and the ballscrew turned freely but with slight resistance by hand.

This helped further and almost eliminated the joint 1 error. The error still persisted though, and I ended up having to disassemble part of the gantry and re-square it, which is exactly what I'd been trying to avoid. I'm glad I did, though, as that's what finally stopped the syncing errors. So if you're having trouble with a dual joint axis setup, I encourage you to spend a lot of time making sure your Y axis is mechanically taut and square.

How much it cost

I attached a spreadsheet going over everything i could find on all that went into this. Initially i thought i was closer to only $4,000 but oooo was i off lol. Probably spent around 8.7k after everything is said and done. This bom does include things like a surface plate and other measuring equipment i needed to complete the project. But im also sure i missed some things and probably over counted my McMaster orders.

BOM

Over the next couple weeks ill be adding the following and do an update when completed
1.WAY covers!
2.Vacuum spindle enclosure with built in camera and lighting
3. Coolant system
3.(2) pallets for the vertical station
4.(2) vacuum table pallets
5.5th axis indexer

There's a lot I'm leaving out, and I'm happy to cover anything in more depth — just let me know. 
:)

u/BitsandBolts404 — 10 days ago
▲ 66 r/diycnc+1 crossposts

First cuts with my diycnc

Wanted to share my first chips with my DIY CNC! Cutting some 6061 with a single-flute 6mm endmill at a DOC of 12mm and 0.5mm stepover at 1500 mm/min. For my first roughing operation on this machine, I couldn't be happier. There is plenty to improve upon, but seeing that stream of chips certainly made my day.

Today I'll be working on printing an enclosure for the spindle and getting the coolant fully operational. I will also work on tuning the machine more to see how far I can push it, hopefully getting closer to my target speed of 5,000 mm/min.

I'll have a full build log with more footage and the CAD model of the whole machine ready on Sunday. If there's anything someone would like to see more of, just let me know and I'll include it!

u/BitsandBolts404 — 13 days ago