Strain Wave Gear with Timing Belts

Strain wave or harmonic drive gears are cool. As a cheap analog for metal or flex filament splined cup, try using timing belts.

Similar projects worth following
Strain wave gears offer the ability for reasonable speed to torque conversion for cheap motors like smaller steppers and RC servos. This could make the gear a useful part of a 3D printed/home fabricated robot arm or rotary table. In theory, there is minimal backlash, compared to standard gears, and they can be rather compact for the high gear ratios they achieve.

The first key problem I see for those wanting to make one of these gears with a 3D printer is that the splined "cup" part of the design needs to be flexible and even if you master the printing of it in flexible filaments, this part is unlikely to hold up to the bending cycles required for a useful lifespan.

Enter timing belts. They are effectively "bendy gears". Turn a closed timing belt inside out and you have the makings of the splined cup. The next key challenge is rigidity...

I posted a proof of concept video here: And the files to print your own version of this simple gear are here is the perfect place to ask for help taking this concept and overcoming remaining challenges to making this suitable for homebrew robots:

  • What's the best way to make this rigid enough to be the first and/or second degree of freedom in an arm? All sorts of slewing moments to overcome.
  • What range of prime movers can we use here - geared DC motors, steppers, RC servos modified for continuous rotation?
  • Could closed loop systems be easily integrated? E.g. move the potentiometer from the continuous rotation servo onto the axis of the gear, coupled to the two main gears (not the wave generator) for greater control at low expense.

