Building a home-made CNC milling machine...

clm2112

Patriot Serving Patriots!
Exchange Privileges
Joined
Jun 19, 2022
Messages
1,107
Reaction score
1,620
Points
128
I need another project like I need a hole in the head, and I will probably live to regret this, but I'm going to do it anyways. So here goes nothing...

I'm going to make my own CNC mill by converting an all-manual operated bridgeport style knee mill into a computer controlled one. I'll keep adding to this thread as I go, and feel free to chime in if I'm about to do something obviously stupid. I see this taking months to complete. The end goal will be having the machine cut a Sig P320 fire control unit blank from a sheet of stainless steel stock. I'll figure out how to fold it up later, but I have to create one to even try.

First problem... Money. I want to avoid purchasing proprietary software and hardware to do this. So there appears to be two possible avenues to pursue in the open-source world: LinuxCNC and GRBL.

LinuxCNC is a IBM PC based solution. A set of tools running on the Debian Linux operating system, operating the motors of the mill in real-time via a simple hardware interface. There are several choices, but the lowest cost one is a parallel port break-out board (called a BOB.) The BOB takes the PC's parallel printer port and uses the signal wires to run the stepper motors and read the limit switches on the mill. In this setup, the PC is the entire brains of the mill.

GRBL is an Arduino based solution. An Arduino micro-controller is loaded with the GRBL program. A CNC Shield tacked onto the Arduino give the Arduino a hardware interface to the motors and switches on the milling machine. In this approach, the PC feeds commands to the arduino through a USB cable, and the Arduino executes them on the motors and switches in the milling machine. This way of doing it is arguably safer... the arduino's only task is to look after the hardware in real-time. Taking the load off the PC that is feeding commands.

Now, which is better? I dunno. I'm going to try it both ways. Both methods work the same way. They take G-code commands and carry them out by moving the motors on the mill. One does it all on the PC and the other is a dedicated micro-controller that carries the commands out as it receives them.

Either way, we are looking at probably $100 worth of chips and boards to start with. I already had a spare Arduino (Uno R3) laying around, so I needed the shield board, which arrived today. The BOB needed to do the same thing with LinuxCNC also arrived today. So, the initial hardware purchase is done. I can play around with both before figuring out the specs of the motors needed to run the mill, which will dictate what kind of motor driver circuits and power supply needs to be acquired.

DIY-CNC_Interface_Boards.jpg


Now, there is another aspect of this project that has to be considered.... How to generate the G-code commands that are going to be executed in the first place. Fortunately, it is the same for both.

First, you need a drawing of the part to be made. That's the CAD in the CAD/CAM world. In my case, I'm using FreeCAD for linux. It's the same software I've been messing around with 3D printing.

Next, you need to take the drawing and create tool-paths. That's the CAM part of the CAD/CAM world. A tool path program takes the drawing and creates the sequence of instructions for the mill. If you imagine the cutter on the mill as a race car driving around a track, then the CAM is the detailed description of each lap the car is going to take around the track.... when to turn the steering wheel, when to step on the gas, when to shift gears, when to stomp on the brakes, etc. It is every movement the mill is going to make. In the 3D printer world, this is the slicer. In my case, there is a free CAM package available called DeskProto that looks like it will fill the role.

And last, you need something to take the tool path files (which are in G-code) and feed them to the hardware. For the Arduino this is done by an application called GCodeSender. It is going to be the front panel of the mill represented on the PC talking to the Arduino and feeding it the G-Code command by command. In LinuxCNC, the application itself takes on this function, since it operates the motor directly.

And that is pretty much all that is going to be involved.

The next task for me is to load the GRBL on the Arduino and test it out with some dummy hardware (a make believe mill to make sure all the inputs and outputs or OK.) Then scrounge around the garage and the basement to see if I already have some suitable motors. I recall boxing up the motor from my ex-wife's treadmill... from one of her many failed attempts to loose weight. I hear those motors make excellent variable speed spindle drives. Go I guess I need to dig through the boxes of stuff that moved with me from Florida.
 
