Project CNC Mill Is Not Square, And It Shows

After our most recent test cutting session, I wanted to prepare our scrap MDF stock for the next test by milling off everything earlier and leaving a flat surface. And like most tests, there was an unintended and interesting data point: The surface is not flat. Not only that, it was the worst “not flat” yet. Our first cutting session did not result in a flat bottom surface, either, but because there was so much tool chatter, it was hard to distinguish one contributing factor to another.

First cuts chatter fest

The second cutting session left us a very smooth bottom surface. Since we eliminated the majority of chatter in this session, we thought chatter was a contributing cause and life was good.

Light dust indicates good repeatability

But with the third session’s results in hand, we now know it wasn’t quite that simple. The nasty tool chatter has been mitigated, but the bottom surface is poor. The ridges are consistent with a cutter tilted from vertical axis.

The square-ness of this machine was always a question mark, because it was only set up by eyeballing against a machinist’s square. This is better than most drill presses, but barely counts as a starting point for a vertical mill. MDF is more forgiving than machining metal, so the fact we have three clearly different grades of surface finish means something changed drastically between runs. Well, “drastic” relative to CNC milling norms, where the thickness of a sheet of paper is a big deal. In normal everyday human experience it was pretty small, but still, what caused the change?

After some consideration, we realized we already knew the culprit: our bent Z-axis ball screw. As our cutter travels in the Z-axis, its tilt relative to the table would vary slightly. Since we’ve been using the same piece of scrap MDF, every test session cut slightly deeper than the last. When we are lucky as in the second project’s bottom surface, we find a height where things are very close to square, and we get a smooth finish. Otherwise we see ridges left by our endmill as it cut across the surface while not quite vertical, pushed off axis by the bent screw.

Back when we realized the Z-axis ball screw was bent, we thought we’d use it until it proves to be a problem. We have now reached that point. Between the bent ball screw and loose Z-axis rollers, redoing the Z-axis (for the fifth time!) is moving up on the priority list. But not at the top yet, because even though we’ve identified this limitation, we still have things we can explore.

Running CNC Program Again Shows Encouraging Consistency

Once we made adjustments to Fusion 360 defaults to be friendlier to our scratch built CNC mill, the generated G-code program gave us better results with less tool chatter. There’s still more chatter than we’d like, so we still need to find and fix weak points like our Z-axis rollers, but these CAM parameter changes are enough to let us continue exploring the world of CNC in parallel with our mechanical work.

This test program was generated by Fusion 360’s “2D Adaptive Clearing” feature. The tooltip for the feature explained its intent is to minimize abrupt changes in direction, which we think is a good thing for a machine lacking rigidity. What it also means is an impressive looking tool path far more complex than what we would try to write by hand.

Adaptive clearing

After we ran this program on our scrap MDF test piece (already partially cut from earlier tests) we vacuumed away the debris and saw a very satisfying result. The rough edges from tool chatter have all but disappeared. With that dominant artifact removed, it leaves us with minor imperfections that we can work on.

The first question is: are we losing steps in the motor control? That might cause some of the imperfections here. We had problems with missed steps when we first introduced the motor spindle, so now it is the first thing we check. And the easiest test to run is to run the same program again. In an ideal case, the machine would perfectly duplicate its motion and no new material would be removed. If we had lost steps, the controller’s internal coordinate position and the actual tool position would be offset by some amount, causing us to cut the same shape in a slightly different place.

The actual result was somewhere in between. As shown in the picture, we did get a light dusting of powdered MDF from places where the cutter removed a tiny bit of material. It was not consistent enough in any particular direction for us to think steps were lost, which is good news. We are free to continue our CNC exploration and find entirely new problems.

Making Fusion 360 CAM Friendlier To Hobbyist CNC Mills

In parallel with investigating points of weakness within the physical structure, we’re also learning how to make Autodesk Fusion 360 CAM friendlier to hobbyist grade CNC mills. We know our project machine, built mostly out of salvaged parts, is not a CNC powerhouse. We now need to tell Fusion 360 how to be kinder to it.

