← AXA-006

Circuit review & bench-test guide

AXA-006 — TMC2209 stepper driver PMOD module

Design-stage — board not yet fabricated

Document purpose#

This document explains the axa-006-stepper PMOD module at component level and turns the design evidence into a practical manual-review and bench-test plan. It is based on the generated schematic (generate_design.py), the module README, the actuator-line rules in ../README.md, and the TMC2209 datasheet rev 1.09.

This is an unfabricated prototype design. Status at time of writing: schematic generated, ERC clean (0/0), netlist reviewed, PCB layout not started, no board built, no first-article bench evidence of any kind. Every number below is a design target derived from the schematic and the datasheet, not a measurement. Several MPNs are still marked TBD in the design source (bulk capacitors, sense resistors, screw terminals). Nothing in this document proves that an assembled board is safe or functional.

Unlike the USB-C PD trigger guide this document has no QA ledger to cite; the honest count is 0 PASS, 0 FAIL, everything OPEN until a board exists.

1. What the board does#

The board is a soldered (deliberately not socketed) Trinamic/ADI TMC2209 two-phase stepper motor driver on the AruviX PMOD actuator-module outline. The FPGA host drives STEP/DIR for motion, ENN for enable, and the single-wire PDN_UART interface for register configuration (run/hold current, microstep resolution, stealthChop/spreadCycle, StallGuard4). Motor power (VS, 4.75–29 V) enters only on the J2 screw terminal; the PMOD carries 3.3 V logic exclusively, per the actuator-line rule. Grounds join on the module.

Defaults are standalone-legal: MS1/MS2 strapped to GND (UART address 0, 1/8 microstep in standalone), SPREAD to GND (stealthChop), CLK to GND (internal 12 MHz oscillator), STDBY to GND (always awake), ENN pulled up 10 k so the driver is disabled until the host actively drives ENN low. VREF is strapped to 2.5 V, which selects the full analog current scale of about 1.77 A rms with the fitted 0.11 Ω sense resistors — deliberately high, so that scaling the current down over UART (IRUN) is part of the curriculum and mandatory before running small motors.

Functional block diagram#

PMOD host (3.3 V logic only)                        Motor supply 4.75-29 V
J1 ──────────────────────────┐                      J2 screw terminal (VMOT)
  1 STEP ────────────────────┤                        │
  2 DIR ─────────────────────┤                        ├── C1,C2 2x22 uF bulk
  3 ENN ──[R1 10k pull-up]───┤                        ├── C3 100 nF
  4 DIAG ◄──[R2 100R]────────┤                        │
  7 UART_TX ──[R4 1k]──┐     │                        v
  9 UART_RX ◄─[R5 100R]┼─────┤ PDN_UART        ┌─────────────┐
  8 INDEX ◄──[R3 100R]─┘     │                 │  U1 TMC2209 │◄─ C4/C5 charge pump
  6/12 3V3 ──[C8]── VCC_IO ──┘                 │   VQFN-28   │── C6 5VOUT 4.7 uF
                                               └──┬───────┬──┘── R8/R9/C7 VREF=2.5 V
        JP1 MS1=GND  JP2 MS2=GND                  │       │
        (UART addr 0, 1/8 ustep)             OA1/OA2   OB1/OB2
                                                  │       │
                                     BRA ─[R6 0.11R]─ GND │
                                     BRB ─[R7 0.11R]─ GND │
                                                  v       v
                                          J3 MOTOR A   J4 MOTOR B

2. Safety and scope boundaries — actuators move#

This module differs from every power-only board in the family in one fundamental way: its output is a machine that moves and holds torque. The following rules are not generic boilerplate; each maps to a real failure mode.