Last edited:
Thank you for documenting this. Looking forward to seeing your progress and updates. Also interested in the performance of LinuxCNC vs GRBL. I've had bad experiences with my 3D printer having commands sent real time to the printer from the computer. Not sure if it is delays in the interface or the computer delays (Windows doing its normal thing and periodically "freezing" for a short moment). Thinking the LinuxCNC will be best as there at least isn't a middleman getting info and relaying it.
 
I like that video. Gave me a few ideas.

I was wondering how I was going to get a motor to run the Z axis, which in my case is either moving the quill of the machine, or moving the knee. Both are big chunks of metal, over 100 lbs each. (Yeah, when I was assembling the mill, I had to use an automotive cherry-picker to lift them.) However, his idea of using gas struts to balance the weight is brilliant. I'll do that to the mill whether the conversion to CNC is successful or not. So the big hand crank on the knee could go away.

The other idea was how he is driving the screws. The X-Axis has the servo motor directly rotating the screw via a lovejoy coupling. The Y and Z axis stepper motors are using a toothed belt that provides a reduction gear. That is the route I was thinking of using too... though I was thinking of adding a clutch of some form to disconnect the motors from the screws, so I could still use the mill by turning the hand wheels. It would mean that the machine would have to go through a reset before the CNC could take over again, but I can live with that.
 
Thank you for documenting this. Looking forward to seeing your progress and updates. Also interested in the performance of LinuxCNC vs GRBL. I've had bad experiences with my 3D printer having commands sent real time to the printer from the computer. Not sure if it is delays in the interface or the computer delays (Windows doing its normal thing and periodically "freezing" for a short moment). Thinking the LinuxCNC will be best as there at least isn't a middleman getting info and relaying it.

Actually, I think the reverse is going to be true. The delays caused by the PC's operating system can induce the jitters on the stepper motors. The motors need to accelerate/decelerate based on the mass they are moving. If the PC is off doing something else between motor step commands, it looses control of the motors while it is off checking the keyboard, refreshing the video, etc. The Arduino doesn't have much to do... drive the motors and listen for the commands from the PC. I think it will work better in that regard.
 
Thought about a kit? I've pondered BobsCNC Evolution. The plywood frame is odd but the rig has a cult following.
 
Thought about a kit? I've pondered BobsCNC Evolution. The plywood frame is odd but the rig has a cult following.

Not really, a kit isn't really a good fit. It is a question of scale. There are some ideas that would make a great half step... like a CNC X-Y table that could be mounted on top of an existing mill or drill press. But to drive a 700 lb. or more milling machine, the motors are too lightweight.

NEMA 17 stepper motors looks to be the size that gets used a lot in table-top units. Makes sense, it is the size used in all sorts of consumer products like 3D printers, paper printers etc. So it would be reasonable for a hobbyist to gravitate towards that size. Just not enough "Umph" to move larger masses.

Bigger motors also need larger power supplies and driver circuits to apply the power to the motor windings. So everything gets scaled up. About the only thing that doesn't need scaled up is the logic board that commands those driver circuits. It can still operate at power levels compatible with a computer. They don't have to feed the power to the motors directly, they just talk to the driver circuits.

The end result of buying a kit, for me anyways, is most of the kit's parts get upgraded to handle the larger motors, so I might as well go strait to the large motors and driver circuits at the start.

BTW... if anyone does want to do just a small X-Y table and use it with, say, a dremel drill stand... well, you more or less have a GG3. Might be worth doing in it's own right for working on just plastics.
 
A little installment in the project.

The stepper motor drivers showed up. These are little ones (chi-com copies of the Pololu DRV8825 and one TB6600 driver.) Not proud of using chinese copy-cat products, but these are likely going to get smoked at some point in this project so they are sacrificial offerings already. Once I get the hang of this, I'll switch to name-brand industrial motor controllers.

The Arduino is an Uno R3 version. (Actual Italian Uno, not a clone)
The CNC shield board is a Protoneer ver 3.00 (Again, a factory board, not a clone)

