3D renderOn the drive · 3D render of the actual model; colours are illustrative.
Make it closed-loop.
A magnet in the output hub and an MT6701 encoder on a printed bracket read where the output really is. The firmware corrects the stepper through the gearbox backlash.
Secure checkout by Stripe. Your download links appear right after payment and work for 24 hours. Terms of sale · Refunds.
Honest status: this bracket is printed and running on our bench drive, and the numbers below were measured with it (one unit, no load). The firmware in the ZIP is a standalone port of our bench firmware; it compiles for ESP32-S3 but this exact sketch has not been run on our bench yet. You need the free Cycloid Drive 25:1, built.
In the ZIP.
- The bracket: STL in print orientation (no supports, about 84 × 16 × 10 mm) and STEP in the drive's assembly frame. It is the bracket from our bench, rebuilt in CAD (matches the printed part to 0.005 mm), now with the HW mark.
- Closed-loop firmware for ESP32-S3 (Arduino): pins and settings at the top, Serial commands in degrees, and a
calcommand that measures the magnet alignment and saves it. - Wiring diagram (PDF + SVG): MT6701 + ESP32-S3 + TMC2209 + motor + supply.
- Illustrated guide (PDF): print, fit, wire, flash, calibrate, troubleshoot. Plus a BOM and a Bambu Studio project for an A1 (PLA, checked in the slicer only).
Nothing on the gearbox changes: the bracket stands on two of the six cap screws (replaced by M3 × 40), and the output hub already has the magnet pocket.
| Part | Qty | Note | Link |
|---|---|---|---|
| MT6701 encoder board | 1 | 23 × 23 mm, M2 holes on a 17.05 mm square | Parts list |
| Diametric magnet Ø4 × 2 mm | 1 | Came with our board; goes in the hub pocket | |
| M2 × 5 screws | 2 | Board to bracket (self-tapping) | Parts list |
| M3 × 40 socket head screws | 2 | Replace two cap screws | |
| ESP32-S3 dev board | 1 | 3.3 V logic, native USB | |
| TMC2209 driver | 1 | STEP/DIR, the same as the drive’s test sketch | Parts list |
What we measured.
One printed drive (PETG-CF), no load, October 2026, with our bench firmware.
| What | Result | How |
|---|---|---|
| Ratio | 25.000 : 1 | Encoder moved 1.000° per commanded degree over ~10 turns, loop off |
| Repeatability, loop off | 1.32 arcmin | 0 → 90° ten times, same direction; 1 encoder count; first disc version |
| Reversal error, loop off → on | 57 → 1.98 arcmin | Mean, no load; with the loop on, as read by the same encoder that closes the loop |
| Repeatability, loop on | 4.04′ at 90°, 1.29′ at 0° | The loop settles anywhere inside its ±3 arcmin deadband |
| Not measured | — | Torque or accuracy under load; accuracy against an external reference |
Good questions.
Does it work with my Cycloid Drive download?
Yes: every version of the Cycloid Drive 25:1 files (the free v1.0.0 and v1.1.0, and the current v1.1.1) has the same cap screws and the magnet pocket in the output hub.
Why measure the output, not the motor?
A motor encoder can't see the gearbox backlash. Reading the output lets the firmware correct for it: on our bench the reversal error read by the encoder fell from 57 to about 2 arcmin with the loop on.
Can I use an Arduino Uno or a classic ESP32?
The sketch is written for ESP32 (it uses a hardware timer and a second core). A classic ESP32 works with the pin changes listed at the top; an Uno does not.
Is the firmware tested?
Its control loop is ported from our bench firmware, which produced the numbers above. This standalone version compiles for ESP32-S3, but we have not run this exact sketch on the bench yet. If something misbehaves, email help@harbeworks.com and we will fix it.
Don't have the drive yet?
Check the drive's free parts list, build it first, then add the encoder.