← AXA-007

Circuit review & bench-test guide

AXA-007 — STSPIN230 BLDC/FOC driver dual-PMOD module

Design-stage — board not yet fabricated

Document purpose#

This document explains the axa-007-bldc dual-PMOD BLDC/FOC driver 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, rev 0.1-schematic), the module README, the actuator-line overview (../README.md), and the manufacturer datasheets cited in section 7.

This board 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 bench evidence of any kind. Every number below is a design target or a datasheet figure to verify, not proof that an assembled board is safe or functional. Several values are still marked TBD in the schematic (shunt MPN, both screw-terminal MPNs, the hall socket MPN). The module is marked NOT RELEASED; the design-review checklist and DRC gates have not run.

1. What the board does#

AXA-007 is the actuator line's flagship: a three-phase BLDC driver module that puts the entire control loop — commutation, dead time, current sensing, and eventually field-oriented control — in FPGA fabric. There is no MCU and no smart gate driver making decisions: the STSPIN230 is a protected triple half-bridge power stage with six direct gate inputs (INxH/INxL per half-bridge), so the host fabric owns commutation AND dead time. A single low-side shunt feeds an INA240A1 current-sense amplifier (chosen for its enhanced PWM rejection) into an ADS7042 12-bit 1 MSPS SPI ADC, closing the current loop back through PMOD B. A five-pin hall socket provides rotor position for six-step and hall-FOC operation; the sensorless back-EMF observer is a later curriculum step that keeps the hall socket as truth reference.

The module spans two adjacent host PMOD connectors (0.9 inch centers). Motor power (VM, 1.8-10 V) enters only through the J2 screw terminal, never through the PMOD — the line's one hard rule. The PMODs carry 3.3 V logic only.

Functional block diagram#

HOST FPGA (dual PMOD)                         MODULE                    MOTOR
                                 ┌──────────────────────────────┐
J1 PMOD A "DRIVE" ──────────────>│                              │
  1 INUH  2 INVH  3 INWH         │  U1 STSPIN230                │
  7 INUL  8 INVL  9 INWL ───────>│  triple half-bridge          │── OUTU ─┐
  4 EN/nFAULT <──(R2/R1 10k pu)─>│  1.8-10 V, 1.3 A rms         │── OUTV ─┼─> J4
  10 STBY ──(R3 10k pd)─────────>│  interlock + 50 ns typ DT    │── OUTW ─┘  (BLDC)
  5,11 GND  6,12 3V3 ───────────>│  OC 2 A typ, TSD 160 C       │
                                 │       │ SENSE (pins 4+9)     │
J2 screw terminal ── VM 1.8-10V >│  C1,C2 10uF + C3 100nF       │
                     GND ───────>│       │                      │
                                 │  R10 0.05R 2512 shunt        │
                                 │       │ (50 mV/A)            │
J3 PMOD B "SENSE" <──────────────│  U2 INA240A1 x20             │
  1 ~CS  3 MISO(R13)  4 SCK <───>│   REF1+REF2 = VREF_MID       │
  7 HALL1 8 HALL2 9 HALL3 <──────│   (R11/R12 10k/10k = 1.65 V) │
  5,11 GND  6,12 3V3 ───────────>│       │ 1 V/A about 1.65 V   │
                                 │  U3 ADS7042 12-bit 1 MSPS    │
                                 │                              │
J5 hall socket (3V3/GND/H1-3) <──│  R4-R6 10k pullups,          │<─ hall PCB
                                 │  R7-R9 100R series           │   on motor
                                 └──────────────────────────────┘

PMOD A carries the six timing-critical gate inputs plus EN/nFAULT and STBY. PMOD B carries the ADC SPI (Type-2 SPI positions: ~CS/MISO/SCK, no MOSI — the ADS7042 has no data-in pin) plus the three hall signals on pins 7-9.

2. Safety and scope boundaries — actuator-specific#

A BLDC motor is not a resistor. It spins fast, stores rotational energy, and acts as a generator whenever the shaft turns. The following rules are mandatory for all bring-up work on this module.

2.1 GIMBAL-MOTOR-ONLY rule for bring-up#

2.2 Stored energy, generation, and regeneration#

2.3 Rail sequencing#

2.4 Mechanical safety#

2.5 Scope boundaries#

