Pulley & Belt Transmission

February 13th, 2017 4 min read

Admittedly, building a robot arm joint transmission is way more difficult than I expected. But where’s the fun in a simple project? In my last post, I explained why a geared transmission doesn’t work. This week I’ll try a new approach.

As hinted in my last post, I’ll give a timing belt and pulley transmission a go. The added benefit of using transmission pulleys in stead of gears is that I’m able to 3D print them. Since the force will be distributed over 50% of the pulley teeth, 3D printed pulleys should be able to handle the necessary torque.

I printed a small prototype to see if 3D printed pulleys would work, and although GT2 pulleys are on the limit of what is printable with a 0.5mm nozzle, they work absolutely fine. Just make sure the belt tension is sufficient.


So after my prototype had proven the possibilities of 3D printed pulleys I started working on a full fledged transmission.

The small (bought) pulleys I use are 20 teeth, so by using 80 teeth large (3D printed) pulleys, there is a 1:4 speed reduction. Since I aim for a 1:16 speed reduction, I needed to put two 1:4 reductions in series.

The “packaging” of the transmission matches the 60mm diameter pipe I’ll be using fo the robot arm body.


After a few hours … days … of Fusion 360, the render looked extremely promising!


Of course, I need to do some real world testing before I can say anything about the accuracy, speed and torque. So fire up the Lulzbot, feed it some FormFutura HDglass, and start the printing!

Since the Lulzbot Mini has a print bed of 150x150 mm, the joint is built up by three separate pieces. Not only does this allow me to overcome the size limit, but it also helps in preserving strength and print quality by alternating the print orientation.


The 3D-printed body is provided with ball bearings which accommodates the 5mm and 8mm shafts. As a shaft, I simply use some hex head bolts. Bolts aren’t precisely sized, but are very convenient to attach to a 3D printed part. Together with the ball bearing, the bolts seem to do their job.


I initially expected that I needed to add belt tensioners, but by calculation the needed pulley distance, I was able to get a perfect belt tension.

In the photo below, the large pulley on the main shaft only has one set screw. It turns out this wasn’t sufficient, so I ended up redesigning this pulley to accommodate two 3mm setscrews.


The main shaft (bolt) will be attached to the matching joint part. this part might eventually get a redesign, but for now it will be used to temporarily mount a piece of 60mm pipe.


To make the test setup look a bit more impressive, I sticked an old joint prototype in the end of the pipe (and used some black electrical tape to keep it in place).


So there you have it. The one axis prototype of my robot arm. I can’t wait to give it a test spin! So without further ado, I present you the first results:

It works wonders! The accuracy is impressive, there is no backlash and the torque is much higher than I expected. As a matter of fact, I wasn’t able to stall the motor. The first point of failure where the slipping setscrews of the pulley. I managed to solve this, by flattening the bolt on the position of the setscrews. I’ll do some actual torque tests as soon as I’ve manages to mount the joint in a proper way (in stead of the electrical tape).

The video also shows the acceleration and deceleration of the joint. This is not due to a spin up or spin down of the motor, but programmatically generated by the AccelStepper motor library I use. This is fully configurable (as well as the maximum speed).

The next steps on the to-do lists are properly mounting the joint and designing some nice covers to hide the pulleys and belts. But more important: getting real time absolute position feedback by using an encoder. Stay tuned!

Let me know what you think about this design in the comments down below!

Loading comments …
©2021 - MichaelTeeuw.nl