CANStepper Test Station
Connect a board to begin commissioning.
Connect the board

No board selected
ESP32-C3 TMC2209 MT6701
Compile and flash
Compile, the board test, and PID calibration run on this computer through the buttons below. The zip already contains the firmware and the test tools. Opening the zip does not install Python or Arduino.
- Download the zip and unzip it. You do not need to clone the repository or create a
can_stepperfolder. - Open a terminal in the unzipped
grafito-canstepper-stationfolder. - Install the tools once. Run
bash install.sh, or run these commands yourself:sudo apt install python3 python3-pippython3 -m pip install --user "pyserial>=3.4"curl -fsSL https://raw.githubusercontent.com/arduino/arduino-cli/master/install.sh | BINDIR="$HOME/.local/bin" shexport PATH="$HOME/.local/bin:$PATH"arduino-cli core update-indexarduino-cli core install esp32:esp32arduino-cli lib install "FastAccelStepper"arduino-cli lib install "TMC2209" - Run
python3 grafito-canstepper-station.pyand leave that window open. - Come back here. Plug in USB-C for data and apply 5–24 V Vin. USB does not power the board.
- Select that USB port below, and set the node ID. A new board is node 1.
- Tick that Vin is on and the motor is safe to move.
- Press Compile and flash, Run board test, or Run PID calibration.
arduino-cli missing · canstepper missing
Board test
Runs on the downloaded local station, using the USB port and node ID selected in this dashboard. The shaft will move.
Identity & protocolPING, fw 1.9, GCSP v1
MT6701 encoderFrame validity + count stability
TMC2209 driverUART, current scale, thermal flags
Direction polarityPositive command follows encoder
Closed-loop motionPID settle matrix + position error
Speed envelopeCruise ladder up to 4,800°/s
Soak movesRepeated closed-loop targets after persist
Safety functionsStop, e-stop latch, enable recovery
Config persistenceWrite and verify production tune
PID calibration
Finds polarity and writes the production closed-loop gains through the local station. The shaft will move.
Identity & protocolPING, fw 1.9, GCSP v1
MT6701 encoderFrame validity + count stability
TMC2209 driverUART, current scale, thermal flags
Direction polarityPositive command follows encoder
Production PID gainsKp 12 · Ki 0.3 · Kd 0.10 · 720°/s
Settle matrixClosed-loop moves at production cruise
Persist tuneWrite polarity + PID to NVS
Set node ID
A new board is node 1. Pick any ID from 1–31, then save it on the board. Occupied IDs on this bus are disabled so two boards cannot share an address.
Board controls
MT6701No data
TMC2209No data
CAN BUSno data
FAULTSUnknown
GCSP v1 at a glance
(node_id << 6) | msg_idLITTLE-ENDIAN00–15CommandsPING · ESTOP · motion · home · params · follow
20–2BTelemetryStatus · encoder · driver · environment · CAN health
0Broadcast nodeOne-frame bus-wide stop or command
1–31Node IDsStandard 11-bit CAN · 1 Mbps
Termination ruleKeep 120 Ω only at the two physical ends. Remove the 0 Ω jumper on every mid-chain board.
Test-station output will appear here.