I've been working on a homemade CNC now for quite some time. My goal for the project was to produce something modular, where shaft-mounts, motor mounts and bearings were entirely separate parts using a standardized mounting pattern. This would allow the machines to be put together like Legos and has a lot of advantages, like the ability to mix and match drive options, e.g. in the image below, one axis is screw-driver while the other is belt-driven.
I still think this concept has merit, however the part designs that I ended up using made for bulky and not particularly stiff machines. In the photo above, the top of the XY table is close to six inches from the base plate and the machine itself has considerable give. Even worse, I didn't build enough slop into the designs to accommodate tolerances for manually built mounting plates, so it was actually quite difficult to get all the pieces to play nice.
I've since redesigned the machine to use more compact mounts, merged the shaft and motor supports into a single axis-end part and moved to half-inch shafting. The switch to larger shafting results in a much stiffer machine, but unfortunately does require bushing style bearings. Using the combined axis ends simplifies alignment, but unfortunately precludes belt drives. I've also switched to Nema 17 steppers from Nema 23s, which leads to a more compact overall machine. Surprisingly they don't seem to have much affect on the overall machine speed. This makes for a much cleaner design:
Like the old parts, the new parts are 3D printed, but this time on my recently acquired RepRap. The meshes were parametrically generated using my Python contructive solid geometry library, which is becoming quite usable. This serves for prototypes, but final parts could be machines from plastic or aluminum. The fixed-end for the leadscrew uses the same axis-end as the motor side, but with some bearing plates and Nylin nuts to take the axial loads:
After switching to acetal linear bushings, the bearings mounts can be made much more compact, reducing the height of the XY table from about six inches to a shade over 3. These seem to run nicely on plain hardware store shafting, although hardened precision linear shafting would obviously be stiffer and smoother than cold-rolled bar stock.
Overall the machine is looking much cleaner. I've decided to go with a knee-mill style machine rather than a gantry arrangement. This means an XY table horizontally with a third axis mounted vertically. I bought a massive piece of aluminum channel to serve as the base of the machine, 10"x3"x20". This provides a sturdy mount, and the controller and power-supply can be mounted to the underside. Here's the thing midway through the build process yesterday:
And here's the finished-except-for-limit-switches XY table mounted to the channel. The green duct tape is just there to stop it from gouging up my coffee table when I move it. I will also probably replace the top cheese-plate with a thicker piece of flat-bar that's had all the holes drilled and tapped; I can't tell you how much I'm looking forward to doing that.
The mount for the Z-axis will be attached at the near-end of the machine. I still have to design and build that mount, as well as print out the parts for the third axis.
After assembly, I simply had to try it out, missing limit switches or not. I hooked it up to my 3-axis controller board with the Pololu A4988 carrier board carriers. The Arduino is flashed with GRBL, and wired to the carrier boards, which are in turn wired to the steppers. I need to find some extra heatsinks for the X and Y axes, along with some thermal tape or epoxy, but they seem to run cool enough for testing anyway.
Here is it running, the first time I've gotten one of these CNC projects using actual GCode. The leadscrew for the Y-axis is a bit loose in the fixed-end bearings, causing the knocking sounds, I have to look into the alignment, but otherwise it's working pretty well. Speed is about one inch per second.
Next up will be designing a mount for the Z-axis. I'm quite happy with the current set of printed parts and will probably continue to use them.