This post describes the inception of, and my work on, the Timing Pulley Generator Tool.
As I was working on a DIY clock project, I quickly became aware that I was going to need lots of timing pulleys. I had decided on the MXL standard to minimize the size of my project but quickly ran against a cost hurdle. I was going to need to buy a lot of timing pulleys. And I needed them in very special configurations like hubless and hex bored. And I kind of wanted them to be transparent. And I didn’t trust myself to get the specs right on my first try. So heck – why don’t I just laser cut some pulleys!?
I thought I could just jump on McMaster or SDP-SI, download some free CAD files, and export the geometry. What I discovered was that these suppliers only sold timing pulleys in limited tooth counts and their CAD geometry wasn’t always great – lots of missing fillets. So I figured I would just make the geometry myself. It can’t be that hard … right?
After a while mucking around in Adobe Illustrator and Fusion 360, I was in over my head. I struggled to find any official documentation of the MXL pulley specifications and eventually discovered that most of the geometry could be found buried in the technical downloads of companies that sold pulley hobs. That then lead me to this lovely diagram.
At this point, I realized that I didn’t want to be hand-making geometry in CAD for every pulley. I created a parametric model in Fusion 360 that worked but the software would crash half of the time when updating parameters. I decided it was time to bite the bullet and give back to the community as so many others had. I was going to make a web based timing pulley generator, just as Matthias Wandel and Abel had done for involute spur gear generators.
The Project
I wouldn’t call myself a computer scientist but I’m pretty stubborn, reasonably nerdy, and know my way around a few programming languages. I can do this. I started by trying to dissect how geargenerator.com worked. Much of it was way over my head but I did discover that I was able to natively embed SVG on the web using HTML5 which got me started in the right direction. I figured out how to statically display SVG in a simple page then went about the actual generation of the geometry.
The Return to High School Geometry Class
I could fully constrain the sketch in Fusion 360 so I knew that I had enough information to solve this problem. I hacked at it for days and was able to make some progress but would then get stuck trying to simplify the equations enough to be implementable in javascript. What finally helped me was thinking about the problem as a vector problem. I only needed to generate four points to create the basic geometry of a tooth then I could rotate it N times around the center and be done.
I eventually found a solution that utilized the law of cosines and law of sines to relate all the variables in a way that would help. That led to a mess but I did notice that the messy relation was a quadratic so I was able to use the quadratic equation to find a root and VOILA! The rest was just a series of rinse-and-repeat steps. The final step was to add all of the fillets. To approximate a curve using SVGs you have to make a bezier curve which involves some crazy town math. Luckily, I had solved a similar problem on a previous CNC project, adding the capability to add radii and dog-bones to irregular polygons in Adobe Illustrator, so I had the structures in place to adapt it to this other application.
Lastly, was the implementation. Hopefully the HTML/CSS/JavaScript is stable enough to work for people and please do email me if something breaks and I’ll try to fix it. You can also fork the project on GitHub if you’re a legit programmer that can make it pretty.
Tips for Use
If you’re going to laser cut some MXL pulleys, the kerf of the laser cutter becomes significant in pulleys larger than about 30 teeth (just because the teeth are so damn small). I haven’t added the functionality to compensate for that yet but a quick fix is to use the “offset path” feature in Adobe Illustrator or Corel Draw and set the offset to half of your laser beam kerf. Enjoy!
Etienne says
This is a very useful tool!
Would it be possible to add the metric timing belt sizes (T5, T10, etc.)?
scottswaaley says
Hi Etienne,
There is a link on the Pulley Generator site to fork the code on github. If the profile of those belts is trapezoidal and you can send me the specs then I can look at adding them to the site!
joca_netto says
Thank you for your work! Finding those teeth profile specifications is really hard and, as you’ve said, the CAD provided by the SDP/SI are often faulty. Thank you, really!