Grafito CANStepper

Buy the board: CANStepper Adapter Board on the Grafito shop.

Board anatomy

ComponentRole
ESP32-C3Application MCU: motion planning, closed loop, CAN, USB
TMC2209Stepper driver, configured over UART; StallGuard4 for sensorless homing
MT670114-bit magnetic encoder (16384 counts/rev), read over SSI at 1 MHz
TCAN3413CAN transceiver, 1 Mbps

The board mounts on the back of a NEMA17. The diametric magnet must sit centered over the MT6701 with roughly 1–2 mm air gap; poor magnet placement is the number-one cause of noisy angles.

Characterization motor (docs reference)

Speed tables in Closed-loop speed tuning were measured with a PR42HS40-1204AF-02 NEMA 17 (1.8°, 1.2 A rated, 3.2 mH, 4.2 kg·cm holding, D-shaft Ø4.5×19 mm, frame 42×42×40 mm) on 24 V. Your ceiling will differ with load, supply, and motor inductance.

Pin map

SignalGPIONotes
CAN TX / RXIO21 / IO20to TCAN3413
TMC ENIO3LOW = driver energized
STEP / DIRIO10 / IO1driven by hardware pulse generator
TMC DIAGIO0StallGuard trigger, rising edge
TMC UARTIO7 (TX via 1 k) / IO6 (RX)single-wire PDN_UART
Encoder CLK / DO / CSIO4 / IO5 / IO2MT6701 SSI
Endstop (HOME)IO8internal pull-up, active-low by default

Power

  • Motor rail: 24 V. Logic is generated on-board.
  • USB can power the logic for flashing and configuration, but the motor will not hold or move without the 24 V rail.
  • Under very high continuous run current, motor load can stress the shared system enough that USB CDC disconnects. Prefer ~70% current for long high-speed closed-loop duty; keep bulk capacitance on 24 V healthy.

CAN bus rules

  • Linear daisy-chain, 120 Ω termination at both physical ends.
  • Keep stubs short; twisted pair for CANH/CANL.
  • All nodes run 1 Mbps — no configuration needed.
  • A node powered alone (nobody to acknowledge its frames) enters bus-off and recovers automatically once a second node appears; see get_can_health() if a bus looks quiet.

Endstop wiring on IO8 — read this twice

IO8 is an ESP32-C3 strapping pin: it must be HIGH at reset or the chip may fail to boot.

  • Use a normally-open switch to GND. Open at rest = pin HIGH = boots fine.
  • A normally-closed switch that shorts IO8 to GND at power-on can brick the boot until the switch is released. If you must use NC, wire it through a series diode/OR gate so the pin is not held low at reset.
  • Polarity and behavior are configurable: endstop_active_high, endstop_enable, endstop_action (report / stop / stop + zero).

IO2 (encoder CS) and IO9 (BOOT button) are also strapping pins; the board pulls them correctly — just don't add external loads to them.

The other strapping consequence

Because IO9 is the BOOT button, "hold a button at power-on" schemes are unreliable on the C3 (holding it enters the serial bootloader instead). Node addressing is therefore done over USB — see the quickstart.

On this page