3. Power and control sequence#

  1. PMOD 3.3 V arrives on J1 pins 6/12. C8 decouples VCC_IO; R1 pulls ENN to 3.3 V so the power stage is disabled by default.
  2. VS arrives on J2. C1/C2/C3 hold up the rail; the internal 5 V regulator starts and charges C6 on 5VOUT (datasheet: 4.75 V minimum VS for the -LA part; internal UVLO releases at 3.5–4.6 V rising).
  3. The charge pump (C5 flying, C4 reservoir to VS) generates the high-side gate supply; uv_cp in DRV_STATUS reports charge-pump undervoltage.
  4. R8/R9 divide 5VOUT to 2.5 V on VREF (filtered by C7), selecting 100 % analog current scale. With MS1/MS2 = GND the standalone microstep resolution is 1/8 and the UART node address is 0.
  5. The host configures the driver over PDN_UART (R4/R5 network): reduce IRUN/IHOLD first, then chopper/microstep settings as desired.
  6. The host drives ENN low. The driver energizes the phases at IHOLD; the motor now holds position and draws current continuously.
  7. STEP edges advance the internal sine table; DIR sets sign; INDEX pulses once per electrical rotation of the table; DIAG goes high on stall (StallGuard4) or driver error (cleared by ENN = high).

4. Interfaces and straps#

Ref.Pins/signalsIntended use
J1PMOD 12-pin: 1 STEP, 2 DIR, 3 ENN, 4 DIAG, 5 GND, 6 3V3, 7 UART_TX, 8 INDEX, 9 UART_RX, 10 NC, 11 GND, 12 3V3Host logic; 3.3 V only, never motor power
J21 VMOT (4.75–29 V), 2 GNDMotor supply screw terminal; grounds join here
J31 OA1, 2 OA2Motor phase A
J41 OB1, 2 OB2Motor phase B
JP1MS1 to GND, bridgedUART address bit 0 / standalone microstep strap; cut + bodge to 3V3 to change
JP2MS2 to GND, bridgedUART address bit 1; as JP1

Per the TMC2209 datasheet MS2:MS1 straps select — GND:GND = 1/8 microstep, address 0; GND:VCC_IO = 1/32, address 1; VCC_IO:GND = 1/64, address 2; VCC_IO:VCC_IO = 1/16, address 3. The default build is address 0, 1/8.

There are no dedicated test points in the schematic yet (layout not started). The natural probe nodes are the J1 pins, J2/J3/J4 terminals, the VREF divider midpoint (R8/R9 junction), 5VOUT at C6, and the sense-resistor tops (R6/R7). Adding named test points for VREF, 5VOUT, PDN_UART, and both sense nodes is a layout-stage recommendation from this review.

5. Component-by-component review#

5.1 Driver and power/motor connections#

Ref.Part / datasheet summaryFunction and why neededIf absent/openIf shorted, wrong, or misassembled
U1ADI/Trinamic TMC2209-LA-T, VQFN-28, 4.75–29 V VS, 2.8 A peak / 1.4 A rms-per-coil design guideline, stealthChop2, StallGuard4, single-wire UARTThe entire driver: bridges, chopper, current regulation, diagnostics, UART slaveNo moduleWrong orientation destroys it at first VS; poor EP (pad 29) soldering defeats both grounding and heat removal; solder bridges on 0.5 mm pitch short adjacent bridge outputs
J1PMOD 12-pin plugHost logic interfaceNo controlReversed/offset insertion swaps 3V3 and signals — inspect before every mating; motor current must never appear here
J2Phoenix MKDS 1,5/2-5,08 class terminal (MPN TBD)VS entry; joins motor and logic grounds on-moduleNo motor powerReversed VS/GND applies -VS to the bridge: no reverse protection exists on this module, likely fatal to U1
J32-pin terminal (MPN TBD)Phase A (OA1/OA2)Motor phase open: erratic torque, driver open-load flagPhase-to-phase or phase-to-GND wiring shorts trigger driver short protection; do not rely on it repeatedly
J42-pin terminal (MPN TBD)Phase B (OB1/OB2)As J3As J3

Swapping the two wires within one phase only reverses direction; swapping one wire between phases (e.g., OA2 and OB1) produces a motor that buzzes and does not rotate. Both are harmless to the driver if done unpowered.