Looking over parameters for tool path generation, the first item we noticed is the default of “Climb Milling”. We’re not professional machinists, but we knew enough to know this is not a good way to go for this machine. But what if we didn’t even have that much knowledge? Thankfully Fusion 360 included a brief explanation accompanying many settings, including the “Sideways Compensation” parameter relevant here.

Climb milling explanation

Key phrase in that explanation: This generally gives a better finish in most metals, but requires good machine rigidity. Our machine is not rigid at all by CNC mill standards and must be switched over to “Conventional Milling”. Most real CNC mills in operation today are rigid enough for climb milling, so this was a reasonable default value for Fusion 360 to use, just not for us.

We also wanted to take shallower cuts in the material, as by default Fusion 360 generates code to tell the CNC to plunge into full cutting depth of the cutter. Making full use of all cutting surfaces on the tool is a reasonable default, but that involves removing far too much material at once for our mill. To tell Fusion 360 to take shallower passes, we can select the “Multiple Depths” option.

Stepdown explanation

Unlike the other explanation text, this doesn’t mention the setting as a potential compensation to lack of machine rigidity, but it worked. Our next test cut was far more successful.

Z-Axis Rollers Contribute to Tool Chatter

During our chatter-dominated CNC testing session, we used our fingertips to feel around machine structure. Most people’s fingertips are sensitive enough for identifying the presence of relative motion between mechanical parts, though only very few people can accurately quantify the distance of that motion. In this case we wanted to know which parts are moving relative to other parts, and our fingers were great for the purpose.

One of the weakest links in our machine rigidity were the four rollers aligning our Z-axis vertical extrusion beam. Two each on left and right sides of the spindle, one above the other. We could feel the vertical extrusion beam vibrating within these rollers clamping them in place.

Examination after our cutting session found the lower two rollers loose. Before this session, all four were tightened up against our vertical beam allowing no movement and enough friction they were difficult to turn by hand. By the end of the session, the lower two could be moved by hand. It appears the upper two held tightly enough to act as a fulcrum, and our cutting tool had enough leverage to move the lower two loose.

Movement of the lower two rollers were a consequence of this modular design built out of aluminum extrusion beams. These rollers are held by square nuts inside the slot of an extrusion, meaning they were held in by friction. When forces build up enough to overcome that friction, these square nuts would slide within their slot, loosening our rollers.

Until we find a better way to arrange our Z-axis, we will have a constant maintenance task of re-tightening these rollers. We also went looking in Fusion 360 CAM for settings to take shallower cuts, and together they made follow-on session a lot more successful.

Problem of Tool Chatter Dominates CNC Session

Obtaining maximum spindle RPM was the last bit of preparatory setup for our next CNC work session. There are still lots of parameters we don’t yet understand for Autodesk Fusion 360 CAM, but we knew the fundamental bits and put them in as parameters for G-code generation calculations.

Specify offsets and toolpaths using Fusion CAM, though, is still a skill we’re not very practiced at just yet. In the spirit of incremental learning, we try not to let the unknown stop us from experimenting. Mistakes are expected and, as long as nobody gets hurt and nothing is broken (well, even if something is broken) each run should teach us a little more about the process.

And the lesson of the day is tool chatter. Lots of it.

In action the machine really sounds unpleasant, but not quite bad enough to make us think breakage is imminent, so we would let it run in short sessions while we experiment and try to understand its cause. Slowing down our feed rate and adjusting our RPM appeared to have little effect, the variable that mattered was the depth of cut. Even though we had expected MDF to be relatively easy to cut, we now believe the machine is not rigid enough in its current state to cut 3-4mm deep with our 1/4″ cutter. The final cutting pass in this test program (creating the X shape) was only 1mm deep, and that ran quite smoothly even at higher feed rates.

Lessons from this session tells us we can take two parallel approaches: mechanically, we’ll need to think of ways to improve machine rigidity. And while that is under development, we’ll need to learn how to tell Fusion 360 CAM to take shallower passes.

Spindle Clocks In At 11,100 RPM

Once some convenience accessories are in hand, we return to the main business of cutting material. Our biggest unknown at this point is our spindle’s maximum speed measured in revolutions per minute (RPM). This is a critical part of calculating the “speeds and feeds” of machining. Yes, we’re cutting MDF which will be relatively forgiving, but the point of learning is to practice doing it right.

