SS Stepper Controller v1.0 · WaveForge / StabilityCore

4-Axis Level Shifter — Board Map

Every connector and component decoded, drawn in the same orientation as your bench photo. Pin map verified against the board silkscreen and the Flux schematic.

Board layout

H3 J2 · POWER 5V/GND J1 ESP32 30-pin J11 · GND BUS all 16 holes = ground land any PUL−/DIR− here C2 0.1µF IC2 C + D SN74AHCT125N IC1 A + B SN74AHCT125N C1 0.1µF J6 · DRV D PUL+/DIR+ J5 · DRV C PUL+/DIR+ J4 · DRV A PUL+/DIR+ J3 · DRV B PUL+/DIR+
Same orientation as your photo · green = screw terminals · gold = pads/header

Verified pin map

ESP32 GPIO → level-shifter → driver. All four silkscreen-confirmed.
DriverSTEPDIRTerminal
AGPIO 25GPIO 26J4
BGPIO 27GPIO 32J3
CGPIO 33GPIO 18J5
DGPIO 19GPIO 23J6

Connector guide

  • J1ESP32 30-pin DevKit v1 plugs in here (solder the 2×15 female socket first).
  • J2Power in — you buzzed out the GND pin (right); the other is 5 V (left).
  • J3–J6Driver outputs (PUL+/DIR+) → J3=B, J4=A, J5=C, J6=D.
  • J11Ground bus — all 16 holes are common ground (you buzzed it out). Land any driver PUL−/DIR− on any hole.
  • IC1SN74AHCT125N buffer for drivers A & B.
  • IC2SN74AHCT125N buffer for drivers C & D.
J11 · 16-HOLE GROUND BUS
All 16 holes = GND (confirmed by continuity). The 8 labels (PUL_A− … DIR_D−) just keep wiring tidy — electrically you can land any minus wire on any hole.

Before you solder

  • C1 / C2: use the 0.1 µF ceramic discs (found) — non-polarized, drop in either way.
  • DIP sockets: match the notch to the silkscreen (pin 1), then the chip's notch to the socket.
  • ESP32: must be the 30-pin module to seat in J1 — not the 38-pin sensor board.

Connecting the ESP32 — jumper wiring

The ESP32 won't seat in J1 (board footprint is the wrong width — not your fault), so wire it with 10 jumpers. Each colored pin below goes to the matching board terminal. This board lives on the stationary Power Tower (no shaking), so once it's verified you can solder it permanently. ⚠ The GND wire is mandatory — no shared ground, nothing works.

ESP32 USB EN VP VN D34 D35 D32DIR B D33STEP C D25STEP A D26DIR A D27STEP B D14 D12 D13 GND→ J2 GND VIN→ J2 5V D23DIR D D22 TX0 RX0 D21 D19STEP D D18DIR C D5 TX2 RX2 D4 D2 D15 GND 3V3
Your ESP32, USB at the bottom. Colored pins = the 10 you jumper.
The 10 jumpers — ESP32 pin → board
ESP32 pinSignalGoes to
VIN5V powerJ2 · 5V
GNDgroundJ2 · GND
D25STEP AJ1
D26DIR AJ1
D27STEP BJ1
D32DIR BJ1
D33STEP CJ1
D18DIR CJ1
D19STEP DJ1
D23DIR DJ1
Four things to know:
  • Ground is mandatory — the GND jumper gives the ESP32 and board a shared reference. Skip it and nothing moves.
  • Power: the VIN→J2 wire runs the whole board off your ESP32's USB. (Or feed a separate 5 V into J2 — just tie all grounds together.)
  • Finding each J1 hole: buzz continuity from a buffer-chip input pin to J1 (chips out = a direct trace) to see which hole carries which signal.
  • Attach — verify, then commit: headers + jumpers first, run the pin-walker sketch to confirm each signal hits the right driver, fix any wrong wire — then solder the wires straight into the J1 pads (permanent, nothing to loosen). Ferrules on the ESP32 screw-terminal ends.

Wiring each driver — both ends of the wire

Your board is wired common-cathode: the buffered 5 V signals go to each driver's + inputs, and every input returns to J11 (all common ground). So each driver takes four signal wires.

The four signal wires per driver — board → DM542T
Driver+ signals from− returns to J11
AJ4 · PUL+ / DIR+PUL_A− / DIR_A−
BJ3 · PUL+ / DIR+PUL_B− / DIR_B−
CJ5 · PUL+ / DIR+PUL_C− / DIR_C−
DJ6 · PUL+ / DIR+PUL_D− / DIR_D−
At the DM542T · control side
PUL+board J[x] PUL+
DIR+board J[x] DIR+
PUL−J11 · common GND
DIR−J11 · common GND
ENA+leave open = enabled
ENA−leave open
Not on this board — the DM542T still needs these, or nothing moves:
  • Motor power: your JoyNano 36 V / 10 A → the driver's VDC / GND. The DM542T takes 18–50 V (36 V typical), so it's spot-on. Separate supply from the board's 5 V logic.
  • Motor coils (23HS32-4004S): Black→A+, Green→A−, Red→B+, Blue→B− on the DM542T.
  • DIP switches: current + microstepping — see the panel below.

DIP-switch settings · DM542T

Set each driver to its own motor's current. Your DM542T tops out at 3.2 A RMS (4.5 A peak) — that's at or below your motor's 4.0 A rating, so you have headroom and can't over-current it. Match the driver's RMS to the motor; start a little low and raise for torque.

Current · SW1/2/3 — typical DM542T (confirm on your driver's label)
PeakRMSSW1SW2SW3
1.000.71ONONON
1.461.04OFFONON
1.911.36ONOFFON
2.371.69OFFOFFON
2.842.03ONONOFF
3.312.36OFFONOFF
3.762.69ONOFFOFF
4.203.00OFFOFFOFF

Highlighted = target zone for your 4.0 A motor. Your driver's top row may read ~3.2 A RMS.

Your NEMA 23 · 23HS32-4004S · 4.0 A
≈ 2.7 – 3.0 A RMS

Start at the 2.69 A row (SW1 ON, SW2 OFF, SW3 OFF) — cool and strong for a shake table. Raise toward the driver's max if you want more torque; drop if it runs hot.

Microstepping · SW5–8
1600 pulse/rev

= 8 microsteps — smooth default. Set SW5–8 per the driver's microstep table. Use 3200 (16×) for extra smoothness; it just needs more pulses/sec.

Firmware notes

Keep each STEP pulse HIGH ≥ 2.5 µs (driver minimum); it accepts up to 200 kHz. SW4 = standstill current — one position halves it after motion stops to run cooler.

Verify on the driver: current/microstep tables vary slightly between DM542T versions — the one printed on your driver is authoritative. Confirm whether your motor's rating is RMS or peak before pushing to the top of the range.

SS Stepper Controller v1.0 · 4-Axis Level Shifter + ESP32 · pin map verified 2026-07-02