5.2 Current sense and VREF network#

Ref.Value / partPurposeIf omitted or wrong
R60.11 Ω 1 % 1206 (Bourns CRL1206-FW-R110ELF, MPN TBD)Phase A sense: BRA to GND; sets full-scale current together with VREFOpen: phase A current regulation is lost — the comparator never sees current and the chopper drives maximum duty; do not power with a motor if either sense resistor is suspect. Wrong (higher) value lowers full-scale current; lower value raises it toward the 2.8 A peak limit
R70.11 Ω 1 % 1206Phase B senseAs R6
R810 k (Yageo RC0603FR-0710KL)VREF divider top, 5VOUT to VREFOpen: VREF floats to the internal ~1.8 V open-circuit level (datasheet V_VREFO), silently reducing full scale to ~72 % — a subtle fault worth a dedicated check
R910 kVREF divider bottomOpen: VREF rises toward 5VOUT; above 2.5 V the scaling clamps at 100 %, and the pin's 6 V absolute maximum is approached. Short: VREF = 0, near-zero motor current — motor limp, not damaged
C7100 nF 16 V X7R (GRM188R71C104KA01D)VREF filter against chopper noise (the pin also has an internal 3.5 kHz low-pass)More current-regulation jitter; short grounds VREF (motor limp)

Datasheet notes applied here: VREF scales current linearly from 0 V to 2.5 V (I_scale_analog = 1, the default); 2.5 V or above equals the internal reference, i.e. 100 % scale. ADI recommends sizing sense resistors so the desired maximum current lands at VREF = 2.0–2.4 V for best precision; this board instead pins VREF at full scale and teaches current reduction through UART IRUN. That is a deliberate curriculum choice, but it means the board defaults to 1.77 A rms full scale, above the datasheet's 1.4 A rms continuous per-coil design guideline — reducing IRUN before sustained operation is not optional. The VREF pin input resistance (190–300 kΩ to an internal 1.8 V) loads the 5 k Thevenin divider by only about -15 mV; negligible.

5.3 Logic interface resistors and straps#

Ref.ValueFunctionIf omitted or wrong
R110 kENN pull-up to 3V3: driver disabled until host drives lowOpen leaves ENN floating on a Schmitt input — enable state undefined; short to 3V3 makes the driver impossible to enable
R2100 ΩSeries protection on driver-driven DIAG to PMOD 4Open: no stall/fault visibility (the actuator line requires a fault line); no protection against host/module contention if omitted-as-wire
R3100 ΩSeries protection on driver-driven INDEX to PMOD 8As R2, for the microstep-table index pulse
R41 kHost UART_TX into PDN_UART — the Trinamic single-wire convention, matching Figure 4.1 of the datasheet exactlyOpen: no writes possible (reads too). Wrong low value (e.g. 100 Ω) lets the idle-high host TX fight the TMC2209's reply driver and corrupts every read
R5100 ΩHost UART_RX senses the PDN_UART wire directlyOpen: writes still work (verify via IFCNT!) but no reply is ever received — a distinctive symptom
JP1/JP2Solder jumpers, bridged to GNDMS1/MS2 straps (address 0, 1/8 microstep)Cut but not re-strapped: internal pull-downs (132–200 kΩ) still read GND, so behavior is unchanged but the node is now high-impedance and noise-sensitive

5.4 Capacitors#

