Walkthrough · Hands-on exercise

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.

~30 min7 stepsCompanion to the deck
scroll
§0the setup

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.

Total allowable error at the drill tip: dtot = 5 µm (3D RSS at the workpiece surface).

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.

The contract
Hole within ±5 µm of nominal
§1functional requirements

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.

“What's the one number this machine must hit — and where does it come from?”
Requirements ledger
Position accuracy at drill tip±5 µm
Depth accuracy±10 µm
Hole-to-hole repeatability±2 µm
Throughput180 holes/min
Ambient temp range20 ± 1 °C
Footprint1.2 × 0.8 m
§2structural loop

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.

Dashed terracotta = the structural loop. Every rotation, deflection, or expansion on this path lands at the drill tip.
The chain — five coordinate systems
§3apportion the budget

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.

Two summing rules. Random independent sources combine as RSS = √Σx². Systematic correlated sources combine as linear sum. Most error budgets are a hybrid — RSS within a category, linear across categories.
Bearings28%·1.4 µm
Structure28%·1.4 µm
Actuator20%·1.0 µm
Sensor14%·0.7 µm
Cables10%·0.5 µm
Three apportionment methods
Linear-sum
conservative
Add every slice arithmetically. Treats every error as worst-case correlated. Use when you don't trust independence.
RSS
default
Square-root-of-sum-of-squares. Assumes errors are independent. Right answer for most random geometric errors.
Averaged
hybrid
Geometric mean of linear and RSS. Useful when half your sources are correlated and half are random.
§4identify error sources

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.

Three families · per CS
G
Geometric
Straightness, squareness, parallelism. Manufacturing & assembly tolerances. Constant-ish.
T
Thermal
Heat from spindle, motors, ambient drift. δ = α · ΔT · L. Slow time scale.
L
Load-induced
Cutting force, gravity, drag chain. Instantaneous, deflection follows compliance.
Geometric · Abbe

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.

Thermal · expansion

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.

Load · compliance

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.

§5build & predict

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.

The math, in one line: TPOI = T0,1 · T1,2 · … · Tn−1,n · TPOI offset. Inject δT at each joint, expand to first order, and the perturbation at the POI is the sum of each error projected through the remaining chain.
Each box is a CS. Errors at each level get projected forward to the tool tip via the remaining chain.
Predicted vs. apportioned · per axis
Axis / source
Budget
Predicted
Status
X (geometric)
1.4 µm
1.1 µm
under
Y (geometric)
1.4 µm
1.3 µm
at edge
Z (thermal + load)
1.4 µm
2.6 µm
over
Abbe (rotational arms)
0.5 µm
0.7 µm
over
§6validate

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×).

v0 design — first pass
5.7 µm
vs. budget 5.0 µm · over
v1 — after stiffening
3.9 µm
vs. budget 5.0 µm · under
§7iterate

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.

“Loops aren't failure. Loops without learning are.”
Try it in the tool

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.