Our cheap ER11 spindle’s product page(*) claimed a maximum speed of 12,000 RPM, but we knew better than to take that at face value. To measure its actual performance, we wanted some sort of non-contact photo tachometer(*). This particular unit was on hand and originally designed for measuring remote control aircraft propeller speeds, and it measured the maximum speed at 11,100 RPM. We’ll use 11,000 RPM for our initial calculations. Later we’ll measure while it is cutting and see how much its speed drops.

Is this fast? Well, “fast” is always a relative thing. Most people’s daily experience with RPM is on their car’s dashboard tachometer. In that context it is fast as 11,000 RPM is faster than most normal car engines, though race cars and motorcycle engines can hit that speed. For machine tool purposes, though, this speed is considered on the low side. Especially for small diameter tools that we’ll be using. Physically, we are limited by the small ER11 collet for our tool diameter. Plus the machine is not rigid enough to swing a big cutting tool without flexing. And now we know the limitations of spindle speed. Which of these limitations will be the one to actually constrain what we can do with the machine? Let’s have another cutting session and find out.


(*) Disclosure: As an Amazon Associate I earn from qualifying purchases.

Hex Wrench Holder And Wire Clip For Gantry Extrusion

The first project for designing accessories to mount on the extrusion beam, a holder for ER11 collets, turned out well enough I wanted to continue. Apply some of the lessons learned to create more nice-to-have accessories for the CNC project.

One accessory is a holder for a 5mm hex wrench. This is the size used by the fasteners bolting our gantry’s extrusion beams together. There are a set of four bolts, two on the left and two on the right, that we loosen to adjust the height of the gantry. Lowering the gantry lets the cutter cut through our work surface to cut holes for threaded inserts, raising the gantry gives us more Z travel for the work piece. Or we might deliberately trade off Z travel to use a shorter and more rigid gantry for more challenging pieces. We’re not sure what the viable combinations are, but we do know we’ll need this wrench handy for experimentation.

The other accessory is a wire management clip. Wiring is a perpetual challenge on this project, from finding appropriate component placement to isolating electrical noise. I’m sure electrical challenges will continue to vex us as we proceed. We’ll figure out the problems one by one as we go, but one thing is for sure, we’ll need a lot of ways to route wires and keep them in place, hence the clips.

Unlike the previous accessories, the wiring clip may be mounted in any orientation. To hold themselves in place, each clip will require additional holding force. To get this force, they are printed slightly more open than their installed configuration. Installation would then require compressing the ring and this tension in the plastic will provide friction against extrusion rail to hold it in place. And while I’m not entirely sure it will be necessary, I added a small flap to keep the wire from sliding out of the ring into the rail slot.

There will be more accessories along the lines of what’s been printed so far, but I’m eager to get back to the primary exploration of cutting material.

Collet Holder Clamps To Extrusion

While I was in Onshape CAD designing our goose neck work holding clamps, I also tackled a few other to-do items on the 3D-printable accessory list. The top of the list was building a way to keep extra collets accessible on the machine. Our CNC spindle came packaged with a 1/8″ ER11 collet, which we swapped out for a 1/4″ collet when we wanted a stouter cutter. We didn’t have a good place to keep the temporarily unused 1/8″ collet and, rolling around on the tabletop, we were constantly at risk of losing it.

I thought it was a good project to practice designing plastic’s flexibility to my advantage instead of constantly seeing it as a disadvantage. I’ve had several projects along these lines before, but my interest was renewed by Amy Qian’s demo board she brought to show off at Supercon.

There are two ways I wanted to apply this concept. First, I wanted a holding mechanism that can snap into an extrusion rail and stay there without use of tools or fasteners. Second, I wanted a way to hold the collet so that it is held securely by default (not fall out or be dropped easily) but can be removed easily on demand. Again without tools or fasteners.

Here is the first draft of a flexible clip for installation into extrusion beam, this design was too flexible and fell out of the extrusion rail easily. More iterations followed, hunting for the most secure hold possible while still making it possible to insert into the rail.

Extrusion slot clip