Ref.ValueFunction (datasheet basis)If omitted or wrong
C1, C222 µF 35 V X7R 1210 (MPN TBD — confirm GRM32ER7YA226KA12L)VS bulk: absorbs chopper ripple and energy returned during decelerationRipple and ringing on VS; the abs-max footnote's stray-inductance warning becomes live; long supply leads without bulk capacitance can ring past 33 V
C3100 nF 50 V X7RVS high-frequency decoupling at the driverHF spikes at the bridge; EMI
C4100 nFCharge pump reservoir, VCP to VS (datasheet pin table: "tie to VS using 100nF")Charge pump sags; uv_cp flag; high-side drive fails
C522 nFCharge pump flying capacitor, CPO to CPI (datasheet: 22 nF 50 V)No charge pump at all — driver cannot operate the bridge
C64.7 µF 10 V X5R5VOUT regulator output (datasheet: 2.2–4.7 µF ceramic close to pin, shortest loop to GND pad)Regulator instability; 5VOUT also feeds the VREF divider, so instability corrupts current scaling
C7100 nFVREF filter (see 5.2)See 5.2
C8100 nFVCC_IO decouplingLogic-domain noise; marginal UART/STEP integrity

X7R/X5R DC-bias derating applies to C1/C2: a 22 µF 1210 X7R at 24 V VS retains substantially less than nominal capacitance. The exact retained value must be checked against the chosen MPN's bias curve once the TBD is resolved; treat "2 x 22 µF" as the label, not the effective value.

6. Datasheet summary and design interpretation#

