2.77 – Week 7

It’s been a long time since my last update, and I’ve got a lot to report – but a lot left to do, so this is going to be a relatively brief update! Over the past few weeks, I’ve modified & updated my error budgeting spreadsheet to accurately model my machine; used it + my stiffness tester to characterize the linear stiffness of my mill’s bearings and the compliance of the major cantilevered frame components; (mostly) completed detailed design of the X and Y axes; identified & purchased the major components for the linear motion systems, including ballscrews, support bearings, motors and linear encoders; and selected a control toolchain.


PUPS 7/Lab 7

I’ve completed a number of different tasks as part of PUPS 7, some of which are outside the specifics of the assignment. I’m going to go through them briefly in turn:

  • Error Budget Problems & Updates: After the end of Week 6, I realized that I had some major issues with my error budget. In particular, I hadn’t correctly paired up “bearings” and “frame” components – in some cases, I’d assumed that the bearings were at the distal end of the matched frame, while in others I assumed they were at the proximal end. As I needed the error budget not just for designing my machine but also for calculating loads at each axis for stiffness testing, I needed to spend some time reconfiguring my error budget. I added an additional coordinate system; recalculated compliance matrices and bearing stiffnesses for all of the axes (usually not from scratch, thankfully); and cleaned up and organized the spreadsheet.
  • Linear Motion System Design: My major task this week was to complete detailed design for the linear motion system in my most critical module (MCM), which is the X-axis of my mill. I’d earlier established that I wanted to use ballscrews for my system, thanks to their (relatively) low cost when bought as surplus; ability to offer zero backlash & high positioning accuracy, which is better for the controllers I can afford (which don’t offer lead compensation tables); and higher efficiency. However, I still needed to find a ballscrew which would fit within the existing geometry of my mill without too much modification; would meet the performance specs I wanted within my price range; and most importantly, that I could actually buy (I’m relying on surplus stores & eBay for these components – generally speaking, not good machine design practice!)

    I first built a design spreadsheet which would let me evaluate the performance of different ballscrew/nut sets that I could find. I then started trawling eBay, Automation Overstock, and various other suppliers to see what I could find. The biggest problem I faced was the issue of ballscrew length + clearance under the table of my mill. Most ballscrews available through surplus are sold in metric sizes, with lengths coming in even hundred-millimeter steps (since they’re rarely custom parts). They are also almost never sold without flanged ball-nuts – I think I saw two threaded ball-nuts during the entire time I was searching. Unfortunately, my mill has a relatively long table, with relatively little space underneath it. The flanged ball-nut for a 16mm ballscrew – comparable in diameter to the existing 5/8″ lead screw – simply wouldn’t fit at all under the table of my mill: I’d have to machine out both the table and the Y-axis saddle. However, a smaller-diameter screw with a nut that fit more comfortably under the table wouldn’t be long enough, and I would somehow need to place bearings under the table to support it.

    Ultimately, I decided to go with the smaller, 10mm diameter ballscrew. While the screw is less stiff than a 15mm screw, the difference in total system deflection (axial deflection, torsional deflection, system resolution and screw lead error) over full length is less than .002″ at full load. The smaller diameter screw can be supported in bearing mounts that fit underneath the machine’s table, using (relatively) common bearing sizes). Finally, while the ball-nut still will require that the Y-axis saddle be slightly machined, it’s a significantly smaller modification.

    (Note: I haven’t mentioned it specifically in my PUPS notes, but at least for now, I’m going to be keeping the existing 5/8″ lead screw system that’s used in the Z axis. The screw is in quite good shape, with minimal backlash; is rarely used dynamically in the machining operations I do; and I have a motor that can move it.)

  • Component Selection: With my desired components in mind, I went shopping! For the X and Y axes, I found two 10 mm x 5 mm lead NSK ballscrews for sale online. These screws are Grade C3, which is quite precise (they’ll definitely be the most precise part of this machine). They are long enough to not impact the range of motion of the X axis, although they will require being supported underneath the mill table (see CAD below) and will need extension shafts added to attach the motor & handwheel. The Y-axis screw will also require some machining to cut it to length, but I think I can probably figure that out!

    I also purchased 71900 angular contact bearings to support the two screws (I’m going to have a duplexed DF arrangement at one end, with a single bearing for radial support at the other), and absolute linear scales for the X, Y and Z axes to measure axis position. While I won’t be able to use these scales in a closed-loop control system with the controller I’ve selected, they will be useful for manual machining operations, and I’m hopeful that I’ll be able to develop a simple system to allow me to check for missed stepper counts, by comparing the axis position reported by the controller against the axis position reported by the sensors.

  • Controller Selection: I also selected a controller/control system architecture for my machine. After reviewing a number of different small-machine controllers & control software available on the market, including GRBL, TinyG2, SmoothieBoard, LinuxCNC/EMC2, and Mach3, I decided to purchase a Raspberry Pi CNC Board controller from Protoneer. This controller combines a Raspberry Pi with an Arduino running GRBL & a set of stepper drivers to provide an all-in-one control package. Since the system is GRBL-based, it’s lacking in some features – such as dual endstops or 4th/5th axes like TinyG2, or the advanced leadscrew mapping & closed-loop control features supported by LinuxCNC and Mach3. However, these features are lower priority for me, and GRBL’s support for the basics that I need – endstops, ability to add motor and probe control, and support for external motor drivers – coupled with its low price make this controller the right choice for this project. I also found a neat piece of control software to run on my RPi – bCNC, an open-source, Python-based G-Code sender & editor. bCNC has support for a number of nice features including limited conversational programming, and is extensible – I’m excited to get it running on my mill.
  • Stiffness Testing: Finally, I used the refined error budget spreadsheet to determine the actual reaction forces & moments at each coordinate system of my mill (basically, each bearing center-of-stiffness). With this information & my handy stiffness tester, I was able to run a series of tests in which I loaded & unloaded the mill in different orientations, and measured the relative deflection of different components. For this first round of stiffness testing, I measured the transverse stiffness of the X, Y and Z bearings; the normal stiffness of the Z bearings; and the compliance of the knee and ram elements.

    Comparing the measured stiffness values for these axes to my estimated stiffnesses, I was pleased to find good agreement in general. Bearing transverse stiffnesses were order-of-magnitude accurate, with the estimate underestimating the measured stiffness by nearly a factor of 3. However, the measured compliance of the ram and particularly the knee significantly exceeded estimations. I’m going to need to modify these estimates, and also address some problems with the spreadsheet that they reveal (see below).

    Finally, I also worked with Timken Bearings to calculate an estimate of the stiffness of my mill’s spindle bearings under different preloads. They were extremely helpful, giving me not just the numbers I requested, but also comparing the current bearings to other options & walking me through appropriate preload generation for these bearings. There was a slight error in their calculations that they’re currently fixing for me, but as soon as I have the revised numbers, I’ll post the data they gave me here.