3. Power and control sequence#

  1. With no supplies, R3 (10 k) plus the STSPIN230's internal ~36 k pull-down hold STBY low: the device is in standby, power stage high-impedance, consumption below 80 nA per the datasheet.
  2. Logic 3.3 V arrives via the PMOD (or bench supply). R1 (10 k) pulls EN/nFAULT toward 3.3 V; the STSPIN230's internal 10.5 uA typical EN pull-down leaves the node near 3.2 V. R11/R12 establish VREF_MID = 1.65 V; U2 and U3 power up. The ADS7042 requires an offset-calibration frame after power-up (section 7) before codes are trustworthy.
  3. VM arrives at J2. The STSPIN230 UVLO releases as VS rises through 1.45-1.79 V; the outputs stay high-impedance because STBY is still low.
  4. The host drives STBY (J1 pin 10) high (>= 1.48 V required). Leaving standby resets the control logic to power-up state.
  5. The host releases or drives EN/nFAULT high and applies INxH/INxL patterns. Per the datasheet truth table: INxH=1/INxL=0 turns the high side on, INxH=0/INxL=1 turns the low side on, 0/0 and 1/1 are both high-impedance (1/1 is the interlock case), and EN=0 forces all bridges high-impedance.
  6. Bridge return current flows through the paralleled SENSE pins (4 and 9, which the datasheet requires to be tied together) into shunt R10. 50 mV/A x 20 V/V = 1 V/A appears at INA_OUT, centered on 1.65 V; U3 digitizes it on demand over the J3 SPI.
  7. On overcurrent (2 A typical), short circuit, or thermal shutdown (160 C typical, 40 C hysteresis) the STSPIN230 disables the power stage and yanks EN/nFAULT low through its internal open-drain MOSFET. Review finding: this board populates only the R1 pull-up — there is no CEN capacitor, so the datasheet's REN/CEN disable-time network is absent and the automatic retry after a fault is nearly immediate. The fabric MUST latch any nFAULT-low event and hold the bridge off itself; do not rely on the chip's retry timing for protection of the motor or wiring.

4. Connectors, pin maps, and both bench contexts#

J1 (PMOD A, drive) pin123456789101112
NetINUHINVHINWHEN/nFAULTGND3V3INULINVLINWLSTBYGND3V3
J3 (PMOD B, sense) pin123456789101112
Net~CSNCMISOSCKGND3V3HALL1HALL2HALL3NCGND3V3
ReferencePins/signalsIntended use
J112-pin PMOD plugDrive: six gate inputs, EN/nFAULT, STBY, 3V3/GND
J21 VM, 2 GND (5.08 mm screw terminal)Motor supply 1.8-10 V; grounds join here
J312-pin PMOD plugSense: ADC SPI (Type-2 positions) + halls
J41 OUTU, 2 OUTV, 3 OUTW (screw terminal)Motor phase leads
J51 3V3, 2 GND, 3 H1, 4 H2, 5 H3 (1x05 socket)Hall sensor board; open-collector outputs supported

Bench context (a): dual-PMOD FPGA host#