All TMC2209 figures below were taken from the datasheet rev 1.09 (2023-FEB-16) PDF: TMC2209 datasheet rev 1.09 (product page; the same rev 1.09 PDF is mirrored at mouser.com). The Bourns CRL sense-resistor reference cited by the design source is bourns.com/docs/Product-Datasheets/CRL.pdf (not independently verified here — the MPN is still TBD; confirm the 1206 size's pulse-power rating against the datasheet before ordering).

TopicDatasheet facts (rev 1.09)Board-specific interpretation
Absolute maximumsVS -0.5 to 32 V (33 V transient max); VCC_IO 5.5 V; logic inputs VVIO + 0.5 V; VREF 6 V; digital pin current +/-10 mA; bridge output 3 A; TJ 150 °C. Footnote: stray inductance ringing counts against these limits29 V operating headroom to 32/33 V is thin — keep bench VS at or below 24 V and leads short. Never drive logic pins with 3V3 absent
Operational rangeVS 5.5–29 V (internal 5 V regulator); TJ -40 to 125 °C; 1.4 A rms per coil continuous design guideline, 2.0 A rms duty-cycle-limited, 2.8 A sine peakBoard VS spec 4.75–29 V matches the ordering-table figure; below 5.5 V the internal-regulator operating row is not met — treat 4.75–5.5 V operation as unverified for this circuit (the datasheet's sub-5.5 V mode bridges the regulator, which this board does not do). Full-scale 1.77 A rms exceeds the 1.4 A continuous guideline: reduce IRUN
UVLOVS undervoltage rising threshold 3.5 / 4.2 / 4.6 V (min/typ/max); 5VOUT rising 3.5 V; VCC_IO rising 2.1 / 2.55 / 3.0 V, 0.3 V hysteresisThe chip self-protects against sagging rails, but note the VCC_IO threshold max (3.0 V) is close to PMOD 3.3 V — a droopy host rail can reset the driver and silently discard the UART configuration
Current scalingStandalone: I_rms = (325 mV / (R_SENSE + 20 mΩ)) x (1/sqrt(2)) x (V_VREF / 2.5 V). With UART: I_rms = ((CS+1)/32) x V_FS / (R_SENSE + 20 mΩ) x 1/sqrt(2), V_FS = 325 mV (vsense = 0) or 180 mV (vsense = 1), scaled by V_VREF/2.5 when I_scale_analog = 1. The 20 mΩ is internal BRxy resistanceSee section 7.1 for this board's arithmetic. vsense = 1 halves sense-resistor dissipation and is a legitimate later exercise
VREF pin0 to 5VOUT/2 linear range; >= 2.5 V = 100 %; open-circuit floats to ~1.8 V via 190–300 kΩ; internal 3.5 kHz low-pass; best precision with full scale at 2–2.4 VR8/R9 target exactly 2.5 V; measure it before enabling — R8 open (~1.8 V) and R9 open (~5 V-clamped) are both silent scaling faults
UART physicalSingle wire, half duplex, on PDN_UART at VCC_IO levels; auto-baud from the sync nibble of every datagram; 9600 baud (worst-case minimum ~9000) to 500 kbaud, max f_CLK/16; master TXD through 1 kΩ, RXD direct — "all transmitted data also is received by the RXD input"This board copies the datasheet Figure 4.1 network (R4 = 1 k, R5 = 100 Ω on the RX tap). The echo is guaranteed, not a bug — see 7.2
UART datagramsWrite: 8 bytes — sync nibble 1010, node address 0–3 (from MS1/MS2), register address with bit 7 = 1 for write, 32-bit data MSB-first, CRC8. Read request: 4 bytes, bit 7 = 0. Reply: 8 bytes addressed 0xFF, sent after SENDDELAY (default 8 bit times); transmitter releases the wire 4 bit times after the last stop bit. Comm resets after >63 bit-times inter-byte pause; recovery needs 12 bit times idle8N1 framing; JP1/JP2 = GND means node address 0. The FPGA UART master (planned HDL) must implement CRC8, echo discard, and the reply timeout
IFCNTRegister 0x02, read-only, 8 bit: increments on each successful write access, wraps 255 to 0, read accesses do not change itThe canonical link test — see 7.3
5VOUTInternal regulator output; attach 2.2–4.7 µF ceramic near the pin; 25 mA max total load; 0.5 W max regulator dissipationC6 = 4.7 µF at the top of the range. External load here is only the R8/R9 divider (0.25 mA) — fine
Charge pumpCPO–CPI 22 nF 50 V flying cap; VCP–VS 100 nFC5/C4 match exactly
Reset / sequencingPower-on reset from internal monitors on VS, 5VOUT, VCC_IO; easiest full reset is cycling VCC_IO; all logic inputs must be driven low during that reset because protection diodes clamp inputs to VCC_IO; registers return to power-up defaults after standbyReinforces logic-before-motor sequencing and "re-send UART config after any VCC_IO glitch"
Straps and pinsMS2:MS1 GND:GND = 1/8 + address 0; SPREAD low = stealthChop; CLK to GND = internal 12 MHz factory-trimmed clock; STDBY has internal 100 k pull-down; DIAG high on stall or driver error, cleared by ENN = high; internal pull-up/downs 132–200 kΩAll strap choices in the schematic match the datasheet defaults intended

Values not found in the datasheet text during this review (and therefore to be confirmed directly against the PDF/errata before release): the maximum tolerated VS ramp rate, and any formal statement about motor-lead disconnection (the hot-unplug rule in section 2 is standard practice grounded in the abs-max/inductance footnote, not a quoted datasheet sentence).

7. Board-specific analyses#

7.1 VREF measurement to run-current math#

The board fits R_SENSE = 0.11 Ω (R6/R7) and straps VREF to 2.5 V. With the datasheet's internal 20 mΩ BRxy resistance added, at vsense = 0 (V_FS = 325 mV) and full current scale (standalone, or UART IRUN = 31, CS = 31):

I_rms(full scale) = (325 mV / (0.110 + 0.020) Ω) x (1/sqrt(2)) x (V_VREF / 2.5 V)
                  = (0.325 / 0.130) x 0.7071 x (2.5 / 2.5)
                  = 2.50 A peak-equivalent x 0.7071
                  = 1.768 A rms          (board docs round to 1.77 A)

With UART IRUN (CS = IRUN, 0–31) the current scales as (IRUN + 1)/32:

IRUNI_rms targetNote
311.77 AFull scale; exceeds the 1.4 A rms continuous guideline — duty-cycle-limited only
251.44 AApproximate continuous ceiling
150.88 ATypical mid-size NEMA17 test point
80.50 ASensible first-motion setting
30.22 ASmall-motor / smoke-test setting

Bench procedure: measure VREF (R8/R9 junction) with a DMM before first enable. Expected 2.50 V nominal (2.44–2.56 V with 1 % resistors and 5VOUT tolerance; about 15 mV low from VREF pin loading). Then the actual phase current should be confirmed with a current probe or by measuring the mean sense-resistor voltage — the datasheet itself says to "measure and fine tune the current in the application" rather than trust the formula, and the stated tolerance is +/-2 % with external VREF at 2 V. All figures above are targets; none has been measured on hardware because no hardware exists.

7.2 The single-wire UART quirk: you always hear yourself#

PDN_UART is a half-duplex single wire. On this board host TX reaches the wire through R4 (1 kΩ) and host RX taps the wire through R5 (100 Ω) — the exact network in datasheet Figure 4.1. Consequences:

Loopback verification (do this before blaming the driver): with the module unpowered or U1 absent, send any byte from the host and confirm the identical byte arrives on host RX via R4 -> wire -> R5. This proves the TX path, the RX path, and the echo handling in one step. Then, powered, send a read request and confirm 12 bytes total. A host that receives exactly its echo and nothing more has a working TX path but no driver reply — check power, address straps, baud rate, CRC, or R5.

7.3 IFCNT: the canonical bring-up test#

Register 0x02 (IFCNT, read-only, 8 bit) increments on every successfully received write datagram — correct sync, address, CRC — and wraps from 255 to 0. Read accesses do not change it. This makes the following loop the end-to-end proof of the UART link, and it requires no motor, no VS-side enable, and no motion:

  1. Read IFCNT; record N.
  2. Write any harmless register (e.g., write GCONF back with its current value, or set SENDDELAY in NODECONF at 0x03).
  3. Read IFCNT again. Expect exactly N + 1 (mod 256).

If IFCNT increments, the entire chain works: host TX, R4, PDN_UART input, baud detection, addressing, CRC generation, plus the read path back through R5. If writes seem to succeed but IFCNT does not move, the write datagrams are being rejected — almost always CRC or node address. Do not proceed to motion until this test passes; a driver running on power-up defaults at IRUN = 31 (1.77 A) because its configuration writes were silently dropped is exactly the failure this test exists to catch.

7.4 Microstep smoke test#

After IFCNT passes and IRUN is confirmed reduced (read back IHOLD_IRUN or verify via measured phase current):

  1. Motor connected (leads secured — see hot-unplug rule), shaft unloaded, hands clear, VS current-limited to about 0.5 A.
  2. Set IRUN to 8 or below. Enable with ENN low. The motor should snap gently to a detent and hold; supply current settles to the IHOLD level.
  3. Issue a slow STEP stream (e.g., 200 Hz at 1/8 microstep = 1/8 rev/s on a 200-step motor). Expect smooth, quiet, continuous rotation — stealthChop at low speed is nearly silent. Audible ticking once per full step, or shaft oscillation without rotation, indicates a wiring or microstep problem, not a tuning problem.
  4. Invert DIR and confirm the direction reverses. Confirm INDEX pulses (once per electrical rotation, i.e. every four full steps) on PMOD 8.
  5. Alternatively drive motion with UART velocity mode (VACTUAL, register 0x22) with STEP left idle — this exercises the internal step generator and proves the UART path can do more than configuration.
  6. Watch DIAG throughout: it must stay low. DIAG high means stall or driver error; disable (ENN high, which also clears the error) and investigate before retrying.

8. Two bench contexts#

8a. PMOD host (AruviX ECP5 or other FPGA board)#

8b. Standalone bench (no FPGA)#

9. Expected values before bench testing#

All values are design targets. No column of measured results exists yet.

QuantityDesign target / datasheet basisWhat to measure
VS operating range5.5–29 V for the internal-regulator circuit; bench at 12 or 24 VJ2 terminal voltage
5VOUT~5 V, from internal regulator (load here < 1 mA)C6 / U1 pin 8
VREF2.50 V nominal, 2.44–2.56 V expected windowR8/R9 junction, before first enable
VCC_IO3.3 V from PMODJ1 pin 6/12
ENN with host idle3.3 V (R1 pull-up) = disabledJ1 pin 3
Full-scale I_rms (IRUN = 31)1.768 A rms calculated; +/-2 % datasheet tolerance at bestCurrent probe on one phase lead
I_rms at IRUN = 8~0.50 A rmsSame
Standstill supply current, enabled, IHOLD defaultDepends on IHOLD and VS; nonzero and continuous — must be recorded, no target claimedJ2 supply ammeter
UART link8N1, try 115200 baud; echo of every transmitted byte; reply after ~8 bit timesScope on PDN_UART / host RX log
IFCNT+1 per valid write, wraps at 255Read 0x02 before/after write
Microstep default1/8 standalone (MS straps), address 0Steps-per-revolution count
DIAG idleLow; high = stall/errorJ1 pin 4
INDEXOne pulse per four full stepsJ1 pin 8
U1 temperature at 1 A rmsUnknown until layout exists (EP vias dominate); overtemp warning/shutdown thresholds are in the datasheetThermocouple / IR on U1

10. Manual schematic and assembly review checklist#

11. Ordered bench-test procedure#

Stop at the first abnormal result. Record everything against the bench record template in section 13. Hands clear before any commanded motion.

A. Unpowered inspection and resistance tests#

  1. No supplies, no motor, no host. Complete the checklist in section 10.
  2. Measure resistance VMOT-to-GND (expect high, capacitor charging behavior), 3V3-to-GND, 5VOUT-to-GND, and each motor output to GND and to VMOT. Investigate any hard short before applying power.
  3. Verify R6/R7 ~0.11 Ω, R8/R9 divider, R1 pull-up path, and the R4/R5 UART network by continuity.
  4. Standalone context only: perform the unpowered UART loopback of section 7.2 (host byte echoes back through R4/R5).

B. Logic rail only#

  1. Apply 3.3 V to J1 (current-limited, 100 mA is ample). No VS, no motor.
  2. Confirm 3.3 V current draw is small and stable; ENN reads high; no part warms.

C. Motor rail, no motor#

  1. With 3.3 V still present, apply VS (12 V recommended first, limit 0.2 A). J3/J4 empty.
  2. Confirm 5VOUT ~5 V, VREF ~2.5 V, quiescent VS current modest and stable, DIAG low.
  3. Perform the IFCNT test of section 7.3. Do not continue until it passes.
  4. Write IHOLD_IRUN with IRUN = 8 (or lower) and IHOLD lower still; read back what the interface allows and re-verify IFCNT counted every write.

D. Motor attached, first enable (no motion)#

  1. Power everything down. Wait for C1/C2 to discharge. Connect the motor to J3/J4 and torque the screw terminals properly.
  2. Re-apply 3.3 V, then VS with the current limit at ~0.5 A. Re-send the UART configuration (it survives, but verify via IFCNT/read-back — any rail glitch during connection work resets it).
  3. Drive ENN low. Expect the motor to hold; record standstill supply current. Nothing should get more than warm within two minutes.
  4. Disable (ENN high) and confirm holding torque releases.

E. Motion smoke test#

  1. Run the microstep smoke test of section 7.4 (low IRUN, slow STEP, both directions, INDEX and DIAG observed). Unloaded shaft only.
  2. Raise the step rate gradually. Note any resonance bands and whether stealthChop remains quiet; a stall (shaft stops, DIAG may assert) at modest speed and low IRUN is expected physics, not necessarily a fault — log it with the IRUN and rate.

F. Current-accuracy and thermal characterization#

  1. With a current probe (or sense-voltage measurement), verify measured phase current against the section 7.1 table at two or three IRUN settings. Record the deviation.
  2. Step IRUN toward the motor's rating only as far as the test motor and the bench supply allow; never exceed 1.4 A rms continuously without a deliberate duty-cycle plan per the datasheet.
  3. 30–60 minute soak at the intended working current: log U1, R6/R7, motor case, and terminal temperatures. There is no thermal estimate to compare against yet — this run creates the baseline.

G. Release-only tests#

StallGuard4 threshold characterization on a real mechanism, spreadCycle comparison, VS range extremes (4.75–5.5 V low end explicitly unverified, 29 V high end with ringing headroom measured), repeated-fault behavior, and the full HDL deliverable (step_profile, UART master with CRC8 and echo discard, self-checking testbenches) are release-gate work, not bring-up work.

12. Troubleshooting map#

SymptomFirst measurementsLikely areas
No 5VOUT with VS presentVS at U1 pins, VS UVLO region, C6J2 wiring, U1 soldering/orientation, VS below ~4.6 V
VREF wrong (~1.8 V)R8 continuityR8 open — VREF floating at internal level
VREF wrong (~5 V)R9 continuityR9 open
UART: no echo on host RXLoopback per 7.2, R4/R5Host wiring, R4/R5 open, wrong J1 pins
Echo but no replyIFCNT via write-then-read attempt, PDN_UART scopeBaud too high/low, wrong node address (JP straps), CRC, U1 unpowered, R5 open (writes work, reads dead)
Writes ignored (IFCNT static)Datagram bytes on scope vs. datasheet formatCRC algorithm, sync nibble, address bits, framing (must be 8N1)
Motor buzzes, no rotationPhase wiring at J3/J4One lead swapped between phases; or one phase open
Rotation rough/tickingMicrostep setting read-back, sense voltagesMS straps vs. expectation, sense resistor open/wrong, mechanical resonance
Motor limp (no torque)VREF, IRUN read-back, phase currentVREF near 0 (C7/R9 short), IRUN left at minimum, current limit of bench supply engaged
Everything hot at standstillIHOLD setting, standstill reduction configIHOLD too high for the motor; standstill reduction disabled
DIAG constantly highENN cycle to clear, DRV_STATUS readGenuine stall, shorted phase wiring, overtemperature, uv_cp (check C4/C5)
Driver dead after lead change(post-mortem)Motor lead hot-unplugged with VS present — see section 2; this failure is expected, not mysterious

13. Bench record template#

FieldRecord
Board revision / serial
TBD-MPN resolution (C1/C2, R6/R7, J2–J4)
Bench context (PMOD host / standalone) and host identity
Motor make/model, rated current, wiring color map
VS supply, set voltage, current limit
Logic supply / USB-UART adapter identity
DMM/scope/current-probe equipment and calibration
Unpowered resistance results (VMOT, 3V3, 5VOUT, phases)
VREF and 5VOUT measured
UART loopback / echo result
IFCNT test result (values before/after)
IRUN settings used and measured phase currents
Standstill current and temperatures
Motion smoke test result (rate, direction, INDEX, DIAG)
Thermal soak result
Deviations, photos, raw-file paths
Reviewer / date / disposition

14. Review conclusion#

The schematic is a faithful implementation of the TMC2209 rev 1.09 standard application: charge pump, 5VOUT, decoupling, strap choices, and the single-wire UART network match the datasheet exactly, and the actuator-line rules (motor power only via J2, fault line on the PMOD, series protection on driver-driven pins) are all honored. The design's one deliberate sharp edge is the VREF-at-full-scale current strategy: the board powers up scaled for 1.77 A rms, above the datasheet's 1.4 A continuous guideline, and relies on the operator performing the UART IRUN reduction that the curriculum teaches. The IFCNT test exists precisely to guarantee that reduction actually landed before any motor sees current.

The principal open risks are: no PCB layout (EP thermal design and sense Kelvin routing are still unbuilt and thermally uncharacterized), three unresolved MPNs, the unverified 4.75–5.5 V low-VS claim, no fusing on VS, and — as with any stepper module — the operator-dependent hazards: hot-unplugged motor leads destroy the driver, and an enabled stepper holds current and torque even when nothing moves. No bench evidence exists yet; this guide defines what that evidence must look like.