Stepper bench: two discs turning through each other's slots
Two NEMA17 motors stand at right angles, one shaft 24.5 mm above the other, and each shaft carries a Ø35 disc with four slots. The discs overlap along a vertical line: while one of them stands with a slot on that line, the other turns straight through it, then they swap. Here is a video of it running.
The margin is ±1.9°, a little more than one full step of the motor (1.8°). Lose a couple of steps and the discs catch each other — so the bench shows honestly whether a motor is holding position, which is something a spinning shaft on the bench never tells you.
114 × 114 × 122 mm overall, the electronics live in the base. bench_assembled.obj is the whole thing as it goes together, with the motors.
Parts — already oriented for printing, no supports:
01_case.stl— base, bottom down02_lid_with_tower.stl— plate down; the holes in the walls are teardrops so they print without supports03_disc_x2.stl— print it twice, in two colours; face down, hub up. 0.12–0.16 mm layers, 100% infill, and keep the seam off the edge04_gauge_10mm.stl— an 18 × 10 × 10 block, only needed while assembling
PLA or PETG, 0.2 mm for the case and the lid. Print the discs carefully: the clearance is 0.6 mm per side and it depends on how flat they come out.
You also need: 2 × NEMA17 42×42 with a 5 mm flatted shaft and 24 mm of it sticking out, 2 × TMC2209 (quiet) or A4988, an ESP32 DevKit, a 70 × 50 protoboard, a Ø12 momentary button, a 5 mm LED with 330 Ω, a 5.5 × 2.1 barrel jack for a Ø11 hole, a 12 V 2 A supply and a 12→5 V converter (MP1584 or similar), 2 × 100 µF 25 V across the driver supply, screws (8 × M3×8 round head for the motors, 4 × M3×12 countersunk for the lid, 2 × M3×4 grub screws for the discs, 4 × M2 self-tapping for the board) and four Ø10 rubber feet.
Assembly. The motor sits flange-out against the outside of the wall and rests on the ledge; the M3×8 screws go in from the inside of the bracket, connector down, cable through the opening in the lid. Put the disc on the shaft hub-first, stand the 10 mm gauge beside the shaft between the wall and the hub, push the disc up against it and tighten the grub screw onto the flat — that puts the disc exactly on the line where the two cross. Tap the screw hole M3 first, or run a screw into the bare plastic. Take the gauge out. The electronics go on the protoboard inside the case, lid on four screws.
Wiring
| ESP32 | |
|---|---|
| Driver A: STEP / DIR | 25 / 26 |
| Driver B: STEP / DIR | 32 / 33 |
| EN on both drivers | 27 |
| Button (to GND) | 14 |
| LED (through 330 Ω) | 4 |
Motor A is the lower one, axis at 71 mm; motor B the upper, at 95.5 mm. 1/16 microstepping — MS1 and MS2 to 3.3 V on a TMC2209, MS1–MS3 on an A4988 — and current set to about 0.8–1 A. 12 V goes to the drivers' VM with a 100 µF beside each, 12→5 V to the ESP32 VIN, and the drivers' VIO from the ESP32's 3.3 V.
Running it. With the motors off (they are free right after power-up), set the lower disc slot up and the upper slot down, both on the line where they cross; each one should then turn a full revolution through the other while that one stands. Hold the button for more than 1.5 s: the motors energise and take that position as zero. A short press starts and stops the demo — three revolutions of each disc in turn, then "gears" (fast alternating quarter turns), then random moves.
If they graze on the move, open a serial monitor at 115200 and press t for a slow pass, nudge the standing disc with q/w (lower) and o/p (upper) four microsteps at a time until the other passes through the middle of its slot, then s to accept the new zero. x releases the motors if you would rather set them by hand again.
The firmware is an Arduino sketch (ESP32 Dev Module, FastAccelStepper). MAX_HZ = 24000 is 450 rpm; after power-up it runs at 30% of that, and digits 1–9 over serial set 10–90%. Run the first passes at 20–30%: it is acceleration that makes a motor slip steps, not top speed. A NEMA17 on 12 V with no load usually holds 600–900 rpm, but a sharp start breaks away much earlier.
The slot is 3.2 mm against a 2 mm disc. Narrow it and the margin drops below a single step, which makes the demo stricter still.
The sketch and the STEP sources are not model files, so the forum will not take them — ask and I will post them.
- For which board
- ESP32 DevKit
- Material
- PLA or PETG
- Layer height, mm
- 0.2
- Supports
- No
- License
- CC-BY-4.0