I'd love to accept project team members - I'm not precious about this at all. All I would ask is that if you have the ability to try out your idea please do that and post it afterwards rather than filling the comments with hypothetical options. If you don't have the means to try something yourself, by all means use the comments to make suggestions.

  • Getting stronger

    Simon Merrett04/24/2017 at 01:38 4 comments

    Here's a stronger version of the first design revision which uses a lazy susan bearing (the video thumbnail might show the proof of concept - watch the video to see the new design).

    There are promising signs this could be useful in a compact arrangement, e.g. a small robot arm base. It felt like there was room to reduce the friction but you can't ask too much too soon! Where should we go next with this?

  • Gear model printed, powered by a stepper

    Ken Kaiser04/05/2017 at 04:22 1 comment


    A 3D printed strain wave gear, using a HTD 300-5M-20 and 608 bearings. The belt has 60 teeth, for 30 revolutions of stepper the outer gear rotates once, resulting in a -30:1 gear ratio.

    Bill of materials

    Material Quantity Dimensions
    HTD belt 1 300-5M-20 closed loop, 300mm circumference, 5mm tooth pitch, 20mm wide
    bearings 4 608, OD 22mm outer diameter, ID 8mm core, and 7mm wide
    3D printed 1 PLA, not the best material, but forgiving
    set screw 2 3mm nuts with set screws
    snap ring 2 8mm
    stepper 1 nema 17
    screws 4 M3 screws to attach stepper to gear


    Using the parametric design I printed exactly the STL output. The parametric model was designed and mainly checked against an HTD 300-5M-20 that I used here. I added space for nuts on the wave generator and set screws. To assemble the wave generator 3D-printed pins for the bearings with a spot for snap rings.

    HTD Belt Tooth spacing / depth
    8M 8mm / 3.38mm
    5M 5mm / 2.06mm
    3M 3mm / 1.17mm
    The picture shows the
    belt teeth against a
    millimeter tape.
    So far is seems that
    3M belts require the
    gear to be too precise
    and don't deal with
    forces, 5M seems
    like a good mix for

    Using a 20mm wide belt, gear parts should be less than 10mm each when the sides are assembled there isn't friction between the two halves.


    I used a Arduino MKR1000 using the Timer5 library, controlled by the Blynk app. The sketch controlled a DRV8825 stepper module. I can make details available upon request. Here is the configuration of the Blynk app:



    I can feel there is more torque on the gear output. What is an effective way to measure torque? I have 5M and 8M and belts of different diameters.


    I would want the stepper speed and current to the controlled/captured at the same time. A current sensing resistor supplying the input of an op-amp, conditioned, then captured by the ADC, should work but is there an easier/better way?


    A laser diode mounted on the gear output pointed at a wall would allow measurements to find the effective repeatable resolution. Then finding out what force results in what loss of resolution or repeatability.

  • CNC cut test gear based on the parametric generator

    Simon Merrett03/27/2017 at 18:21 7 comments

    I just wanted to say that I've tried cutting the HTD 5MM mount ring in my new CNC in 9mm plywood and it seems that when I place it over my first design revision there's a 1-2mm gap/play between the belt and gear. This isn't supposed to reflect at all on Ken's amazing work with the parametric generator, especially as it's mounting his design (at least of the tooth profile) on mine. But another initial build also reported some play, so I thought I'd post early findings.

    Please ignore the missing teeth - I was recycling previously-cut scrap plywood and I don't think the missing sections contributed to the play I report above, even though the photo shows the wave generator aligned with a missing portion of the gear.

    Has anyone else tried printing/cutting any gears? I quite like the speed of the CNC as it took about 23 mins to make this ring, which is going to be much more suitable for a "rigid" version of this gear than the 3D printed one I started with (and about twice as fast). There's room for both techniques but strength is definitely going to be helped by a larger outer diameter on the mount gear and an additive process is going to lag behind a wasting process when making larger parts from sheet stock, in this scenario.

    [edit 22:31 27/3/17]

    In response to Florian's comments, I thought I'd add a couple of screenshots comparing the CAD from the parametric generator and my first revision design.

    In the parametric generator, the diameter around the inner points of the teeth is 100.47mm and in mine it's 100mm. The gap for the belt teeth is narrower in mine (grey) than in the parametric generator (purple).

    Anyway, the beauty of a parametric generator is that you can easily change all of this!

  • Gear design

    Ken Kaiser02/15/2017 at 23:25 1 comment

    This is based on the design of a strain wave gear, but it not an exact copy of a strain wave gear. Strain wave gears characteristically have an oval wave generator, a flex spline cup, and a circular spline. The wave generator engages 1/3 or more of the teeth at the same time. It does not seem attainable to engage that proportion of teeth in this current design.

    The input gear that matches the belt teeth is in the back dark blue/purple, the output gear with +2 teeth is pink.

    As you can see, the second bearing would be forcing the belt into 1/3 of the tooth of the outer gear, at the gears are positioned right next to each other. The belt tooth is directly over the output gear tooth at tooth 15 into a 60 tooth belt, a belt that is 300mm long with 5mm pitch.

    The first revision increases the area that would engage from wider bearing(s) and belt. What is the force transmitted by a single tooth?

    This design is a game changer, but we have to test torque. Even if this design can't handle torque, there is optic positioning, and anything that needs precision movement. I can see the times where I'd trade the speed and torque of a 200 step stepper to get 6000 steps of resolution from the simple gear in the videos.

  • Parametric modeling

    Ken Kaiser02/15/2017 at 01:41 1 comment

    Have your design parametrically generated for you. Belt, bearings, export STL to print, and assemble with hardware.

    The model still needs some debugging, and set space for mounting hardware.

    I didn't make this a more collaborative design, because I wasn't sure l could actually contribute anything. There are juggernauts of talent, having years of specialized training or 30 years of experience (or both) in a field, which is awesome but intimidating. I am pleased with how it turned out, but I don't imagine that it can't be vastly improved, so an obvious comment to you might make a huge difference to me and this project. As well, I am an example that anyone can contribute to this project so please do, join and contribute.

    The model is not finished. I am going to break out specific posts in the coming days, specifically on the design of the tooth gears and the center wave generator. What is known so far, what are the trade offs, and what can be worked on in the future, keep up to date with this project if it interests you.

    Link to the model you can also search public documents for 'strain wave gear' and copy from there.

  • Video of the latest version

    Simon Merrett01/17/2017 at 00:52 3 comments

    This is a video where I try and explain what I meant in the first project log a little better.

    So, what should the next version (to try and transmit torque while resisting slewing forces etc) look like?

  • Next version from Proof of Concept

    Simon Merrett01/13/2017 at 11:52 0 comments

    I just want to get this in so we know it's been tried and seems to be an improvement over the version in the first video:

    The proof of concept constrained the timing belt along one edge to a circle. When the wave generator moves past a section of the belt, it caused deformation across the belt in a way I don't think the belts are designed for. I have printed a second version of the gear where the belt is not fixed on one side. Instead, it has a second "outer" toothed ring. Now, we have one ring with N teeth (60 in this case) and one with N+2 teeth (62 in this case). The wave generator arm now pushes the belt into the oval shape evenly across the width of the belt and the gearing effect is still achieved.

    I'll try and put something visual on here soon to explain it better.

    Onwards to the bearing phase! I have some 608 skateboard bearings left, a 6" lazy susan bearing and some wider diameter ~40mm deep groove bearings. Wondering if a couple of angular bearings are a good way forward. Thinking the 608 and a larger ~40mm dia bearing mounted concentrically would be a good way forward. Wave generator in the centre as before and the two outer gears on the middle and outer races/rings.

