Designing a precision drilling machine.
Walk through the deterministic-design process end-to-end. We start from a customer spec — “hit the hole within ±5 µm” — and follow the error all the way down to the bearings, the column, the thermal gradient, and back up to the drill tip.
What we're building, and what it must do.
Imagine you've been handed a spec sheet for a precision PCB drilling machine. The PCB houses 0.15 mm vias for a high-frequency RF board, and the customer needs every drilled hole to land within a ±5 µm radius of its commanded position. That's the contract. Everything you do from here on is keeping that promise.
The machine is a 3-axis cartesian: a Y-table moves the PCB front-to-back, a column carries an X-axis carriage, and a Z-spindle drops the drill bit into the work. Five coordinate systems, one closed loop.
What is the one number this machine must hit?
Before any CAD, before any FEA, before any vendor catalog — find the one number. Every requirement the machine has eventually rolls up into a single positional spec at a single point of interest. For a drill, the POI is the bit tip, and the spec is a 3D accuracy bound.
From there, the rest of the requirements either feed into the spec (throughput, depth accuracy, hole roundness) or sit as constraints (footprint, power budget, ambient temperature range). We list them — but only one number gets the budget.
Find the closed loop of stiffness.
Every error we care about lives somewhere on the path between the drill tip and the workpiece. That path is the structural loop: start at the bit, walk back through the spindle, the X-carriage, the column, the base, the Y-table, the chuck, and back up through the workpiece to the bit. If a deflection happens anywhere on that loop, you see it at the hole.
Mapping the loop tells you which components own which parts of the budget. A bearing in the X-axis is in the loop. The cooling fan on the side panel is not.
Split dtot top-down across the chain.
Apportionment is the conversation that has to happen before anyone designs anything. You take the 5 µm at the tip and split it across the axes (X / Y / Z) and across the components inside each axis (bearings, structure, actuator/encoder, sensor, cables). Each slice gets a number.
The slices aren't equal. Bearings dominate position error, so they get the largest share. Cables wiggle a few microns under stiff drag chains, so they get a small share. The weighting comes from physics and prior experience, not consensus.
What can go wrong at each component?
For every coordinate system in the chain, you enumerate the physical things that move it away from its commanded pose. There are three families that cover almost everything in a precision machine: geometric, thermal, and load-induced.
Each family has its own physics, its own measurement technique, and its own way of being mitigated. You cannot just sum them — they live on different axes, sometimes literally.
A small angle becomes a big number at the tip.
A 5 µrad pitch error on the X-carriage, with a 200 mm moment arm to the drill tip, lands as 1 µm of translation at the work. The arm amplifies the angle.
The column grows when the spindle heats up.
Steel column, 600 mm long, α = 11 µm/m·K. A 1 °C rise gives 6.6 µm of axial growth — the drill drops by that much.
Cutting force pushes the column over.
A 20 N lateral cut at the tip, 600 mm above a cantilevered column with EI = 800 N·m², deflects the tip by 2.3 µm.
Roll the errors up via the HTM chain.
Once every CS has its error sources written down, you propagate them. Each CS is described by a 4×4 homogeneous transformation matrix — its position and orientation relative to its parent. Errors are small perturbations to that matrix.
Multiply the chain from base to tool tip with errors injected, and you get a 6-DOF perturbation at the POI: three translations and three rotations. Square-root-sum the random ones, signed-sum the systematic ones, and you have a predicted total displacement at the drill tip.
Predicted vs. budget. Green, yellow, red.
The traffic-light check is the whole point of doing this. You compare the predicted total at the POI to the apportioned target and answer one question: are we under budget, at it, or over it?
Green means you have margin. Don't spend it — protect it for the integration surprises. Yellow means you're at the edge; your design choices have no margin and any tolerance stack-up will tip you over. Red means re-apportion or stiffen.
In our drilling-machine case, the early prediction was 5.7 µm against a 5 µm budget. Red. The structure was the biggest contributor — the column flexed under cutting load far more than the budget allowed. Two design changes followed: a wider column section (compliance halved) and an active dampener on the spindle housing (load-induced rotation reduced by 3×).
The loop closes. Then it opens again.
Apportionment, build, validate — and back. The point of doing this work top-down is so each loop kills a different question. You don't go to detailed design until the apportionment loop is closed. You don't go to build until the prediction loop is closed.
When you stop iterating: when the predicted total has comfortable margin to the budget AND the contributors are balanced (no single component owns more than ~40% of the predicted error). Imbalanced budgets are fragile.
Now do it for your machine.
errorbudget.pivectorlabs.com gives you the apportionment surface and the detailed-budget surface in one app. Same workflow as this exercise — your project lives in the URL, no signup.