The escapement of a mechanical watch, drawn in plan the way a horology text draws it: a club-tooth escape wheel on the left, the pallet fork in the middle, and the balance’s double roller on the right with the balance hoop swinging behind it.
Its formal name is the detached lever escapement, and that is the whole claim.
The number
A balance wheel keeps time the way any pendulum does — by being left alone. Anything still touching it is stealing energy from it and changing its rate. So the escapement’s job is not to drive the balance. It is to touch the balance as briefly and as symmetrically as it can get away with, and then get out of the way.
It gets away with very little. The impulse jewel — one pin standing up from the roller table — is inside the fork’s slot only while the balance is within half the lift angle of its rest position. A wristwatch lift angle is 52°, and the balance’s round trip is twice its amplitude, about 550°. So the balance is connected to the rest of the watch for 9.5% of the arc it travels.
And for far less of the time, because the lift sits exactly where the balance is moving fastest. A harmonic oscillator spends its time at the ends of the swing, not the middle, so the fraction of a beat inside ±lift/2 is
(2/π) · asin( lift / 2A )
which at 52° and 275° is 6.0%. At 28,800 beats an hour a beat is 125 ms, so the balance is attached to the gear train for 7.5 ms and is a free oscillator for the other 117.5.
The sprite’s loops cannot show you that, and the demo’s second panel exists
because of it. beat is sampled on balance angle, not on time — sampled on
time, nine of its ten frames would be a fork sitting dead still against a pin,
because that is what the escapement does. The demo draws one beat on the real
clock instead: a 125 ms bar with a 7.5 ms sliver in it. That sliver is the
entire acquaintance between a watch’s timekeeper and its power source.
What it costs to be detached
For all of the other 94% a wound mainspring is pushing on a tooth that must not move. What holds it is draw: the pallet’s locking face is cut at an angle — 12° here — to the arc it would sweep about the pallet pivot, so the tooth’s push has a component that pulls the fork harder onto its banking pin.
The bill is the piece’s second half, and the first line of it is the one nobody expects. Zero draw does not make unlocking free. Friction does not go away when the draw does:
what holds the lock ∝ sin δ
what unlocking costs ∝ sin δ + μ cos δ
At δ = 12° those are 0.208 and 0.355. At δ = 0 they are 0.000 and 0.150 —
you have given up the entire holding force and kept most of a third of the bill.
The demo’s third panel is those two curves against every angle a watchmaker
could cut, and the whole argument is at the left-hand edge where one of them is
on the floor and the other is not. The nodraw loop is what that looks like in
the metal: nothing holds the fork against its banking, it drifts in until the
dart finds the safety roller, and the safety roller was never meant to carry a
mainspring.
Draw is then paid for twice more. The balance has to shove the fork off the lock itself, at the centre of the arc where it is doing its most useful timing. And sliding a tooth back along an inclined face runs the escape wheel — and the whole train behind it — backwards by 0.10° before it can run forwards. That recoil is a tenth of a pixel on this drawing and it is in the readout anyway, because it is real and it is the direct price of the angle.
The safety, and the one inequality
The fork must not flip during the 94%, so there is a second line of defence: a dart on the fork rides a smaller roller carrying one notch — the passing hollow — cut exactly where the impulse jewel is. The fork is physically unable to leave its banking except in the window where it is supposed to.
The requirement is a single inequality: the dart has to touch the roller
before the pallet has lost its lock. Here that is 0.44° of fork against 0.87°,
a margin of 0.43°, and validateGeometry() fails the build if a layout constant
ever inverts it. It is checked rather than asserted because it is the thing that
is actually true or false about an escapement, and it is easy to break by moving
something that looks unrelated.
Where it ends
The upper bound on all of this is the balance’s own amplitude. Swing far enough
and the impulse jewel comes all the way round and strikes the outside of a
fork horn, throwing the fork off its banking with no tooth released at all. That
is overbanking, or knocking the banking, and the knock loop is it.
The angle is not a constant and is not quoted here. knockAmplitude() walks the
jewel round until it touches the horn’s flank and reports where — which is also
exactly what the watch does — and on this geometry it lands at 332°. A real
movement overbanks somewhere around 330°, which is a better agreement than this
drawing has any right to, and is the main reason to believe the rest of it.
The relations are the machine’s; two of the constants are this drawing’s
The escape wheel has fifteen club teeth and the pallets straddle two and a
half tooth spaces. The half is the point: an integer span would land every
escape on the same half of the wheel, and the extra half space is what makes
alternate escapes fall half a space apart. Hence 2n beats per revolution, and a
wheel that advances 360/2n = 12° per beat. validateGeometry() refuses a span
that is not a half-integer.
Of that 12°, 1.2° is drop — thrown away on purpose between a tooth leaving one pallet and the next landing on the other, because a drop of zero is two pieces of steel arriving in the same place. 10% of every beat’s rotation, spent on not jamming.
The honest part: the impulse roller here is 0.95 mm where a real one is
nearer 0.45, roughly twice oversize, because at a true ratio the jewel would be
two pixels and the slot would be four. The fork’s travel is widened to match, so
the lift angle still comes out at the canonical 52° — the layout is a legal
escapement throughout, just one with an unusually large roller and a
correspondingly broad fork: 19.7° of travel against a real ~10.5°. Everything
else — the pallet span, the pivot distance, the drop, the draw, the lock, the
guard clearance, the overbanking angle — is derived, not drawn by eye.
FORK.pivot is not a number in the file; it is ESC.r / cos(span/2), because
that is the only place a symmetric lever’s pivot can go.
The drawing is a plan, not a section, and it cheats one thing to stay readable: the balance runs under the escapement here where in the movement it is the topmost part, on its own cock. A 7 mm hoop drawn across the half-millimetre this piece is about wins every time, and it should not.
The loops
- beat — one beat at 28,800 bph, sampled on angle. The balance sweeps, the fork flips as it crosses centre, one tooth escapes, the wheel steps half a tooth space.
- unlock — the 52°, slowed right down: lock, draw coming off, impulse, drop. The 6%.
- nodraw — the same window with the locking faces cut radial.
- knock — amplitude past 332°: the jewel comes round the back and hits the outside of the horn.
Reuse
export/escapement-<loop>-<n>.png— 1× frames (238×120, transparent background). Render at integer scales with nearest-neighbour filtering.export/escapement-sheet.png— every frame in one strip, in loop order.export/escapement@4x.png— prescaled hero, jewel in the slot.
Source
No .aseprite — the canonical source is source/detached.mjs, which is both
the kinematics and the pixel drawing. Nothing is keyframed: every frame is
renderFrame({ thetaB, beat, dir, lift, draw, amp }) evaluated at a balance
angle, and the fork’s position is forkAngle(thetaB), which is the jewel’s own
bearing from the pallet pivot clamped to the bankings — so the fork is on its
banking for 94% of the arc because the geometry puts it there, not because the
drawing says so. Regenerate everything with:
node source/render.mjs # export/, media/ loops, thumb, demo copy
node scripts/screenshot-demo.mjs # media/ demo shots
(needs site/node_modules installed — the scripts resolve Chromium through
site/scripts/lib/chromium.mjs.)