View all 7 project logs

Enjoy this project?



Dan Royer wrote 2 hours ago point

Would you be willing to attempt a use case, please?  The largest gearing on my robot arm needs to handle 20Nm on the output shaft.  Can you show your gearbox attached to a NEMA17 moving 20Nm?  I got this torque value from a point mass simulation of my goal machine:

  Are you sure? yes | no

Florian Festi wrote 10/27/2017 at 10:18 point

So many new contributors! Any news about the gear itself?

  Are you sure? yes | no

Dan DWRobotics wrote 07/20/2017 at 19:24 point

This is great. I had thought of doing something quite similar, although I was thinking to use 3D printed ninja flex belts for the flex spline.

  Are you sure? yes | no

Gravis wrote 07/20/2017 at 17:59 point

Arg!  Can someone please convert the parameteric generator to OpenSCAD?  That onshape site doesn't seem to have a way to download without joining their cult.

  Are you sure? yes | no

Simon Merrett wrote 07/21/2017 at 11:26 point

If you can view the "document" on Onshape without logging in (which I think you can) you can copy the code (I'm in Chrome, using mouse to highlight code and Ctrl+C to copy) from the Featurescript tabs (HTD Gear, HTD Belt, Generator and bearings), then you can work out how to make it in OpenSCAD yourself, with no Onshape account required.

  Are you sure? yes | no

Gravis wrote 07/21/2017 at 17:55 point

Excellent!  Now to learn FeatureScript. -_-

  Are you sure? yes | no

Garth S. wrote 07/06/2017 at 07:39 point

With sufficient torque, can this be driven in reverse, for higher RPM?

Thank you for sharing.

  Are you sure? yes | no

Simon Merrett wrote 07/06/2017 at 13:13 point

Garth, you're welcome but from my knowledge there's no way to reverse this. In fact it would make a "trainable" robot joint difficult. 

  Are you sure? yes | no

Garth S. wrote 07/07/2017 at 07:44 point


  Are you sure? yes | no

toms wrote 04/13/2017 at 14:04 point

amazing project. I plan to start sourcing parts for replicating it. the need for harmonic drives becomes obvious when you look at videos of (hobby) robot arms based on servos and see how the movement is shaky and jittery, even with $15-20 servos. for proof of concept I would not just show the gear lifting something with a pulley but rather connect it to a lever with a weight at the end, and have the lever move back and forth at different speeds.

  Are you sure? yes | no

Ken Kaiser wrote 04/17/2017 at 23:51 point

When I happened upon this project right after it started, and I thought the same thing.  I have the parts to build a Lite Arm i2 then it will be remixing to be powered by strain wave gears instead of servos. Could be a long build with my schedule- anything I should know or tips to share?

  Are you sure? yes | no

Simon Merrett wrote 04/18/2017 at 22:37 point

I'd also add it's worth bearing in mind a pair of insightful comments on strain wave gears when this was featured on the HaD Blog:

  Are you sure? yes | no

Florian Festi wrote 03/28/2017 at 21:39 point

More stupid ideas:

The gear ratio could increase even further by turning this into a kinda planetary gear. Of course you could just bolt a planetary gear on top that drives the strain wave generator, but that'd add the complexity of a full planetary gear. So there is no real point.

But there is another way of doing it: Have a sun gear that drives the rollers of the wave generators. For this the rollers would need to be fixed to planet gears. So you basically have stepped planets: one step being a gear that's meshed with the sun gear and the other step is the flat roller rolling on the belt. So there is no ring gear needed. This is of course at the cost of only having friction transmission between the planets and the ring. But that should be fine as there is not much torque transferred there and there is another 1:31 stage behind.

As the planet gears could stick over the ring gears you can add another reduction between the planet gears and the roller of the strain wave. So like regular planetary gears with stepped planets you have an extended range of possible gear ratios.

  Are you sure? yes | no

Simon Merrett wrote 03/28/2017 at 21:44 point

I like that idea. So a common challenge to both the planetary and belt approach is to couple the two ring gears with suitable bearings to resist slewing loads.

  Are you sure? yes | no

Florian Festi wrote 03/28/2017 at 21:07 point

I wonder if some one could make a quick test on the torque gain of the gear. It doesn't have to be super precise. Just a rough estimate if the 1:31 reduction is also yielding an similar increase in torque (with >20 already being a good result IMHO). Even if the slack cannot be completely eliminated due to the softness of the belt this kind of gear would still be very useful for some applications like driving wheels on a vehicle. But this assumes that it has reasonable mechanical efficiency.

  Are you sure? yes | no

Ken Kaiser wrote 04/17/2017 at 23:59 point

Three weeks after I built one, I finally posted an update. I was mainly delaying because I wanted to have torque tests, but they wouldn't count for much without the current (power) the motor is driving the load with. 

That would tell you what the failure point of the design is. If a stepper directly driving a load stalls a 2A of current, and the same motor fails to move a geared load- if it fails at the same 2A it is the max the motor can do, but if it stops at 1.5A then there are further optimizations to the gear design be made. 

  Are you sure? yes | no

Florian Festi wrote 03/22/2017 at 20:16 point

This looks like it could also be done with a laser cutter which would allow much faster cycles during development. I am on vacation right now so i can't really help right now. But may be some one knows someone how knows someone with a laser cutter...

  Are you sure? yes | no

delmar1192005 wrote 02/15/2017 at 04:22 point

I have worked with commercial Harmonic drive and the tooth arrangements have always been 50-51, 100-101 , 200-201, they always seem to be one tooth difference. Great idea you've got going there, cant wait to get my 3d printer so i can give it a try.

  Are you sure? yes | no

Simon Merrett wrote 02/26/2017 at 07:53 point

Ken's done a great job with the Onshape generator - we'd love to hear how you get on once the printer arrives. I don't have any experience with commercial gears so your views will be valuable. 

  Are you sure? yes | no

Florian Festi wrote 03/22/2017 at 20:13 point

So the wave generator is assymmetrical? Pushing on just one side?

  Are you sure? yes | no

Simon Merrett wrote 03/23/2017 at 15:44 point

No, it's symmetrical around the axis of rotation. Two opposing areas of contact and two larger,  opposing areas with no belt-tooth contact separating them. The YouTube videos might help. 

  Are you sure? yes | no

Florian Festi wrote 03/23/2017 at 19:48 point

Sorry, this reply system is not for me. My question above was meant for delmar1192005. The drive here has 60-62 teeth so n to n+2 so the wave generator can be symmetrical. delmar has been talking about 50-51, 100-101 , 200-201 so symmetrical wave generator should not work as far as I get the concept. It is also possible that those are not actual teeth numbers but gear rations with the actual teeth numbers being twice - allowing for a symmetrical wave generator.

It would be interesting to know whether commercial drives sacrifice symmetry for a factor 2 gear ratio increase or not.

  Are you sure? yes | no

Simon Merrett wrote 03/24/2017 at 14:33 point

Ah, I see. The comments don't even let me reply to your last message.  I understand your question and yes, only delmar1192005 can answer!

  Are you sure? yes | no

fendrikarmin wrote 02/05/2017 at 10:52 point

Timing belt arrives on next week, I'll hook the system up to a stepper, and see how the belt handles the load. I really hope it will do well...

  Are you sure? yes | no

Ken Kaiser wrote 02/15/2017 at 01:45 point

Just posted an update, if you've already designed yours, I'd be interested how the measurements line up. Or test out the design.

  Are you sure? yes | no

fendrikarmin wrote 03/04/2017 at 16:08 point

I built it, and it works. I designed it for a 3mm pitch belt, but found an issue: the belt, even under relatively small load twists a little, and it generates an undesirable "play".

  Are you sure? yes | no

Ken Kaiser wrote 03/04/2017 at 19:44 point

(In reply to your build comment, wouldn't let replies nest that deep)

Awesome! Not the play, but the build, and applying a load. Have you loaded the gear until it stops working? Ideas on how to mitigate/eliminate the play? More contact area with the bearings, tighter gear measurements could be lessen the play, do you think those would work? The gear tooth width is based off of a straight belt, if under stress the teeth diameter changes or the flexibility affects the belt tooth width, those measurements should change.

  Are you sure? yes | no

drew wrote 01/19/2017 at 01:07 point

I'm not ready to try making one of these myself but if I can make a suggestion. By using a larger diameter roller on the wave generator you would have more teeth engaged at once. You could still use 608 bearings in the rollers just fabricate something larger with a hole for the bearing.

  Are you sure? yes | no

Simon Merrett wrote 01/19/2017 at 02:05 point

Absolutely correct! Barton Dring has an oval wave generator with an array of smaller bearings around the circumference. Because to have a different tooth count on each ring at the same diameter requires at least one of the gears to have tooth spacing which does not match the belt pitch, unfortunately we can't have a section of the belt in full contact with the rings. A gradual engagement and disengagement is needed and achieved by the tighter curve of the wave generator ends.

  Are you sure? yes | no

tmk wrote 01/18/2017 at 21:15 point

Looks like quite a clever solution. I'll probably be iterating on this myself. Thanks for sharing it!

I've got a CNC mill and will probably use aluminum for the parts. I was concerned about using aluminum for the flexible part, and this solves it nicely.

Some sort of outer ring for stability, possibly with roller bearings (ground pins?) would be one way to avoid slop.

  Are you sure? yes | no

Simon Merrett wrote 01/18/2017 at 21:27 point

Great - that's exactly what I hoped someone would do. My CNC router is mid-build! For a printed version the gear rings could be inserted into large holes cut from e.g. ply or MDF to reduce deformation. For alu plate, one or more pieces to make up each ring could be bolted to another plate, which then has a smaller shaft access/bearing hole cut in the centre. This plate could be part of the base/arm bracket.

  Are you sure? yes | no

Simon Merrett wrote 01/17/2017 at 20:31 point

Hi everyone, thanks for all the likes and follows, both up to this point and in future. Please accept my apologies for not individually thanking all of you as the emails suggest but my feed gets rather filled with project teams thanking individuals. I thought this way would be less annoying for everyone.

  Are you sure? yes | no

Ken Kaiser wrote 01/18/2017 at 01:00 point

No, thank you, so clever. Making it accessible by sourcing available materials is what it's all about. I'd sign up to work on this but my 3D printer is still 6+ weeks away. You could go so deep with documenting everything. I can think of so many variables: rpm before it skips, bearing size, number of teeth (a few different sizes to infer the rest), belt width to torque transfer, lifetime vs. material, lifetime vs. operating rpm, etc.

Makes sense to look at the general design before perfecting it, your v2 seems so much better than v1.

  Are you sure? yes | no

Simon Merrett wrote 01/18/2017 at 08:50 point

Thanks Ken - your point about skipping is interesting. I understand that if the belt slipped one tooth, the gap between belt and gear which allows the waves travel round would be reduced or disappear, preventing the gear from working. Worth designing to reduce the likelihood of that scenario! 

  Are you sure? yes | no

Daniel S. wrote 01/18/2017 at 08:02 point

First thing that comes to mind is making a PoC of a practical application. Lifting something very heavy with only 3D printed parts and skateboard bearings would make for a great viral video, perhaps. Not only for the sake of going viral, but to attract others to come work on the project as well. The updated version you posted yesterday has a whole extra layer of cleverness that makes this a compelling project to me.

  Are you sure? yes | no

Simon Merrett wrote 01/18/2017 at 08:56 point

I agree with you on making a video of the first lifting version. I'm casting around for ideas on the bearing and mounting configuration. Keeping it to 608s would be challenging but definitely more attention-grabbing due to the perception of their availability. 

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates