This page documents my work on a CNC router capable of handling 24" x 48" plywood (64 x 127 cm). While the design can easily be expanded to handle a full 4' x 8' sheet, I don't have space for that kind of machine. The idea here is to have a largely wood CNC that can reproduce many of its parts. This philosophy was inspired by the wildly successful RepRap 3D printer that could create many of its own parts. Much of the design for this machine was lifted from that of the Lowrider CNC.
Rails for the X axis are made from 40" sections of 1" metal conduit spaced 100 mm on centers. Supports were milled from 3/4" MDF. Holes are spotted along a line on the rail with a large drill bit then drilled with a smaller bit. Elbow braces connect the rails to the supports.
The X axis is stiffened by 1/4" plywood braces in the X-Y and X-Z planes
In this build, the router will be mounted on the Z axis (aluminum extrusion in the figure) which is mounted to the wooden core. The Z axis has an OpenBuilds designed C beam linear actuator. In this configuration, the XL C Beam gantry plate is mounted on the core and the extrusion rides up and down with the router. The Z axis operates using a NEMA 23 stepper motor and a T8 lead screw. Here is a kit for the actuator priced at $180. The NEMA 23 motor is not included.
The X and Y axes run using belts driven by NEMA 17 stepper motors. If you want to use T8 lead screws, here is a link to where you can purchase one compatible with 4 foot motion (actually, for longer builds, a rack and pinion motion system probably makes more sense. Here is a link to a page for gear racks compatible with V-slot aluminum extrusions). Here is a link for a gear pulley that should work with the larger NEMA 23 motor. The core travels on the X axis rails (described above). The core rides on bearings that contact the X-Rails. Bearings (1/4" ID, 3/4" OD) use 1/4" bolts for axles. The photo on the left shows a core prototype build from 1/2" plywood, oak and mahogany. To the left of the Z axis, this photo shows the stepper motor mounted to accept the belt for the x axis.
Photo on the left shows four of the eight X axis bearings viewed from the bottom. The figure shows how the bearings ride on the rails. No wood piece of the core touches the rail. In the center right of this photo you can see the head of the lag screw used to tension the bearings to the rails.
For the Y axis, bearings were sandwiched between two wooden supports. This newer design is intended to offer greater support for the axle. The Y axis motion rides on two sets of bearings. The photo on the right shows the bearings for the low-X end where the machine rides on a rail made from conduit. On the other, high-X end, the machine rides on a single set of bearings running on a flat surface.
While the Z axis is controlled by a motor turning a lead screw, the X and Y axes are driven by timing belts. The X axis motor is mounted on the core. All three belts are fixed at the axis ends and wrap around idler bearings near the motors. One end of each belt is connected to an adjustable block that sets the tension. The photo on the left shows the back side of the core, including idler bearings for X axis belt. A small piece of 1/8" plywood bridging the idler bearings prevents the belt from slipping away when the belt is loose.
The X axis is carried in the Y dimension by two carriages, one at the low X end (shown on the left) and another on the high X end (shown on the right). The low X carriage rides on a rail made from metal conduit. At the high X end, the carriage rides on flat mdf. Both are powered by NEMA 17 stepper motors.
The photo shows the end of the X axis with the adjustable belt end and the limit switch. The belt end design was inspired by that of the Lowrider CNC. Each belt is wrapped around a 3 mm machine screw and held in the groove of a wooden clamp. On the adjustment end, the clamp is screwed to a block that is pulled by screws to adjust the belt tension.
Our build table is supported by two cabinets that were being thrown away during a local university renovation. Cabinets were mounted on casters and cut down for the build table height to match that of our table saw. Many of the ideas behind this table were lifted from this design. Most of the support is made from 3/4" mdf. pine stringers were added to give threaded inserts something to hold to. the spoil board is 3/4" mdf that goes on top of the stringers
We are in the planning stage for dust management. Here is a link to an instructable for a dust boot that looks good to me. One nice aspect is that it comes apart into an upper and a lower pieces that are joined with magnets. Here is a link to a dust collector that I wish I had room for.
The configuration of the LowRider CNC that we used as a model has two motors each for the Y and Z axes and one for the X axis. That requires a controller with five motor drivers. Using the OpenBuilds linear actuator on the Z axis reduces that number to four, allowing us to use the Rodent board from Big Tree Tech (a low cost option) for this build.
The machine is powered by 110 volt AC that runs through the ceiling of the shop. Lighting is incorporated under a shelf suspended from the ceiling. The light switch also powers the AC to DC converter (24 volt), which is on a shelf suspended from the ceiling. The router and vacuum are both powered from a relay that is switched by the controller.
Here is a Youtube video that talks about installing FluidNC on an ESP32 microcontroller. Apparently, the Web Installer for FluidNC (accessed from the wiki getting started page) does not support Firefox. I got an error message saying "Browser not supported". wtf? The error screen recommends using chrome, edge or opera instead. Here are steps for installing FluidNC.
Open the Fluid NC Web Installer on your computer using one of the supported browsers.
Power your controller board from your DC source (While the first version of this board, V1.0 could be powered over usb, the V1.1 board cannot).
Plug a usb cable in to the controller and the computer and connect via the Web Installer. You will be queried for which com port to use.
Install a version of FluidNC by clicking the appropriate buttons. I chose the WiFi version without Bluetooth.
Enter the WiFi setup page and enter your system name (SSID) and password. Here is a link that helps with setting up WiFi.
When your controller connects make a note of the ip address noted on the screen.
The configuration file (rodent.yaml) from the rodent github page needs to be modified to reflect the realities of your machine. I used the code editing program Notepad++ to do this.
The configuration file can be modified over WiFi or the web installer.
1. Download the rodent.yaml file from the rodent GitHub site.
2. Open the file in Notepad++, make the desired changes and save the file with a new name.
3. Click on the button for the files on the esp32. That will take you to a screen where the files are displayed. Click on the upload button and select and upload your configuration file. This should now show you that your file is now on the controller. Select this as the default configuration file.
4. On the left side of the web installer is a button for viewing a terminal. The terminal page has a button to restart the controller. Hit that button.
Things that I changed include:
The Spindle. The default in the configuration file is for a brushless DC spindle with variable frequency drive that is controlled by RS485. I plan to change run a Makita palm router controlled using a relay. This is done by (1) deleting all the code in the yaml file that refers to uart1 and Huanyang (lines 202 through 214) and replacing it with the relay code from here. Even that required a little modification: The rodent board has the output pin for the relay as gpio25, rather than gpio.26 (as listed in the example code).
Two motors on the Y axis. Here is the FluidNC wiki page that discusses multiple motors and auto-squaring. The downloaded rodent.yaml configuration file was set up for four independent motor drivers on four independent axes; X, Y, Z, and A. The configuration file is set up with a number of parameters for the axis, followed by parameters for motors associated with that axis. To get the Y axis to work with two motors, I moved the A motor code to be under the Y axis and changed the motor designation to be motor1 from motor0. I also changed the number of microsteps on motor1 from 16 to 8 in order to match the number of microsteps on motor0.
the maximum rate, direction of homing and limit pins, steps per mm. I discovered that the 0.5A currents were insufficient to run the Y and Z motors. I increased the current to the Y motors to 1.0A and the current to the Z motor to 1.5A.