Separately, I started designing a flexible cover for the collet. The test piece for each mechanism evolved separately until I was happy with both designs, then they were integrated into a single piece incorporating both mechanisms.

Collet holder evolution

With the success of this holder, I took the lessons of a flexible extrusion beam mount and applied the concept to a few additional 3D printed accessories.

3D Printed Goose Neck Clamps For Work Holding

Once we have metal threads securely inserted into our MDF work surface, we could bolt on clamps to hold our work pieces. These clamps are 3D printed because we fully recognize our CNC beginner status and, while we’ll do our best to avoid crashing cutting bits into fixtures, it’s realistic to plan for the probability that crashes will occur despite our efforts. If we use commodity metal clamps and our carbide cutting tool makes contact it will break our tool. But if our carbide tool contacts a piece of 3D printed plastic it might survive our mistake. We have the luxury of this provision because we’re starting easy with scraps of MDF, which requires less forces to hold and to cut than cutting metal.

Clamp evolution

We started by copying standard step clamps. We weren’t sure if the steps could be accurately replicated with 3D printed plastic so it was worth a bit of experimentation to find out. They look very promising but we probably won’t use them, because the reason step clamps exist is to have a few set of them that can adjust to various sized work pieces. 3D printing gives us the flexibility to print project-specific fixtures that don’t have to compromise for flexibility. This advantage can make up a tiny bit of deficiency inherent in using plastic instead of metal. Hence the second iteration: a single piece clamp shaped like an L designed specifically for the thickness of our test piece of MDF.

Once that was printed and eyeballed on the work table, we moved on to the third iteration: a low profile goose neck clamp tailored for the height of our scrap MDF. Low profile design reduces chance of cutter collision, and it allows us to use shorter and stouter bolts to fasten them to the table. This is what we will use for our first real cutting experiments, alongside other 3D-printed accessories for our CNC project like a collet holder.

Threaded Insert Alignment Tool

We now have a small G-code program that we can call upon to cut holes for self-tapping threaded inserts. We’ll cut them as needed for work fixtures on our CNC work table. However, cutting the hole is only part of the process, we had to install the metal insert as well. In order for the resulting threaded hole to be vertical, the inserts have to be held perpendicular to the work surface as we install them. However, the coarse exterior thread makes it difficult to maintain the orientation, made more challenging by the fact the shallow hex socket allows the insert to rotate around the tip of a ball-end hex wrench making it even harder to hold vertical.

We originally had the hypothesis that, given the geometry of the wooden hole, our metal insert will self-align as we start turning it. This may be true for some types of wood but it didn’t work for our particular sheet of MDF. If the coarse outer self-tapping thread starts biting at a bad angle, the insert did not self adjust in our experience. It just jams partway down the hole ruining the MDF hole in the process.

To solve this problem, we designed a small 3D-printed plastic tool to help maintain vertical alignment for installation.

Insert alignment tool printed

The bottom part of this tool helps keep the insert vertical, and the top part keeps the hex wrench vertical. The bottom is mostly flat for the work table surface. I tried adding a small lip to help with hole alignment, but that turned out to be unnecessary. These metal insert can align itself in the XY plane well enough. And once these inserts are in place, we can bolt down our pieces of scrap MDF using custom gooseneck clamps.

CNC Test Program Prepares For Fixtures

My test program exposed an electrical noise issue and helped us track it down to the spindle motor. This was an unplanned but very welcome bonus result on top of its original purpose. It was my first foray into Autodesk Fusion 360 CAM module after following tutorials. I wanted a simple program with few operations, small enough for me to fully understand the G-code output from Fusion 360 post-processor for Grbl. We had scrap pieces of MDF on hand for practice cuts so it wasn’t important for the test program to do anything useful. But as I was contemplating work holding for scrap MDF, I realized my first program could be useful after all.

The work surface we installed earlier was also laminated MDF, cut from the same retired treadmill board as the test scraps. Its smooth (well, scratched up, but still relatively flat) top surface is not conducive to any kind of work holding. The original plan was to cut holes by hand with a cordless drill and fasten work pieces using bolts from above fastened by nuts from below the sheet.

