<robrotics/>

<archived/>

The HD20 has been superseded by the HDP30, which gets 30:1 out of the same motor face and the same bill of materials. Everything below still works and the files are still up, so if you have already printed one, nothing here has been taken away from you.

One honest caveat before you follow the new one: the HD20 is still the only revision we have put on a load cell. The HDP30 has no torque, efficiency or backlash data yet. If you need a number you can defend, build this one.

<archived/> · v1.0 (RevA)

HD20

A 3D-printable 20:1 harmonic drive that bolts onto any standard NEMA 17 stepper. Prints on a normal printer, assembles with about $4 of hardware, and has been tested to 3.3 N·m.

Free and open under CC BY-SA 4.0. Build it, change it, sell it. Just credit us and share alike.

The HD20 opened up: the circular spline and output ring separated from the motor-mounted body, with the ball-cage wave generator visible inside.
20:1reduction
3.3 N·mmeasured torque
~$3.96hardware per unit
10printed parts
Testing is ongoing. The figures on this page come from the load-cell runs in our torque test report. We're in the middle of revising the test method, so expect these numbers to be updated. Please read known behaviour before you build.

<how-it-works/>

Three parts do the work. A wave generator, an ellipse riding on eleven loose 5 mm balls in a printed cage, pushes a flexible toothed ring (the flexspline) into an oval, so its teeth engage a rigid circular spline at only two points. The circular spline has two more teeth than the flexspline, so a full turn of the motor walks the output around by just two teeth. That tiny slip per revolution is the 20:1.

New to strain wave gearing? We wrote a plain-language explainer. And the tooth profile in this drive came out of our own free harmonic maker. You can use it to generate profiles for your own designs.

<specs/>

Reduction20:1
Tooth profileCycloidal, module 0.8
Measured torque2.1-2.6 N·m @ 0.7 A · 3.0-3.3 N·m @ 1.4 A (peak 3.5 N·m)
Efficiency48-58%
Backlashmeasurement in progress; we'd rather publish nothing than a guess
MotorAny NEMA 17 with a 5 mm shaft. Tested with an OMC StepperOnline 17HE12-1204S: 42 × 42 × 30 mm, 26 N·cm, 1.2 A, 4-wire.
LubricationSuper Lube synthetic PTFE grease
Printed parts10 pieces across 9 unique parts, including 2 shear pins
Fasteners8 × M3×0.5 × 6 mm button head screws per drive
MaterialsPLA throughout, PETG for the flexspline
Versionv1.0 (RevA), 9 August 2026
LicenseCC BY-SA 4.0

<what-you-need/>

Beyond the bill of materials below, you supply:

Do not print the flexspline in PLA. It flexes on every single revolution of the motor. PLA has almost no fatigue life under that duty and will crack, usually within minutes of running.

<bill-of-materials/>

loading the bill of materials…

<printed-parts/>

PartQtyMaterial
Circular spline (base)1PLA
Circular spline (output)1PLA
Base preloader1PLA
Output preloader1PLA
Interface / motor mount1PLA
Wave generator1PLA
Ball cage1PLA
Flexspline1PETG
Shear pin2PLA

Both shear pins are required. They carry shear load across the output joint directly, so the connection doesn't have to rely on friction from the preloaded screws to resist it. The screws clamp; the pins take the sideways load.

Print settings

No custom temperatures and no special bed prep. The tested units were printed on a Bambu Lab P1S with Bambu PLA (and PETG for the flexspline), using the Arachne variable-width wall generator and one extra wall loop for strength.

Two things are not the default. The output circular spline and the interface both need supports; everything else prints unsupported. And we set seam position to random on all parts, so a single seam line doesn't stack up into a weak spot or a visible ridge on the round surfaces.

<the-files/>

Everything lives in robrotics/hd17, which stays online and stays downloadable. Grab the packaged bundles from the releases page. The STEP files are large, so you probably don't want to clone the whole repo. The newer HDP30 lives separately at robrotics/hdp30.

There are no pre-sliced files. Import the STEP into your slicer and use the print settings above, so the geometry you print is always the current one.

<assembly/>

📹 no video for this revision

We never filmed the HD20 build. The HDP30 assembly walkthrough covers the same sequence: the stack-up, the preload and the shear pins are identical between the two, so follow that one and substitute these parts.

<known-behaviour/>

Read this before you conclude you assembled it wrong.

Hit something we haven't listed? Please open an issue and tell us your version, filament and printer.

<test-data/>

We measured this on a load cell with a 100 mm lever arm rather than guessing from motor specs: seven configurations, 1,500-3,000 samples each, with a no-gearbox baseline to compute efficiency honestly.

read the full torque report →

<make-your-own/>

The full parametric model is public on Onshape. Copy it into your own workspace and change whatever you like: a different motor face, a different output interface, a different ratio. If you build a variant we would genuinely like to see it: open an issue on the repo or tag @robrotics.

open the model in onshape →
The three main subassemblies of the HD20 laid out from above: the motor-mounted body with the ball-cage wave generator, the toothed output spline, and the knurled outer ring.
The three subassemblies: body with wave generator, output spline, and the knurled outer ring.