Welcome back to the saga of my CNC router build.
To summarize my learnings from my first CNC build:
- It was very difficult to adjust the bearings.
- It wasn’t big enough.
- The stepper couplings to the lead screws need to be isolated from forces along the length of the screws.
- Using 13 tpi lead screws means the stepper motor needs to be driven fairly quickly in order to move the axes at anything more than a snail’s pace. This means the steppers are operating in a low-torque regime most of the time. This in turn leads to missed steps.
- MDF and aluminum angles, while cheap, aren’t the lightest, stiffest or strongest materials for building a CNC machine.
In short, I needed a better design.
As I was building the Mark 1 from the “How to Build a CNC Machine” book, I was already looking ahead to what my next machine should be. I realized I wanted a machine that was mostly made of metal and that used something better than all-thread for the lead screws. At some point, I stumbled upon the OpenBuilds website. This is a build documentation, blog, forum and parts store dedicated to supporting the construction of open-source projects around the aluminum extrusions they sell. They have a number of build categories including 3D printers, laser cutters and CNC machines.
One of their most popular builds, designed by the creator of OpenBuilds, is called the “OX”:

The OX uses the V-slot linear rail and polycarbonate wheels to form the bearings. The bearings can be adjusted via the use of eccentric spacers on the wheels. It uses 3mm neoprene and fiberglass belts for the X and Y axes (instead of lead screws) and an 8mm Acme lead screw for the Z axis. The only MDF in the design is used for the spoil-board. The build log for the OX has a very detailed BOM as well as an assembly video. Someone even uploaded a spreadsheet to calculate material sizes based on the desired cutting area.
All of this was music to my ears. I decided on building an OX as my Mark 2. It would have 1500mm X-axis rails and a 1000mm Y-axis or gantry rail (for some odd reason the plans refer to the gantry as the X-axis even though convention is to call the longest axis the X-axis). This gives me a cutting area that is over 48″ x 28″. The only downside is that it uses two steppers to move the X-axis, meaning I would have to get another stepper for the Z-axis. The Z-axis stepper, however, is a smaller size (NEMA 17) than what I had been using on the Mark 1 (NEMA 23).
Almost all of the parts I needed are available from the OpenBuilds store. The priciest items are the X and Y rails. I reused all of the electronics from the Mark 1 to which I added a new Z-axis stepper and driver. One set of parts I didn’t buy were the gantry plates. The OpenBuilds site provided the DXF file of course, but I milled them myself with the Mark 1 out of a sheet of 1/4″ Garolite purchased from McMaster-Carr. So the Mark 1 helped build the Mark 2 – the OX:
For once, the Mark 1 behaved and didn’t seem to drop many steps, if any. The plates were somewhat marred by the endmill not being lifted high enough between cuts. This was caused by a bit of bowing in the Garolite sheet. Fortunately, it was completely cosmetic.
The rest of mechanical build was straightforward once I had watched the build video.




Except for a couple breaks where I had to wait for parts I forgot to order, the mechanical build was done:
I turned my attention to the electrical portion of the build. The Mark 2 was shaping up to be a much cleaner machine in term of design. The cable routing on the Mark 1 was, frankly, a mess. It wasn’t tidy at all. I wanted to do better – especially since I was going to add limit switches and their associated wiring to the cabling needed for four stepper motors. A nice way to organize cables on CNC machines was to use “drag chains”. I ordered a couple of sets from Amazon.
Like the Mark 1, I decided to make my own stepper motor cables out of separate 18 gauge stranded wires that I twisted together. For the limit switches I pulled apart Cat5 cable I had and used individual twisted pairs for the wiring. I came to regret both of these decisions as you will see shortly. The new stepper motor cables plugged into the connectors I had attached to the steppers on the Mark 1. I soldered the twisted-pairs to the limit switches. I ran these wires in two different drag chains – one on the gantry and one along side the read X-axis rail.
Once I finished the wiring, I modified and tested my MachineKit configuration for the new geometry represented by the belts and acme lead screw. Because the OX was built from metric components, I moved from English to Metric in the configuration file. When I tested the configuration, I had to iterate to get reasonable maximum velocity and acceleration values.
I then began adding home switch support to my configuration. Fortunately, I found a web page explaining in detail how to do this for a MachineKit/BeBoPr combination that was invaluable. I was able to make the limit switches be read by the BeagleBone. However, when I tested the auto-home function in MachineKit, it failed to home correctly. When I checked the limit switch values with the steppers off, it worked fine. But when I enabled the stepper drivers, the values read from the switches became very flaky. It was time to break out my oscilloscope. This is what I saw on the limit switch inputs to the BBB with the steppers off:
But with the steppers on, I saw this mess:
Obviously, the signals from the stepper drivers to the steppers was injecting noise onto the limit switch wires. This was exacerbated by the 3.3V levels needed by the BeagleBone inputs. It didn’t take a whole lot of noise to read false logic values. I settled on a two-fold approach to fix the problem:
- Move the “high” and “low” values farther apart by using 5V signaling and adding a voltage converter to get back to the 3.3V levels the BBB requires. This increased the headroom for noise.
- Use shielded wiring for both the stepper and limit-switch cables.
To be honest, the prospect of ripping out all the wiring I just finished to put in shielded cables didn’t thrill me. But I really didn’t have much choice. First I went to 5V signalling and a voltage converter. I used a pair of level converters from Sparkfun. After a bit of futzing, it worked well. Next came the rewiring job. I put it off for a few weeks out of dread and lack of enough time to devote to it. Naturally, it wasn’t nearly as bad as I feared. I was able to rewire most of it on one weekend afternoon.
Drag chain with shielded wiring
After the two fixes, this is what the signalling looked like with the steppers on:
Much better. In addition, while I was rewiring things, I changed how I wired up the limit switches to use the normally-closed position. This way, any open occurring due to a wiring failure will look like the machine is hitting its limits and will cause the machine to stop (or at least it will once I configure the software to do that).
The “auto-home” feature now works flawlessly. My new machine was now essentially complete:
Note the monitor and keyboard stand I build out of plywood. It’s shaky, but it works.
Even though my build was done, I still had more work to do which I’ll cover in my next post:
- Determining the best “feeds and speeds” for cutting wood
- Configuring the soft-limits
- Configuring the limit-switches
- Engraving the spoil board with a grid of lines
- Building a dust-collecting “shoe”