Then we had a better idea – use threaded inserts. Counterpart to the heat-set inserts I’ve been using in my 3D printed plastic(*) projects like Sawppy, there are inserts available for wood.  They have a self-tapping coarse thread appropriate for wood on the outside, and a durable machine thread on the inside. Given that our XY table used mostly 1/4″-20 thread, we will continue the trend by using these inserts from McMaster-Carr.

All we needed to put these in was to drill a hole of the specified diameter, and this is a task I can have the machine do for its own work table. I first started with a single hole, walking through each line in the generated G-code to understand what’s going on. The results were fine for the insert itself, but the exterior thread damaged surrounding laminate surface during installation.

Inserts with cracked laminate

This lead to extension of the test program, adding a second cutting operation. The first one cut a hole all the way through the surface for the insert, and a second shallower cut to clear surrounding laminate to avoid damage by exterior tread. Once the metal insert was installed with help of an alignment tool, we have a clean fastening point to bolt work pieces to our machine work surface.


(*) Disclosure: As an Amazon Associate I earn from qualifying purchases.

Next Challenge For CNC: Electrical Noise

With a stouter cutter installed, we can experiment with less worry about breaking it. I started generating my own G-code programs from Autodesk Fusion 360 and testing them on the machine. (More about this test program later.) A safety practice I learned in my machining class is to test run a G-code program by intentionally setting a too-high Z offset. This way, when the machine runs through the program, it runs through all the motions but is only moving around in air. This lets us verify the range of motion is as expected. Including making sure it would not exceed either the XY limits of the machine or hit any hold down fixtures that are in the work space.

This process can be repeated any number of times, each time putting the Z a little closer to the workpiece than the last. And even if we don’t expect to actually cut material, it’s a good idea to power up the spindle just in case the cutter makes contact. While unexpected cuts in the work piece is not great, ramming a non-spinning cutter into the piece is worse.

Running in air is great for finding major problems, but minor issues aren’t always visible. It wasn’t until I cut into MDF that I found our latest problem: after the test program made its cut, its final position did not match expectations. Running the program again, we expected it to run through the same motion and not remove any new material, but it did. Checking the coordinate display on bCNC, we saw the machine believed itself to have returned to the same position after each run, counter to our physical evidence on hand. What happened?

To diagnose this issue, we tried eliminating individual variables from consideration. Running down the list of possibilities, from loose wires to loose fasteners. The key experiment was running the program without powering up the spindle, at which time all motion tracked as expected. (To protect the endmill from possible impact damage, it was removed from the collet for this test.)

This tells us the source of our unreliable motion was an electrically noisy spindle. A hypothesis is that it degraded our motor controllers’ ability to distinguish signal pulses from Grbl, but the precise mechanism is not important. Whatever it was, we need to better protect the system from spindle motor noise. And since every motor will affect nearby electronics to some degree, this is probably not just a consequence of using the lowest bidder on Amazon.

In the immediate term, what we can do for our machine is to make sure the chassis is securely grounded, reroute signal wires further away from the spindle motor subsystem, and add a capacitor across the motor wire terminals to filter some noise. This was not precision tuning, as we just clamped the grounding wire to our gantry and the capacitor was chosen for its voltage tolerance rather than a specific capacitance. Still, the two measures seemed to improve the situation enough to proceed. We know “clean up wiring” is still on our list of technical debt, but this kicks the can a little further down the road and let me return to my test program – cutting holes for work fixtures.

Stouter Cutting Tool For Exploring CNC

Our vertical mill CNC project is barely far along enough for us to run a simple G-code program, so there’s a lot we don’t yet understand about the machine’s capabilities. Pieced together from mostly salvaged parts, we don’t exactly have a reference manual we can check for the machine.

What’s clear from our first test is that it’s easy to accidentally get too aggressive with the machine. The most fragile part in the system is our 1/8″ RotoZip cutting tool. While we want to make sure to wear eye protection when running the machine, we still want to avoid breaking cutters and turning them into sharp high speed projectiles.

To reduce the odds of that happening, further machine testing will use the largest cutting tool we can. Quarter inch shank diameter is just about the widest we can accommodate with our ER11 collet, so I went looking for the shortest quarter inch square nose endmill I can find on Amazon with Prime delivery. (*) McMaster-Carr has higher quality cutters and a wider selection of endmills in general, but they would not have delivered in time for the next available machine work session so I traded off quality for speed.