Here’s some images from my work:


I still have a lot to do before my X-axis system is ready to be assembled, though. Highest on my priority list are the following:

  • Design flexure ball-nut mount: I would really like to design a flexure-based mount for the ball-nut. Aaron has given me some good resources for flexure design, and I’ve sketched out a few concepts, but I need to actually sit down and focus on this design task to see if I can come up with something that a) fits within my space constraints, and b) can be manufactured with the tools I have.
  • Complete design of motor mounts & belt tensioner: I’m currently working on finalizing the details of the motor mounts & the belt tensioner system (for my belt-drive transmission). I’m not too concerned about this design, and I’m optimistic that I can reuse the same part designs between my X, Y and Z axes to cut down on future design work (like I have with the ballscrew bearing mounts).
  • Guarding, cable routing & safety: Guarding, cable routing & operator safety are always important concerns with a machine tool. For the X-axis, my primary safety concerns are 1) making sure that the motor & transmission are shielded from the user; 2) making sure that the machine is appropriately outfitted with endstops & that its crash behavior is well-understood; and 3) making sure that wires are correctly routed & protected.
  • Identify inaccuracies in stiffness modeling/error budget spreadsheet: I’ve identified a few more remaining problems with the error budget spreadsheet, which are particularly impacting my estimate of the machine’s stiffness.
    • First, the default setup of the compliance matrices doesn’t necessarily assign the compliance of the member in different directions appropriately. For example, in my mill’s ram, the calculation for the dx/Fx compliance is incorrect – the actual compliance of this member under forces in the X direction is better represented by the dz/Fz compliance. I need to verify that these transformations aren’t taken care of elsewhere, but if they’re not, I’ll need to rework these matrices.
    • Second, I also have found a weird quirk of the spreadsheet where it freaks out if bearings are located on the axis of a structural member (the random error goes crazy). I’m going to figure out what’s at the root of this, and will post whatever workaround I come up with.
  • Measure torsional stiffness: Finally, time-permitting, I’d like to get my hands on another dial test indicator so I can measure the torsional deflection of my bearings & calculate torsional stiffness. This may have to wait, though – there’s a lot of other work that still needs to be done!

Finally, here’s my current spreadsheets & notes:

Design Workbook

Error Budget

PUPS 7 Notes & Reviewer Comments



I recently got my hands on an Epi-Pen tester unit – a dummy Epi-Pen that helps users practice using the pen outside of an emergency situation. The tester “pops out” when pressed firmly into the user’s leg, just like a real Epi-Pen, and accurately simulates the force required to initiate the injection. It can also be re-set and used again for further practice.

Despite this fairly sophisticated behavior, when you crack one open (which, for what it’s worth, does not require a saw – there are small release pins hidden under the labels on the sides of the device. First rule of disassembly – always remove the labels!), it turns out that the tester is an an incredibly simple device. A light coil spring provides the device spring preload, while a molded-in catch and reset mechanism allows the tip to spring out and then be replaced. A pair of flexures on the tip locks it in the open position, but can be squeezed to allow the device to be reset.

Leave a Reply

Your email address will not be published. Required fields are marked *