Currently allowing the epoxy on the driver board heat-sinks to cure. They came with self-adhesive pads on the aluminum fins. Seemed kinda flimsy, so they got a blob of epoxy to tack them to the circuit board.

Also scrounged the stuff from work, like micro-switches which will become the limit switches on each axis. I'm going to try get some of this wired up and tested out over the holiday weekend.

Here's a link to the Shield board maker's site covering it's setup instructions. Pretty much what I am doing.

Arduino CNC Shield ā€“ 100% GRBL Compatable

And the stepper motor drivers that my cheap clones are supposed to be copies of. If they are wrong, that's on me and I'll have to spring for a couple of originals to try again.

Pololu - DRV8825 Stepper Motor Driver Carrier, High Current


For the non-electronically savvy: What are stepper motor drivers?

They are just smart amplifiers, very similar to what powers the speakers in your home stereo. They take the low power signals from the computer board and jack up the power to turn the motor. The design is modular and protects the computer's circuit from being damaged. You can blow one of these up trying to power too large a motor, so they are throw-away parts.

The little computer runs at 5 volts DC, with a maximum output of 1 amp total. The stepper motor drivers can run at 12 to 36 volts DC at up to 2 amps per motor winding (two per motor). So the motors can easily outstrip the ability of the computer to power them directly... they need an amplifier to keep from burning up.
And that is just for the little motors I'll be testing the circuits with. The actual motors powerful enough to run the mill are going to need bigger drivers providing more power (that will be the switch to the Toshiba TB6600 drivers.)
 
Last edited:
Feel like I worked on this all day. Epoxy is dry and I finally got the Arduino IDE to compile the latest GRBL firmware (1.1h) and upload to the Arduino. Release v1.1h (2019-08-25) Release Ā· gnea/grbl

I can talk to it now using just a serial port and console.

For the 3D printer crowd... this Arduino board and GRBL software is the CNC equivalent of the Marlin firmware loaded into a Creality or similar 3D printer. The two systems have a lot in common.


CNC_20230702_1.jpg


Next step is to get some actual control software loaded. This is the stuff on the PC that will feed the G-code commands to the Arduino to execute. It also doubles as a front panel, showing the position of the mill in all axis and what is running.

The two I'm trying out (both freeware) are Candle and UGS

Candle's source code and installs: GitHub - Denvi/Candle: GRBL controller application with G-Code visualizer written in Qt.

UGS is available at Download - UGS
 
Last edited:
Man I could seriously get into this.....I'm thinking GG3 though. I like the fact that they are customizing slides and cutting optics, skeletonizing lowers, not to mention everything else
 
Any progress on this project? I wish I had room to setup my ol Bridgeport however the property I own was redefined as "floodplain" in 2010 by Pima county so they could expand environmental regulations (feds still say its not) so its an insane set of hoops to put up permanent structures tht require permits and inspections hense puting everything into a 53' semi trailer LOL have thought about converting the Bridgport for years but now would pretty much have to build it a "shed" 10x20 for it to live in in order to get around permit requirements.... its living disassembled in the front of the semi trailer while I'm using a very tight 1974 JET16 it and the Colchester Batam 2000 lathe are both running really nice LCD 3 axis DROs (I like the graphics over my old LED readouts lol) with tachs and power feeds etc.. but still keep looking at the crates up in the front thinking bout a CNC conversion
 
Last edited:
No progress recently. Been trying to get a list of other stuff done. Hoping to get on this over the winter.
 
I doubt I will ever advance beyond yanking my cranks.
 
I doubt I will ever advance beyond yanking my cranks.
No progress recently. Been trying to get a list of other stuff done. Hoping to get on this over the winter.
I figured I'd had enough after we closed down the shop we were an importer/manufacturer and I just packed what I could in a couple containers and let everything else go, was going to just be content to setup my little shop in the semi trailer with the ol jet mill and Bantam 2000 in case I needed to make something for a project..... then well started adding stuff till now they aren't so basic anymore LOL!

And now clm2112 has me thinking maybe cnc would free up some time AND still finish some old un finished projects that are currently packed away LOL
 
Back
Top