This is a carbide tool with two flutes. Out of the box, all cutting surfaces looked satisfactorily sharp. Used properly, it should have no problem cutting into our scrap test pieces of MDF. And when used improperly, it should be far less likely to break than our 1/8″ diameter RotoZip cutter. It will serve as the (possibly sacrificial) learning cutter while we explore the rest of our machine, starting with an electrical noise problem.


(*) Disclosure: As an Amazon Associate I earn from qualifying purchases.

Scrap MDF Sheet As CNC Working Surface

Once its homing switch was moved to the correct position, our Z-axis is ready to go to work. However, it doesn’t have a surface to work on just yet. The XY table forming the heart of this project was originally designed for the purposes of optical inspection, which meant it has a big open space in the middle for cameras and similar optical instruments to see. Big open spaces are not conducive to CNC milling operations!

Fortunately, as part of its original design, this table does have precisely placed mounting points for other equipment. These holes were, in fact, used to bolt the X and Y modules together at right angles to each other. We’ll use these mounting points to install a work surface. For precision work, we want something rigid. Ideally something just as strong as the table elements, say maybe a half inch steel plate.

But for learning purposes, we don’t need anything so fancy. We just need a reasonably flat surface we can work with. Following the theme, we’re going to re-purpose something for the task. This time, it is the main backing board for a retired home treadmill. This piece of laminated MDF had been sitting outdoors for several years and used as a ramp for moving heavy things around. The smooth laminated surface really reduced friction! But it also meant the surfaces are scratched up, and there are signs of water damage at the non-laminated surfaces. Still, it was the biggest, flattest, and most expendable thing on hand for our machine. So it was cut up with [Emily]’s table saw then 12 holes drilled on a drill press. Counter-boring those holes allows the top working surface to remain clear. We’re not worried about the cutting tool hitting one of these fasteners — they are outside of range of motion — but it allows flexibility in workplace positioning.

For our first test, we used a scrap piece of wood left from a laser cutter project and a RotoZip cutting bit. The first programmed operation will be the same smiley face test program we used before we even had a Z-axis. Whose G-code, we have now learned, never moved Z-axis at all! There are only spindle on/off codes, likely designed for laser engraving. Which also explained the speed, which pushed the RotoZip bit too fast, bending it quite alarmingly until we turned up the spindle speed. It did all right, but until we get the machine dialed in, what we really should use is a stouter cutting tool.

CNC first programmed cut using Rotozip bit

Reposition CNC Z-Axis Homing Switch

Top of the CNC mill electrical work items list was making sure it had a functioning Emergency Stop button. Once that was completed, the next work item was the Z-axis homing switch. For a vertical mill, we want the Z-axis homing operation to take it to its highest position, furthest away from workpiece. This is reverse of many 3D printers, which home against the print bed. This is because 3D printers have the luxury of  starting from an empty print bed as a characteristic of additive manufacturing. A CNC vertical mill, representing subtractive manufacturing, could not make such an assumption since the workspace would have work fixtures and material stock.

Our initial Z-axis homing switch was appropriate for our initial orientation of the mechanism, allowing it to home to the top of its travel. But once it was flipped around, the homing switch is now sensing the bottom of its travel instead. We need to find another mounting position before we could have a good Z axis.

Z homing switch wrong end

This switch had the luxury of sitting next to the motor and conveniently sensing the approach of the carriage. Its height was sized to match the length of the motor ballscrew coupler, engaging the switch just before the carriage would run into the coupler.

This linear actuator have no convenient location to sense the other end of the range of motion. Since there was no coupler on the other side, a similar mechanism would subtract from valuable range of motion. We didn’t have a good place until we installed the spindle motor mount plate, whose top edge gave us an feature we could use to trigger the homing switch.

From that point, it was a matter of running through a few 3D prints to find the correct dimensions to trigger a homing switch while maximizing useful travel distance. Now our Z-axis homes against the top of its range of travel again, let’s give it an useful surface to work on.

