CANStepper vs MKS SERVO42C (Closed-Loop NEMA 17)
If you are shopping for a closed-loop NEMA 17 board, two common paths show up for machine builders:
- Grafito CANStepper — the NEMA17 Closed Loop CAN Adapter Board
- MKS SERVO42C — Makerbase serial closed-loop retrofit (GitHub)
Both aim to reduce lost steps versus open-loop steppers. They differ mainly in networking, power, limit I/O, and software stack.
Full product documentation: https://docs.grafito.in
Python host library: pip install grafito-canstepper
Grafito CANStepper (overview)
- TMC2209 drive + magnetic encoder feedback (MT6701, up to 14-bit)
- ESP32-C3 with WiFi + Bluetooth + USB-C
- Native CAN Bus daisy-chain (GCSP v1 protocol, up to 31 nodes)
- Flexible 5–24 V power, 2.0 A RMS / 2.8 A peak
- 2× dedicated limit-switch connectors
- Host control via Python (
grafito-canstepper) or any GCSP v1 client
Docs: docs.grafito.in · Tuning: closed-loop speed tuning
Spec comparison
| Feature | Grafito CANStepper | MKS SERVO42C |
|---|---|---|
| Product | grafito.in/shop/products/canstepper-adapter-board | Makerbase SERVO42C family |
| Supported motor | NEMA 17 stepper | 42-series / NEMA 17 class |
| Input voltage | 5–24 V | 7–28 V (per Makerbase materials) |
| Motor current | 2.0 A RMS / 2.8 A peak | 0–3000 mA adjustable range (per Makerbase) |
| MCU / controller | ESP32-C3 (WiFi + Bluetooth) | Serial-control closed-loop controller |
| Communication | CAN Bus daisy-chain, USB-C, WiFi, Bluetooth | USART / serial control |
| Motor driver approach | TMC2209 + magnetic encoder feedback | FOC-style closed-loop board with multi-MOSFET drive |
| Angle resolution | ~0.022° (14-bit class magnetic) | ~0.08° (per Makerbase materials) |
| Limit switches | 2× dedicated connectors | Not a primary multi-axis CAN feature |
| Best fit | Distributed multi-axis machines, CAN networks, wireless config, Python/GCSP tooling | Standalone closed-loop retrofit with serial control |
When to choose CANStepper
Choose CANStepper when you need:
- Multi-axis CAN daisy-chain instead of long step/dir runs
- Hard limit-switch ports for machine homing
- WiFi/Bluetooth + USB configuration
- A published protocol and Python package for host control
- Flexible 5–24 V machine power rails
Choose a serial-only FOC-style board (e.g. SERVO42C class) when you only need a single-axis serial retrofit and already have a serial-centric controller stack.
Software & documentation
| Resource | URL |
|---|---|
| Docs home | https://docs.grafito.in |
| Quickstart | https://docs.grafito.in/docs/quickstart |
| Protocol (GCSP v1) | https://docs.grafito.in/docs/protocol |
| Python library | https://docs.grafito.in/docs/python-library |
| Closed-loop tuning | https://docs.grafito.in/docs/closed-loop-tuning |
| PyPI | https://pypi.org/project/grafito-canstepper/ |
| Product / preorder | https://grafito.in/shop/products/canstepper-adapter-board |
Install and first move
pip install grafito-canstepper
from canstepper import CANStepperBus
bus = CANStepperBus.serial("/dev/ttyACM0")
node = bus.node(1)
node.configure_closed_loop_speed(4800, run_current=70, microsteps=8, stealthchop=False)
node.enable()
node.move_to(360.0, blocking=True)
Hardware, firmware (GCSP v1), and the host library are original Grafito Innovations work.
FAQ
Where is the full CANStepper documentation?
At docs.grafito.in — protocol, hardware, Python API, and closed-loop speed results.
Is CANStepper better than MKS SERVO42C for multi-axis machines?
If you need CAN daisy-chain, dual limit ports, and wireless configuration, CANStepper is usually the better architectural fit. SERVO42C-class boards remain common for serial single-axis retrofits.
What speeds are realistic?
On a representative 1.2 A NEMA 17 at 24 V with firmware ≥1.2: open-loop continuous spin ~1200 RPM, closed-loop position cruise ~800–1000 RPM. See closed-loop tuning.
Bottom line
CANStepper is built for distributed, multi-axis, CAN-networked closed-loop NEMA 17 motion with a full public docs site and PyPI host library. Use the comparison table above for serial FOC retrofits; use docs.grafito.in for everything else.

