The Single Joint
One motor, one encoder, one loop, and no shortcuts. Everything the rest of the arm assumes gets established here: that the encoder constant is measured rather than quoted, that the loop rate is proven on an instrument rather than asserted, and that a joint refuses a command it should not accept.
What this teaches me
- Done when
- One motor holding a commanded angle against a disturbance.
- Progress
- 0 of 13 sessions0%
Gate tag: v0.0-stage0-exit
Sessions 1 to 3
Before the motor turns
Bench, toolchain, motor forensics and the power tree. Nothing turns yet, and everything downstream depends on it.
- Not built yet
Bench, toolchain, and the repository
Explain what each link in the toolchain does and say which one is broken when the chain is.
- Not built yet
Motor forensics, and bolting it down
Derive counts per output revolution from PPR, decoding factor and gear ratio, and distinguish stall, rated and static torque.
- Not built yet
Power: draw the topology before you wire it
Draw a power tree that separates a motor rail from a logic rail at a single ground point, and explain why a brownout reset is protection working.
Sessions 4 to 7
Signal, motion, time
Decode the encoder, drive the motor both ways, prove the loop rate on an instrument, and fix the units at the boundary.
- Not built yet
The encoder: interrupts and x4 decoding
Derive the sixteen-entry quadrature table, prove the decoder loses no counts, and explain why x4 decoding is free resolution.
- Not built yet
Open loop: making it turn, in both directions
Explain what an H-bridge does with two direction pins and one PWM pin, and predict steady-state error from a measured deadband.
- Not built yet
The fixed-rate loop, and proving your rate
Explain why an absolute schedule does not drift, and prove a loop rate on an instrument rather than asserting it.
- Not built yet
Units: convert once, at the boundary
State how many encoder counts make one degree on this motor, and what one count of quantisation costs in the derivative term.
Sessions 8 to 11
Closing the loop
Telemetry that fits its budget, then P, then the four step-response numbers, then D and I with kick and windup handled.
- Not built yet
Telemetry that fits: the bandwidth problem
Budget a serial link in bytes per second against a loop rate, and derive a baud rate's error from its divisor.
- Not built yet
P only: steady-state error and the stability boundary
Predict a P-only controller's steady-state error before running it, and tell controller oscillation from gearbox backlash.
- Not built yet
Step-response metrics: the four numbers
Read rise time, overshoot, settling time and steady-state error off any step response, and compute overshoot against the settled value.
- Not built yet
D, then I: derivative on measurement and anti-windup
Explain derivative kick and why differentiating the measurement removes it, and name two anti-windup mechanisms and what each catches.
Sessions 12 to 13
Making it an engineering artifact
A joint that refuses illegal commands and cannot hurt itself, refactored into the object Stage 1 flashes twice.
- Not built yet
The safety envelope, and getting off analogWrite()
Explain what a joint should do when its host goes silent, and size a stall-detection window against a driver's pulse rating.
- Not built yet
The refactor, and the exit gate
Explain why a class-based joint makes a four-joint arm an array rather than a rewrite, and demonstrate a refactor changed no behaviour.