CNC Physical Controls Panel V2

When I started to build a panel for physical control buttons, I had planned to use arcade console buttons. Big, bright, and durable, they were designed to take a punishment and I thought they would serve well. But before I finished the first version, I had switched to a more task specific button for the emergency stop. I proceeded with arcade buttons for the other two, but [Emily] had a better idea.

She had salvaged some control buttons from retired industrial machinery, so these would be buttons originally designed for the purpose of machinery and not controlling a video game character. They should be given a second life doing their old jobs on a new pieced-together CNC vertical mill.

Salvaged switches for hardware buttons

Using them would require designing and printing another panel. They were smaller in diameter so I thought maybe I could get away with a shim, but even though their smaller diameter required less panel front surface, their mechanism for disassembly and installation actually required more clearance under the panel. As a result I had to rearrange the buttons from forward-back to side-by-side. This is a good thing – the results more closely mimicked that seen on real industrial equipment like this Haas console. My three-button panel is a poor comparison to that full featured beast, but is a lot cheaper.

I also appreciate the black rim on these buttons, making them more difficult to press them accidentally compared to arcade buttons lacking such protection. It was also interesting to note these buttons have provision for three switches underneath, controlling three circuits at once. These, however, only have a single switch in the center slot and given these were salvaged we are unlikely to populate the remaining two slots.

I started the physical button control panel task planning to use three arcade buttons I had on hand. By the time I completed the second version of the panel, no arcade buttons were used but the panel looked better and worked closer to the way they would be on actual machinery. I call that a success, and turned my attention to the Z-axis homing switch.

CNC Physical Controls Panel V1

Our mini CNC vertical mill project now has almost all the basic mechanical components in place. We’ve done a quick drill test, but that was under manual control. There still several very important things to add before we let the machine run G-code, the top of the list is an “emergency stop” button for when things don’t go according to plan. It would also be nice to have physical buttons for “cycle start” and “feed hold”, but that is less critical. I soldered some headers earlier in preparation for this, now I need to connect them to physical buttons.

I originally planned to reuse some arcade console buttons I already had on hand, but then realized there is existing convention for emergency stop buttons: once pushed, they stayed pushed until twist to release. They also have a distinct appearance everyone (not just myself) would recognize, and these are things I want to have on my own machine. I bought the cheapest one I found on Amazon (*) and the tactile feel of this unit definitely reflected its low price. If I were to do this again I’d hunt for a more substantial-feeling (and more expensive) alternative. But in the meantime, it seems to work well enough electrically and the low budget nature matches the rest of the project.

For the “Cycle Start” and “Feed Hold” buttons, I continued with the original plan of reusing arcade buttons I had on hand. I have a nice red one for “Feed Hold” but I didn’t have a green one for “Cycle Start”. I used a yellow one in the meantime, maybe I’ll paint it green later.

Then I designed and started printing a panel for these buttons, paying special attention to the emergency stop button’s support structure. I want people to be able to slam on this button hard in a panic without breaking anything. Unfortunately, due to an uncooperative 3D printer, I couldn’t get a finished print of the panel in time for a work session.

Hardware buttons panel - partial

No matter, it was enough for me to begin the wiring work for this project. Obviously I couldn’t mount the buttons on the machine until I returned later with a completely printed panel in another session. However, even as I was wrapping up this panel for physical buttons, we were already talking about an upgrade.


(*) Disclosure: As an Amazon Associate I earn from qualifying purchases.

CNC Spindle Mounting Plate

Once our new CNC spindle passed initial inspection, it was time to get to work mounting it to our Z-axis linear actuator. Again, the piecemeal nature of this machine meant the parts would not bolt up directly so we’ll need to fabricate another adapter plate. This meant cutting another piece off of the same 1/8″ aluminum stock used to mount the Z-axis on our gantry and marking up the dimensions we’d need.

Four holes were drilled to line up with the actuator extrusion beam, and four more drilled to line up with the motor mounting block that was part of the spindle package. The original plans were to use bolts and nuts across the board, but there was a problem with clearance: the motor mounting holes were almost exactly the width of the Z-axis rollers, leaving insufficient clearance for either M6 nut or bolt head.