Both plugs seat into two adjacent host PMODs on 0.9 inch centers (verify the host's connector pitch against PMOD spec 1.2.0 before layout sign-off). The host supplies 3.3 V and ground on pins 5/6/11/12 of both connectors; confirm the host's 3.3 V budget covers the module (a few mA) plus whatever the hall board draws from J5. VM comes from a separate current-limited bench supply into J2. Grounding: logic ground (PMOD) and motor ground (J2) join on the module; do not add a second external bond between the VM supply negative and the host ground, or motor return current will find the PMOD ground pins. Scope grounds go to the module GND (J2 pin 2 or a PMOD GND pin), and only one earth-referenced ground point in the whole setup.

Bench context (b): standalone logic supply#

For module-only tests without an FPGA: a bench 3.3 V supply (current limit ~100 mA) feeds pins 6/12 (3V3) and 5/11 (GND) of J1 — J3 shares the same nets through the module, verify with a meter before relying on it. A second, separate current-limited supply feeds VM at J2. Static input levels can be set with clip leads to 3V3/GND (the inputs are ordinary logic inputs; VIH >= 1.6 V, VIL <= 0.6 V). Sequencing is now manual — you are the interlock: 3.3 V first, VM second, and never leave gate inputs floating while VM is up. The two supplies' returns meet only at the module ground. The ADC cannot be read without an SPI master; standalone context covers the analog chain (DC injection, section 10.E) and gate mapping with static levels.

5. Component-by-component review#

Every reference designator in the generated schematic appears below.

5.1 Power stage and connectors#

Ref.Part / datasheet summaryFunction and why neededIf absent/openIf shorted, wrong, or misassembled
U1ST STSPIN230, VFQFN-16 3x3, triple half-bridge, VS 1.8-10 V (abs max 11 V), 1.3 A rms/bridge, RDS(on) HS+LS 0.4 ohm typ / 0.65 max, OC 2 A typ, TSD 160 C, integrated interlock and 50 ns typ dead time, <80 nA standbyThe entire power stage: six MOSFETs, protections, level-compatible direct gate inputs. Exposed pad must be soldered to ground (electrical + thermal)No drive at allWrong orientation destroys it at first VM; poor EPAD soldering defeats thermal shutdown margin and grounding; solder bridge on the 0.5 mm pitch can tie a gate input to a phase output
J2Phoenix MKDS 1,5/2-5,08 class (MPN TBD)VM entry; the only permitted motor-power path; grounds join hereNo motor powerNo reverse-polarity protection exists on VM — a reversed supply forward-biases the bridge structures; review finding: bring-up relies entirely on the bench current limit. Loose screw = intermittent VM under load = flyback events
J4Phoenix MKDS 1,5/3-5,08 class (MPN TBD)Phase outputs U/V/W to the motorNo motor connectionSwapped phases only reverse rotation direction with matching hall swap confusion — map it, don't guess; loose screw while spinning = generator-circuit break (section 2.2)
J1, J312-pin PMOD plugs (right-angle, per line template)All logic I/O; two connectors so the six gate lines share one connectorModule unusableOff-by-one insertion puts 3.3 V on signal pins — inspect seating before power; J1/J3 swapped mechanically should not fit a keyed host but verify
J5Generic 1x05 2.54 mm pin socket (MPN TBD)Hall board interface: 3V3, GND, H1-H3No rotor position; six-step and hall-FOC impossible (sensorless still possible later)Miswired hall board can short 3V3 to GND through the socket; verify hall board pinout against its own datasheet before insertion (section 10.F)

5.2 Drive-side support network#

Ref.Value / partPurposeWhat is lost if omittedImportant failure/review point
R110 k (Yageo RC0603FR-0710KL)Pull-up for the open-drain, bidirectional EN/nFAULT lineEN floats near ground via the internal 10.5 uA pull-down: bridge never enablesWith no CEN fitted, fault disable time is minimal — fabric must latch faults (section 3, step 7). Short to 3V3 defeats the fault open-drain and stresses U1's internal MOSFET
R2100 ohmSeries protection between the EN_FLT node and J1 pin 4; limits contention current if the host drives high push-pull while U1 faults low (~33 mA worst case)Direct contention between FPGA driver and U1's open-drainOpen: host cannot see faults or control EN. Host should still treat the pin as open-drain (drive low / release), not push-pull
R310 kSTBY pull-down: power stage asleep until the host drives J1 pin 10 high; line default-off conventionOnly the internal ~36 k typ pull-down remains — weaker defined-off during hot-plugShort to GND: module can never leave standby. Note VSTBYH min is 1.48 V; 3.3 V drive through 10 k parallel 36 k (~7.8 k) is fine
C1, C210 uF 25 V X5R 0805 (Murata GRM21BR61E106KA73L)VM bulk reservoir: sources commutation ripple, absorbs some regenerationVM bounce at PWM edges; supply-lead inductance rings against the bridge20 uF is small for regeneration (section 2.2); wrong (smaller/derated) parts worsen it. A shorted MLCC is a VM-GND short — first-power current limit catches it
C3100 nF 16 V X7R 0603 (Murata GRM188R71C104KA01D)VM high-frequency decoupling at U1; carries the fast edge currentGate/phase edges ring; more radiated noise; datasheet typical application expects a local capMust be placed at U1 VS pin in layout (layout not started — flag for DRC review)

5.3 Current-sense chain#

Ref.Value / partPurposeWhat is lost if omittedImportant failure/review point
R100.05 ohm 1% 2512 (Vishay WSL2512R0500FEA, MPN marked TBD in schematic)Single low-side shunt in the combined SENSEU/SENSEVW return; 50 mV/ANo current feedback: no current loop, no FOC lessonPower at 1.3 A rms is I^2R = 85 mW (1 W part: fine; at 2 A OC events, 200 mW). Kelvin connection to U2 inputs is a layout requirement not yet realized. Wrong value scales the whole chain gain — calibrate (section 10.E)
U2TI INA240A1, SOIC-8: gain 20 V/V (A1 variant; A2/A3/A4 are 50/100/200 — verify the marking), Vos +/-25 uV max, gain error 0.20% max, CMRR 132 dB min DC, enhanced PWM rejection, -4 V to +80 V common-mode, BW 400 kHz, slew 2 V/us, supply 2.7-5.5 VAmplifies the shunt drop and holds its output flat through bridge dV/dt — the enhanced PWM rejection is why this partNo analog current signalA2/A3/A4 variant halves/quarters the usable range silently — calibration catches it. IN+/IN- swap inverts the sign (decel reads as accel). Output swings to (VS-0.05) typ / GND+1 mV typ: usable range about 0-3.25 V = +/-1.6 A around mid-rail
R11, R1210 k / 10 kMid-rail divider: REF1+REF2 = 1.65 V so zero current reads mid-scale and regen/negative current reads below itOutput pinned to a rail; bidirectional measurement lostThe REF pins connect to an internal gain network (datasheet: "no operational difference between the two reference pins") and load the divider; the exact zero-current output must be measured, not assumed — section 10.E. Datasheet's own reference-divider accuracy figure is 0.02% under its test conditions, not ours
C6100 nF 16 V X7RVREF_MID filter: holds the mid-rail quiet against PWM-frequency injectionReference bounce appears directly as fake current at 20 V/VShort kills the mid-rail (zero current would read as large negative current)
C4100 nF 16 V X7RINA240 supply decouplingPWM-rejection performance degrades; risk of amplifier misbehavior on transientsPlacement at U2 pins is a layout item
U3TI ADS7042, VSSOP-8: 12-bit SAR, 1 MSPS, +/-1 LSB max INL/DNL, 3-wire SPI (CS/SCLK/SDO) at up to 16 MHz, AVDD 1.65-3.6 V is the reference, DVDD independent, 690 uW at 1 MSPS/3 VDigitizes INA_OUT; frame = CS low, two leading zeros then 12 result bits on SCLK falling edges, SDO low after 14 SCLKsNo digital current feedbackAVDD = 3V3 = reference: 3.3 V rail noise enters every code (ratiometric). The device performs offset calibration on the first CS frame after power-up (needs >= 16 SCLKs with CS low; SDO stays low that frame; OCR resets to zero at power-up) — the fabric SPI master must send this frame or offset is uncalibrated
R13100 ohmSeries protection on the ADC-driven MISO line (line rule: series R on every module-driven line)Direct pin-to-pin contention if the host misconfigures MISO as outputOpen: MISO reads floating garbage. At 16 MHz SCLK, 100 ohm plus bus capacitance shaves timing margin — verify SDO valid time (30 ns spec at 3.3 V) against the fabric sample edge
C5100 nF 16 V X7RADS7042 AVDD/DVDD decouplingConversion noise, code flickerPlacement item; AVDD is the reference so this cap matters more than usual
C71 uF 10 V X7R (Murata GRM188R71A105KA61D)Analog 3V3 bulk for the sense chainSag on the analog rail during SPI/conversion burstsShort is a 3V3-GND short: first-power current limit catches it

5.4 Hall interface#

Ref.Value / partPurposeWhat is lost if omittedImportant failure/review point
R4, R5, R610 k pull-ups, 3V3 to H1_RAW/H2_RAW/H3_RAWBias for open-collector hall outputs; also defines idle-high for push-pull hallsOpen-collector halls never pull high; signals float10 k gives ~0.33 mA sink per hall — confirm against the chosen hall sensor's datasheet (sink capability, and whether it is open-collector or push-pull)
R7, R8, R9100 ohm series, Hx_RAW to J3 pins 7-9Series protection on the hall-driven lines into the FPGADirect contention/ESD path from the motor-mounted hall board into the hostOpen: that hall reads stuck at the FPGA. Long unshielded hall cables near phase wiring pick up PWM noise — twist hall leads, route away from J4

5.5 Power flags#

#FLG01/#FLG02/#FLG03 (3V3, GND, VMOT) are ERC power-flag symbols only; they place no physical parts and need no bench action.

6. The mA-per-LSB discrepancy (review finding)#

The schematic note and README state "~1.24 mA/LSB". The correct figures from the chain design values are:

The documented "1.24 mA/LSB" appears to be the inverse (1.24 codes/mA) with the units swapped. Nominal conversion, pending calibration (section 10.E):

I_bus [A] = (code - code_zero) x (3.3 / 4096) / (Rshunt x 20)
          = (code - 2048_nominal) x 0.000806   [A, nominal values]

Usable range before INA240 output clipping: roughly -1.6 A to +1.6 A, which brackets the 1.3 A rms motor rating and the 2 A typical OC threshold only marginally — a hard OC event may clip at the amplifier before the ADC sees it.

7. Datasheet summary and design interpretation#

DeviceKey manufacturer facts used hereBoard-specific interpretation
STSPIN230VS 1.8-10 V operating, 11 V abs max; logic inputs 5 V compliant (5.5 V abs max) independent of VS; 1.3 A rms per bridge; RDS(on) HS+LS 0.4 ohm typ (0.65 max at VS=10 V, 0.53 typ at VS=3 V); VDF 0.9 V at 1.3 A; UVLO on 1.45-1.79 V / off 1.3-1.65 V; VIH >= 1.6 V, VIL <= 0.6 V; VSTBYH >= 1.48 V; standby < 80 nA; IS 0.9-1.3 mA (EN=0) / 1.5-1.95 mA (EN=1) no commutation; integrated dead time 50 ns typ only, no min/max; prop delays 125/140 ns typ; OC 2 A typ (no min/max, varies with VS per Figure 10); TSD 160 C typ / 40 C hyst; truth table with 1/1 interlock to high-Z; EN/nFAULT open-drain fault with REN/CEN-settable disable time; SENSE pins must be tied together; EPAD to ground3.3 V PMOD logic clears VIH with margin. The interlock is a backstop, not a dead-time generator: only a typical 50 ns figure exists, so the fabric must insert its own dead time (>= 500 ns suggested for bring-up) and prove it in simulation first. No CEN means near-instant fault retry: latch nFAULT in fabric. OC threshold is typical-only and VS-dependent: do not use it as a precision limit
INA240A1Gain 20 V/V (A1; A2/A3/A4 = 50/100/200); Vos +/-25 uV max; gain error 0.20% max; CMRR 132 dB min (DC); enhanced PWM rejection of large common-mode dV/dt; CM range -4 to +80 V; BW 400 kHz, slew 2 V/us, settling ~9.6 us to 0.5%; supply 2.7-5.5 V, IQ <= 2.4 mA; output swing (VS-0.05) typ / (VS-0.2) max to rail, GND+1 mV typ / +10 mV max to ground; REF1/REF2 interchangeable, both tied to a reference gives output = reference at zero differential inputOn a low-side shunt the common-mode is near 0 V — well inside range; the PWM rejection is still the reason for this part (the shunt node bounces at commutation). 400 kHz BW and ~10 us settling bound how soon after a PWM edge the sample is honest: sample in the PWM valley as designed. REF divider loading must be calibrated out
ADS704212-bit, 1 MSPS at 16 MHz SCLK; +/-1 LSB max INL and DNL; AVDD 1.65-3.6 V and is the reference (unipolar input 0 to AVDD); DVDD independent; 3-wire SPI (CS, SCLK, SDO), frame = 2 leading zeros + 12 data bits launched on SCLK falling edges, SDO low after 14 SCLKs; SDO valid <= 30 ns after SCLK falling (AVDD >= 1.8 V); offset calibration initiated on first CS falling after power-up, requires >= 16 SCLKs with CS low, OCR resets at power-up, recalibrate on significant temperature/supply change; 690 uW at 1 MSPS with 3 V AVDDThe fabric SPI master must implement the power-up calibration frame and discard it. Reference = AVDD = 3V3 rail: analog rail hygiene (C5/C7, layout) directly sets code quality. 14-SCLK frames at PWM-valley timing is exactly the "fabric owns the timing" lesson
WSL2512 shunt (R10)Vishay WSL series: power metal strip, low TCR; exact MPN still TBD in schematicThe 1% tolerance is the floor of chain accuracy until calibrated. Confirm the ordered part's power rating (>= 1 W) and TCR against the WSL datasheet before BOM release

Official references: STSPIN230 product page and STSPIN230 datasheet PDF (DocID029312; figures above read from Rev 2), INA240 product page and INA240 datasheet PDF (SBOS662C), ADS7042 product page and ADS7042 datasheet PDF (SBAS608C), Vishay WSL datasheet. Values not listed above (for example the STSPIN230 Rth(JA), which the datasheet itself marks TBD, and the WSL part's exact TCR) must be checked against the latest datasheet revision before release. Check current revisions and exact orderable suffixes before procurement.

8. Fabric-testbench-first rule (mandatory gate)#

No bitstream touches this board until the commutation logic has passed a self-checking simulation testbench. This is the actuator-line release bar and, for a six-gate bridge, a safety gate. The testbench must prove, at minimum:

Only after the testbench passes, and after section 10.D confirms the physical mapping, may the same RTL drive the assembled board.

9. Expected values before bench testing#

All values are design targets or datasheet figures — nothing has been measured on hardware.

QuantityDesign target / datasheet figureWhat to measure
3V3 rail current, module idle~3-5 mA (U2 <= 2.4 mA, U3 sub-mA, pull-ups) + hall boardBench supply readout, context (b)
VM standby current (STBY low)< 80 nA (U1) + C leakage — expect the supply readout to show ~0uA-range meter in VM line
VM current, STBY high, EN=0, no commutation0.9-1.3 mASame
VM current, EN=1, no commutation1.5-1.95 mASame
VS UVLOon 1.45-1.79 V rising; off 1.3-1.65 V fallingVM sweep, watch OUTx behavior
VREF_MID1.65 V nominal; expect small shift from REF-pin loadingDMM at C6, record actual
INA_OUT at zero currentequals measured VREF_MID within Vos x 20 = +/-0.5 mVDMM, VM on, bridge disabled
ADC code at zero current~2048 nominal; record actual code_zeroSPI read after calibration frame
Chain gain1.00 V/A nominal; 0.806 mA/LSB nominalDC injection calibration (10.E)
Phase output high levelVM minus (I x RDSon_HS share); HS+LS total 0.4 ohm typScope on J4 vs VM
Integrated dead time50 ns typ (typ only)Scope OUTx transitions, informational
Fabric dead time>= 500 ns (your parameter)Scope on J1 gate pins, per phase
Hall levels0 / ~3.3 V through 10 k pull-upsScope/DMM at J3 pins 7-9 while hand-rotating
OC threshold2 A typ, VS-dependentOnly via deliberate, current-limited test late in bring-up
nFAULT low levelVOL <= 0.4 V at 4 mAScope at J1 pin 4 during a forced fault
First ADS7042 frame after power-upSDO all-low (calibration frame)Logic analyzer on J3

10. Ordered bench-test procedure#

Stop at the first abnormal result. Record everything against the bench record template (section 12). Sections A-C use bench context (b) or (a); D onward assume a working logic context. No motor is connected until section F is complete.

A. Unpowered inspection and resistance tests#

  1. Visual inspection under magnification: U1 orientation and EPAD fillets (X-ray if available), U2/U3 pin-1 orientation, no bridges on the VQFN-16 0.5 mm pitch and the VSSOP-8 0.5 mm pitch, R10 fillets on both ends.
  2. Confirm the assembly against the BOM: U2 marked as A1 variant (gain 20), R10 is the 0.05 ohm part (a 0603 10 k reflowed into a 2512 site has happened to better labs).
  3. Meter, both polarities: VM-to-GND, 3V3-to-GND, each J4 phase-to-VM and phase-to-GND (expect body-diode signatures one way, high the other), INA_OUT-to-GND, VREF_MID-to-GND (~5 k to 3V3 net via R11/R12 divider).
  4. R10 across its pads: at 0.05 ohm this is below most DMM floors — verify it is not open (short-range beep with milliohm caveat) and plan the real value extraction from the DC injection in step E.
  5. Buzz J1/J3 pin-to-net continuity: each of the six gate pins to its U1 input pin (J1.1-INUH-U1.2, J1.2-INVH-U1.16, J1.3-INWH-U1.12, J1.7-INUL-U1.1, J1.8-INVL-U1.15, J1.9-INWL-U1.11), J1.4 through R2 to U1.13, J1.10 to U1.14, J3.1/3/4 to U3, J3.7-9 through R7-R9 to J5.
  6. Verify J1 and J3 3V3/GND pins are common on the module; verify J5 pin 1 is 3V3 and pin 2 is GND with the meter (this protects the hall board later).

B. Logic-rail first power (no VM, no motor)#

  1. Context (b): 3.3 V bench supply, current limit 100 mA, to J1 pins 6/12 and 5/11. Context (a): plug into the host with the FPGA unconfigured.
  2. Current draw per section 9. Investigate any excess before proceeding.
  3. DMM: VREF_MID (record it — this number feeds the calibration), INA_OUT (should sit at VREF_MID +/- a millivolt), EN/nFAULT node (~3.2 V), STBY (near 0 V), hall pins (~3.3 V with J5 empty).

C. ADC SPI bring-up (no VM)#

  1. Context (a) with a minimal SPI-master bitstream (that has passed its own testbench), or a logic analyzer plus any 3.3 V SPI master in context (b).
  2. Send the power-up calibration frame: CS low, >= 16 SCLKs, discard the all-low response. Then read continuously.
  3. Expect frames of 2 leading zeros + 12 bits; code near mid-scale (record code_zero at zero current). Verify SCLK frequency and that data is stable across many reads (a few LSB of noise is normal; large flicker points at C5/C7/layout or SCLK integrity through R13).

D. Six-gate mapping verification (VM low and current-limited, NO motor)#

The STSPIN230 integrates its gates, so mapping is verified at the phase outputs, not at discrete MOSFET gates — but the principle is identical: prove the mapping before real VM or a motor is ever connected.

  1. Motor disconnected from J4. VM bench supply set to 3.0 V, current limit 50 mA, connected to J2. 3.3 V logic already up. STBY high, EN released.
  2. Drive exactly one of the six gate signals at a time from the host (or clip leads in context (b)), all others low. Scope on the corresponding J4 pin:
Pattern (only signal high)Expected J4 result
INUH (J1.1)OUTU (J4.1) = VM; OUTV, OUTW high-impedance
INUL (J1.7)OUTU = GND (through R10 shunt); others high-Z
INVH (J1.2)OUTV (J4.2) = VM
INVL (J1.8)OUTV = GND
INWH (J1.3)OUTW (J4.3) = VM
INWL (J1.9)OUTW = GND

High-impedance pins float; a 10 k resistor to GND on the probed pin makes the high-Z state readable. Any swapped pair (wrong phase responds) or inverted sense (H input pulls the phase low) is a wiring/RTL mapping error: fix it now, not after VM and a motor are attached.

  1. Also verify: INxH and INxL both high on one phase gives high-Z (interlock), and EN driven low forces all three phases high-Z regardless of inputs.
  2. Verify STBY low puts everything in high-Z and (per datasheet) resets the control logic on wake.

E. Current-chain DC calibration (INA240 + ADS7042)#

Inject a known DC current through the shunt path and calibrate the whole chain end to end.

  1. Setup: VM supply disconnected. Inject current into the SENSE/shunt path: set a bench supply to current-limit mode (constant current) at 100 mA with a series resistor (e.g. 10-33 ohm power resistor to keep the CC loop stable), from the U1 SENSE net side of R10 (probe point: the shunt's SNS_P pad) returning to module GND. Alternatively drive one low-side switch on (INxL high, VM at 3 V current-limited, phase pin strapped to VM through a power resistor) so real bridge return current flows — the first method is cleaner, use it if the SNS_P pad is accessible.
  2. Verify the true injected current with a DMM in series (do not trust the supply readout).
  3. At I = 0: record VREF_MID, INA_OUT, and ADC code (code_zero).
  4. At I = +50 mA, +100 mA, +200 mA, +500 mA, +1.0 A (respect the injection resistor's power rating): record INA_OUT and ADC code at each point.
  5. Compute effective gain and offset by least squares: code(I) = G_eff x I + code_zero. Nominal G_eff = 1241 codes/A (= 0.806 mA/LSB). Compare the extracted V/A slope at INA_OUT against Rshunt x 20 = 1.00 V/A; disagreement beyond ~1.5% (1% shunt + 0.2% gain error + divider/reference effects) means a wrong part or a measurement problem.
  6. If polarity allows, repeat with reversed injection for two or three negative points to confirm bidirectional symmetry around code_zero.
  7. Document the resulting ADC-code-to-amps conversion (measured G_eff and code_zero, date, temperature) in the bench record; the fabric current loop uses these numbers, not the nominals.

F. Hall sensor socket check#

  1. With J5 empty and logic power on: pin 1 = 3.3 V, pin 2 = 0 V, pins 3-5 pulled to ~3.3 V through R4-R6. Cross-check the hall board's own datasheet/pinout against this order (3V3/GND/H1/H2/H3) before plugging it in — hall breakout boards do not share a standard pinout, and reversed supply kills hall ICs. Confirm the hall outputs are open-collector or push-pull 3.3 V-tolerant, and that 10 k pull-up sink current is within their rating.
  2. Plug the hall board in, logic power only. Confirm 3.3 V rail current rises by the hall board's expected draw and no pin sits at an intermediate level.
  3. Mount the hall board on (or verify it is integral to) the motor. Rotate the shaft slowly by hand (no VM connected) and scope/log J3 pins 7-9.
  4. Verify all three signals toggle, and record the six-state sequence over one electrical revolution in both directions, e.g. 101 - 100 - 110 - 010 - 011 - 001 (CW). Confirm 000 and 111 never occur (if they do: wiring, a dead hall, or wrong hall board). This recorded sequence, together with the phase mapping from step D, defines the commutation table — write it down; do not trust any motor vendor diagram over your own measurement.

G. Dead-time and complementary verification per phase leg#

  1. Load the testbench-passed commutation bitstream, but run it in a "static + slow PWM" debug mode. Motor still disconnected; VM 3 V, current-limited.
  2. Scope each INxH/INxL pair at the J1 pins (two channels, single trigger): verify complementary drive with the programmed dead time at every edge, for all three phases, at the bring-up PWM frequency. No overlap, ever.
  3. Scope the corresponding J4 phase during PWM: the phase should slew between VM and GND with clean high-Z gaps during dead time (body diodes and the floating pin define the shape at no load — record it as a reference).
  4. Verify a forced nFAULT (short EN_FLT node to GND briefly through 1 k) kills all six drives and that the fabric latch holds them off.

H. First spin (gimbal motor only) and current loop#

  1. Preconditions: sections A-G all pass; motor is a gimbal-class BLDC (section 2.1) bolted down; shaft bare; hands clear; VM supply at 3-5 V with current limit 300 mA; safety glasses on.
  2. Six-step commutation from the recorded hall table, low duty (10-20%). Expect slow, smooth rotation. If it twitches or locks: stop, re-check hall order and phase mapping (the two most likely culprits) — do not raise the current limit to "push through" a wrong commutation table.
  3. Log ADC current while spinning; sample in the PWM valley as designed. Verify the reading against the VM supply current (bus current at low duty is pulsed — compare averages thoughtfully, not blindly).
  4. Raise VM and load in small recorded steps. Watch: VM voltage during deceleration (regeneration, section 2.2), shunt and U1 temperature, and nFAULT. The STSPIN230 has no heatsink beyond the EPAD copper: at 1 A rms and 0.4-0.65 ohm total RDS(on), the package dissipates 0.4-0.65 W — thermal behavior on the not-yet-designed layout is a release question.
  5. Only after six-step is boring: hall-FOC, then sensorless, per the curriculum. Each new HDL stage re-enters at step G with its own testbench evidence.

11. Troubleshooting map#

SymptomFirst measurementsLikely areas
3V3 current high at first powerRail resistance unpowered; touch-check U2/U3Solder bridge, reversed U2/U3, C4/C5/C7 short
Module never leaves standbyJ1.10 level at U1.14; STBY high >= 1.48 V?R3 stuck short, host pin not driving, broken trace
EN/nFAULT always lowIsolate: lift host connection, check node with R1 onlyU1 in fault (OC/TSD), EN_FLT short to GND, U1 damaged
One phase never switchesStep D pattern on that phase; input pin at U1Solder on VQFN input pin, PMOD pin contact, RTL mapping
Phase responds to wrong inputRepeat step D tableSwapped nets/RTL constraints — fix before motor
ADC reads 0 or 4095 constantlyINA_OUT with DMM; VREF_MIDINA_OUT railed (shunt open, IN+/IN- swap, R11/R12 fault), U3 AINP open
Zero-current code far from ~2048VREF_MID, INA_OUT at zero currentDivider value/loading, missing calibration frame, offset never calibrated
Measured gain far from 1241 codes/ARecompute with DMM-verified currentWrong shunt value, INA240 A2/A3/A4 variant, injection path wrong
SPI data garbled / shiftedLogic analyzer: CS-to-SCLK setup, count SCLKs, leading zerosFrame length not 14+, sampling edge, R13/route integrity, SCLK too fast for SDO valid time
First SPI frame all zerosThis is correct once (calibration frame)Only a fault if every frame is zero
Motor twitches, will not rotateHall sequence vs commutation table; step D mappingHall order, phase order, wrong table direction
nFAULT fires on commutationADC/scope current at the event; VM droopOC (~2 A typ): current limit too high for the motor, shoot-through via RTL bug, mechanical stall
VM supply overvolts on decelVM waveform during ramp-downRegeneration into a one-quadrant supply — clamp/bulk/two-quadrant needed
U1 hot at modest currentRDS(on) drop across phases; EPAD solderEPAD voiding, layout thermal (unresolved by design), true overcurrent
Halls read constant 000 or 111J5 supply pins; hall board pinoutReversed/damaged hall board, wrong socket wiring

12. Bench record template#

FieldRecord
Board revision / serial
Assembly audit (U2 variant marking, R10 part, TBD MPNs as built)
Bench context (a) host / (b) standalone, equipment IDs, calibration dates
Motor identity, phase resistance measured, hall board identity
Unpowered resistance results (A)
Logic-rail current, VREF_MID, INA_OUT, node levels (B)
SPI bring-up: SCLK freq, calibration frame seen, code_zero (C)
Six-gate mapping table result, interlock and EN checks (D)
Calibration: injected points, G_eff [codes/A], code_zero, residuals (E)
Hall pinout cross-check, state sequence CW/CCW (F)
Dead-time screenshots per phase, programmed DT value (G)
First-spin log: VM, current limit steps, temperatures, regen waveform (H)
nFAULT events and fabric latch behavior
Deviations, photos, raw-file paths
Reviewer / date / disposition

13. Review conclusion#

The architecture is coherent and deliberately educational: a protected integrated power stage (STSPIN230) with six direct inputs pushes commutation and dead-time responsibility into fabric, while the shunt-INA240-ADS7042 chain gives the fabric a real 1 V/A, PWM-rejecting current loop and the hall socket provides ground truth for position. The dual-PMOD split is sensible (all six timing-critical gate lines on one connector) and the default-off conventions (STBY pull-down, interlock truth table, series resistors on every module-driven line) are consistent with the rest of the line.

The principal open risks, in order: the board does not exist (no layout, so Kelvin shunt routing, EPAD thermals, decoupling placement, and the 0.9 inch dual-plug mechanics are all unverified); no CEN network means fault retry is effectively instantaneous and protection depends on the fabric latching nFAULT — this must be treated as a firm RTL requirement, not a suggestion; no reverse-polarity or overvoltage protection on VM against an 11 V absolute maximum, with regeneration able to pump VM upward on deceleration; the documented 1.24 mA/LSB figure is inverted (correct: ~0.81 mA/LSB, 1.24 LSB/mA) and should be fixed in the README and schematic note before it propagates into HDL scaling constants; the STSPIN230's dead time and OC threshold are typical-only figures; and three connector MPNs plus the shunt MPN remain TBD. None of these blocks fabrication, but every one of them must be closed — and this guide's sections A-H executed in order, stopping at the first abnormal result — before the module earns released status.