The obvious solution was to tap M6 threads into the aluminum, avoiding the need for nuts and associated clearance. Unfortunately we had no M6 taps on hand, but [Emily] the resourceful improviser had a trick up her sleeve: We had plenty of M6 steel bolts, and we wanted to tap aluminum. Steel is harder than aluminum, and so with some modifications with the grinder, she turned one of the M6 bolts into a functional M6 tap.

Cheap spindle mounting plate creative tapping

Bolting directly into newly tapped aluminum, our M6 bolts would still just barely scrape the Z-axis roller assembly. Switching to thicker washers gave us the spacing needed to clear the rollers, allowing the spindle to move across the entire range of motion on our Z-axis.

Cheap spindle mounting plate installed

As a quick test, we mounted an 1/8″ drill bit into the spindle and performed the ceremonial first cut of this machine. I was moving the Z-axis via manual jog controls in bCNC, we still have a few more things to take care of before running this machine under automated program control.

Examining Air Cooled ER11 CNC Spindle

Up until this point, almost everything in the home brew vertical mill CNC project has been salvaged or reused from some previous project. But we’ve come to the point where the Z-axis drive has been properly configured for a spindle motor… that we don’t have. We have smaller lighter motors that aren’t strong enough for the job, we have big beefy motors too heavy for our gantry. While we could potentially use a Dremel or a RotoZip as a stepping stone, the decision was made to buy a cheap milling/engraving spindle from Amazon (*) for the project.

The product page proclaims a maximum of 500 Watts and maximum speed of 12,000 revolutions per minute. We’ll measure power draw once we can put it to work, and we have tachometers to measure its speed range. We don’t expect it to actually hit those numbers, but they seemed reasonable. The part that we were most skeptical about was the proclaimed precision: 0.01-0.03 mm of runout. This is a very high level that we doubted was reasonable in this price range.

The first test after unpacking all components was the obvious basic test: does it spin up? Once we established that it does indeed turn, the second test was then to mount a Starrett dial test indicator (*) to measure its actual runout.

Cheap spindle on Amazon getting dial indicator

The results were… surprisingly good! When the motor is not under stress and turning freely, it actually stayed within a very tight range. This specific dial test indicator was in Imperial units, measuring a range within +/- 0.0005 inch. This is in the ballpark of +/- 0.0127 mm, so the product listing was not a complete lie.

For practical purposes, though, we’ll never have that level of accuracy. There is a lot of flex in the system — from the motor output shaft to ER11 collet — to take us out of that range. A single finger press was enough to bend things beyond the technically-not-wrong runout, so we shouldn’t expect very high precision from this spindle after we mount it on our Z-axis and run under real cutting forces.


(*) Disclosure: As an Amazon Associate I earn from qualifying purchases.

Turn That Z-Axis Mechanism Around

Fourth iteration of Z-Axis was mounted expediently for the pen plotter test, where we found the ball screw was bent but everything else looked good enough to proceed. Following that success, I will make a better mount for this linear actuator to solve some problems with the quick test configuration we had used.

Zv4 mounted by vertical extrusion with old bracket

Problem #1: the test mount was a 3D printed plastic bracket. The best thing that can be said about the rigidity of the mount was that it is better than tape.

Problem #2: old mount leaves long Z-axis mechanism in place, moving the small carriage. Fine for plotters, but for a small vertical CNC mill we want the Z-axis mechanism to move out of the way of the work piece. This means flipping the mechanism around, mounting it by the small carriage so motor moves the entire assembly out of the way.

Zv4 aluminum mounting board in progress

A scrap piece of aluminum was drafted for this purpose. Holes were drilled by hand for fasteners. The accuracy leaves something to be desired, but the hope is that the machine will eventually get to a point where it can make a superior replacement for itself.

Zv4 aluminum mounting board almost ready

Because the carriage aluminum extrusion beam does not have the same spacing as the gantry aluminum extrusion beam, this plate allows us to bolt them together. Here it is almost ready for installation.

Zv4 mounted by aluminum sheet

Installation complete. Now when the tool moves up, the rest of the Z-axis moves up and out of the way with it. It is now ready for a CNC spindle.