Loading

Parametric pulley - lots of tooth profiles

by droftarts, published

Parametric pulley - lots of tooth profiles by droftarts Jan 28, 2012

Description

This thing will create a range of metric and imperial tooth profile pulleys, with any number of teeth, specified in the Openscad file.
Tooth profiles currently supported are MXL, 40DP, XL, L, T2.5, T5, T10, AT5, HTD (3mm, 5mm, 8mm) and GT2 (2mm, 3mm 5mm).
NOTE: error in script regarding L and H pulleys spotted by OSTycoon (see comments) - the script says H, but actually it is L profile.
There are a range of editable parameters for editing the fit of the tooth (to account for printer variation), the pulley base, captive nut(s) slot for the set screw, motor shaft diameter, pulley height and belt retainers.
The attached stls are reference pulleys, mostly around the size used on repraps.

Details
After creating the parametric pulley thingiverse.com/thing:11256 I realised this way of modelling them was only going to work for square-toothed pulleys, and a way of producing pulleys for belts with better characteristics for linear motion was required. I found dxf drawings of the relevant tooth profiles here oem.cadregister.com/asp/PPOW_Entry.asp?company=915217&elementID=07807803/METRIC/URETH/WV0025/F and modelled pulley diameter from data here sdp-si.com/D265/HTML/D265T016.html
There were a couple of possible approaches to importing the data, I chose to simplify the bezier curve dxf data in Inkscape, producing vertices with a resolution of around 0.05-0.1mm for each tooth. Another advantage is the the pulleys have the tooth ramp for smooth entry and exit of the belt tooth into the pulley. I'm not really sure 3D printers can take full advantage of this yet, but quality is improving all the time!
If other tooth profiles are required, or you model any, please pass them on to me and I will include them.

22 March 2012 - Updated for issue spotted by mfinn - see comments

Recent Comments

view all
Go to sdp-si.com/eStore/Catalog and select Metric. Search for "A 6Z51M100DF0608." Click on the pop-up, then "CAD Model". Unless you have SolidWorks 2004-2008, then select "STEP (.stp) and download. Then drag+drop into SolidWorks.
Ye it was the customiser version. Managed to use the openscad to draw a standard pulley in the end. I am trying to make a pulley similar to this i.imgur.com/LVcujBM.jpg . Could you recommend the best way for me to go about it? I have access to solidworks.
Is that in the customiser version? There's no limit in the OpenSCAD original version.

More from 3D Printer Parts

view more

Instructions

1. Download openscad file
2. Tweak to make your perfect pulley
3. Print
3.1 If you get blobs and/or stringing, you may need to reduce the perimeter speed, perhaps as low as 10mm/s depending on your electronics/baud rate etc. The model is high resolution, and slicing software will produce lots of very short moves, that the comms may not be able to keep up with. Alternatively, print from SD card. Printing slow should improve the tooth shape, and fit of the belt.
4. Rejoice!
Very good job. Some of my friends had trouble personalizing their own part, so I have improved the Customizer interface : thingiverse.com/thing:343343. Feel free to update your code with these modifications if you like my version.
Hey, I am trying to make a gt2 5mm pulley but unfortunately the max pulley size is 50 tooth. Any chance you could make it work for upto 100?
Is that in the customiser version? There's no limit in the OpenSCAD original version.
Ye it was the customiser version. Managed to use the openscad to draw a standard pulley in the end. I am trying to make a pulley similar to this i.imgur.com/LVcujBM.jpg . Could you recommend the best way for me to go about it? I have access to solidworks.
Go to sdp-si.com/eStore/Catalog and select Metric. Search for "A 6Z51M100DF0608." Click on the pop-up, then "CAD Model". Unless you have SolidWorks 2004-2008, then select "STEP (.stp) and download. Then drag+drop into SolidWorks.
I'm having trouble printing the GT2 2mm pulley with an 0.5mm tip (obviously going to be difficult/impossible since the tooth width is ~0.4mm). I'm likely going to buy another smaller nozzle to print with, but I'm not sure how small/large to go. I can get a 0.4mm, 0.35mm or a 0.3mm (the latter of which is apparently prone to jamming a lot).

I'm wondering what nozzle sizes people here have used to successfully print GT2 2mm?
RepRapPro (I work for them now) used to use a 0.3mm nozzle, set with a 0.3mm extrusion width, to print MXL pulleys. These have a pitch very close to GT2 (2.032mm), and the printed pulleys gripped the belt and worked fine. I think the rounded tooth shape of GT2 would actually help - the pulleys we produced didn't have particularly sharp tooth profiles. I think you'll struggle with anything larger than a 0.3mm nozzle. Make sure you've got good vertical straight walls, or the wobble will ruin fit, and your retraction settings are well-dialled in. Printing the outer perimeter before the inner can often help with accuracy. We've moved to supplying aluminium pulleys now, as we couldn't keep up with the quantity we needed with printing!
Thanks, I was trying to print a giant 150-tooth gear, that geared down a 16-tooth metal GT2 pulley (obviously next to impossible to find an off-the shelf gear that big, for cheap). I ended up getting it printed out with an 0.3mm nozzle, but just barely. Thanks again for this wonderful set of openscad tools.
Yay! Just hit 1000 'likes'!
And over 1100 now...
How do you know what 'Profile' in the customiser is which tooth profile? I am after HDT T5 but I don't know what is what and I can't work it out from the images.
Sorry, I have no idea about the customiser, I didn't do that version. In OpenSCAD file, the profiles are:
1=MXL 2=40DP 3=XL 4=L 5=T2.5 6=T5 7=T10 8=AT5 9=HTD_3mm 10=HTD_5mm 11=HTD_8mm 12=GT2_2mm 13=GT2_3mm 14=GT2_5mm
So you will probably want profile = 10
There is a site where you can get the design for a wooden gear by just putting in the number of teeth you want it to have. You could adapt some of those for the makerbot.
You should make this customizable :)
I get it.... You have to actually go to the Customizer app and find this thing, instead of just clicking a "Open In Customizer" button...
Thanks!
Is there any way to speed up the script conisdering all I want is the tooth profile?
I'm usually quite good with these things but its alluding me.
Does anyone know if there's a way to create a flat DXF using the script? I really just want to generate flat teeth so I can extrude and mess with them in AutoCAD.
Not sure if i'm right or not, but it seems like the H profile (.5 inch pitch, 12.7 mm) is actually an L profile (.375 inch pitch, 9.525 mm). Please correct me if i'm wrong, but I'm planning on using an L pitch timing belt in my current project.
Hi, thanks for spotting this, yes you are right! Seems like I misnamed the L profile I originally downloaded from oem.cadregister.com and copied the mistake into the openscad script. If you look at the Excel file, I only modeled the L, not the H. Everything else in the openscad file seems correct for L. I won't change the file, unless someone needs an H profile pulley!
Many thanks sir. Unvaluable for myself.
Feel free to post an "I made one" picture!
I made one. I have to setup my printer for a better result ;)
I saw your pic! I can't print them one at a time, either, as each layer is still too hot and moves around when the next layer starts. Try printing at least two at a time. A fan will help, too. Looks like you might be running the filament a bit hot, and perhaps over-extruding? Hard to tell from the pic!
Sigh Checked my Steps per mm Calibration for my X and Y they where set to 80 steps per mm when they should have been 62 Steps per mm that was throwing All the Calculations off so the Print was Bigger and the Spaces where too large See I only set the Extruder.... the Z axes was right as far as I could tell but Ill check it anyway... but you can fudge that setting so many ways even if it is right out in calculations you can set it right by Physically Fiddling with the Endstops and the Max settings
Yes, looks like you're right, the comment in the file is wrong; changing the additional_tooth_width doesn't automatically change the height. I can't remember why not now! To maintain the correct shape, set additional_tooth_height to additional_tooth_width/2. Though if you are getting this printed by shapeways, you should be able to set both of these to 0, as shapeways prints are generally accurate.
There is a .34mm Space between your inside shaft and your outside Cogs  in your T-2.5 Cog  Ether I am not Extruding enough Plastic in my Builds or you missed a Layer.....
I guess you mean that, when you slice this, you end up with a gap between the teeth (outside) and shaft (inside). It's probably because your extrusion width is wider that the gap, so Slicer doesn't infill. Either reduce the number of perimeters, or reduce the extrusion width. Post a picture to help diagnose what is wrong.
 Posted the Pic in your Made one pics
Yes, what I said above. It's a slicing issue, not a problem with the model. What size nozzle do you have? 0.5mm? So your 'single wall thickness' in Slic3r (open the gcode in a text editor, it will show the actual figure) will probably be 0.6mm, so it can't infill the 0.34mm gap. In Slic3r, set Print settings -> Advanced -> Default extrusion width to 0.5mm and reslice. Then check the gcode in a visualiser, ie Repetier host, before printing. Or reduce the number of perimeters (I can't see how many there are, maybe three?) so that there is a bigger gap between the teeth and the shaft. It is difficult to get good teeth with printed T2.5 pulleys; you really need a fine nozzle, like 0.3mm. And very good extrusion calibration - follow this guide: github.com/alexrj/Slic3r/wiki/Calibration
 My Nozzle is 0.35mm
Okay, so your single wall thickness will be around 0.4mm. Which is why it can't fill the 0.34mm gap. It's a slicing problem; reduce the number of perimeters to make space for infill. I usually do 2 perimeters with 100% infill, with a 0.4mm nozzle.
thanks for the Pullys Ill try to get them printed out
 your openscad script is insanely complicated.
(i usually work on "what you see is what you get" software)

i would just change some of the radius here and there..
but how to make your script do the MXL style?
its always compiling a T5 or similar

i cant get it to do what i want.
i need a MXL pulley. with about 5cm outer diameter.
@yzog, did you read the comments properly? The second variable after the comment // tunable constants is called "profile" and the comment for it gives you the values available. The default of 6 is for T5, you want 1 for MXL.
Since the pulleys have discrete number of teeth you can't really just say what diameter you want. You need to have a look in the Excel file to find out the number of teeth needed for your required diameter. Or just estimate the number of teeth from as n = diameter / pi / pitch.
Sorry, I don't seem to be getting notifications anymore, with the changeover to Discus.
http://disqus.com/thingiverse-492114f6915a69aa3dd005aa4233ef51/  Yes, it's complicated, it's doing a complicated job! And yes, Openscad is definitely not WYSIWYG software, it's more like a programming language. However, I thought the scad file was fairly well commented.
As disqus.com/thingiverse-8702581b10fc44c8ee9021a967744624/ pointed out, you specify the size by the number of teeth - you can't specify a diameter and expect the teeth to fit, as the spacing between the teeth is fixed.
To help: under "// tuneable constants" set:
teeth = 78; (this gives a pulley diameter of 49.94mm)
profile = 1;
And you'll probably want to set (lower down the list):
retainer = 1;
idler = 1;
That should get you close. Press F5 to see an update in the openscad window.
This is absolutely brilliant! Hats off, excellent work.

Now, I just wish I could print HTD 3mm pulleys on my Printrbot... Anybody tried printing HTD 3M with a 0.5mm nozzle? Possible/usable? Anyway, I might just give it a go :) I would love to upgrade from T5 to HTD 3M (or maybe 5M).
Thanks! I don't think anyone has tried the HTD pulleys, so it would be great if you did, and could give some feeback. Though the 3mm tooth size is small, the HTD tooth shape is rounded. A 0.5mm nozzle shouldn't be too much of a drawback, as it won't be trying to make the sharper corners that a normal toothed belt has. Make sure your machine is well-calibrated (here's what I use: github.com/alexrj/Slic3r/wiki/Calibration ), and give it a go!
Well, I tried and it didn't turn out very well - a lot of stringing over the teeth.
Anyway, thanks a lot for the tips regarding calibration, I will definitely give that a go and then retry printing.
Trouble could also lie in Slic3r - it was printing each tooth individually as a triangle instead of going in one line. That definitely didn't help the quality.
I've been printing T5 pulleys recently, and have found that the perimeter needs to be printed very slowly, like 10mm/s, otherwise you get segment pausing, which leads to blobs and strings. In the past I have printed faster, but I now use Ubuntu as my main print platform, and USB comms are limited to 115200 baud, rather than 250000 baud. With the high number of polygons in each tooth, and lots of short moves created by Slicer, the USB can't keep up. I slice these using Slic3r 0.7.2b still, as that seems to give a smoother path and more accurate size than newer versions.
Slic3r is producing triangles for the teeth? You probably need a smaller nozzle, or you can try setting the extrusion width smaller in Slic3r, despite using a 0.5mm nozzle. I would try printing with 0.3mm layer height, 0.5mm extrusion width. It may give you a better path without triangles.
Finally I could make great use of your script, thanks a bunch for the good work! Actually helps me to develop a promising new type of RepRap - all pulley-concerning credits will go back to you once it gets published 8-)
Great! Look forward to seeing your work, love your reloaded Greg's, btw. Post a picture of your pulleys if you get the chance.
Hello!

I tried to get it working in an other OpenScad script, but couldn't get it working.
I tried something like:

use
&
lt;Pulley_T-MXL-XL-HTD-GT2_N-tooth.scad
&
gt;

pulley ( "MXL" , MXL_pulley_dia , 0.508 , 1.321 );

but that didn't produce any output...

what am I doing wrong?
You need a ; at the end of the 'use' line. But there are lots of things outside of the 'Pulley' function, so I'm really not sure of the results. I didn't write the scad with this in mind, sorry!
This thing is PERFECT, thank you so much!
I changed the nut_elevation to:

nut_elevation = (pulley_b_ht+idler_ht*idler)/2;

This centers it on the collar assuming idler is 1 when true, which is what I wanted.
I think that should be

nut_elevation = (pulley_b_ht - idler_ht*idler)/2; // with a minus!

as the idler isn't added to the height of the base. This will centralise the nut hole on the base, if the pulley teeth, and hence idler, is wider than the base.
My file had the oposite problem from the examples: the nut being too far from the pulley. I assumed a different coordinate system, but I bet I mucked something else up. Oh well, thanks for the correction.
Wow this is great! It may be out of the scope of what you are doing, but it would be really nice to also be able to choose an involute profile gear as the teeth.
That should be relatively easy to do, with the built in involute gear library. But I won't add it to this version, it's has lots of configuration variables already!
Not sure why this is working for everyone else...

scale ([ tooth_width_scale , tooth_depth_scale , 0 ])

should be:

scale ([ tooth_width_scale , tooth_depth_scale , 1 ])
You are right, it *should* be 1 (or just left out entirely, it shouldn't be scaling in the Z axis anyway), but I don't see any difference putting 0 or 1 in my version of OpenSCAD (2011.6 and 2011.12, Mac version). It could be a bug. Are you using a more up-to-date version, like from the github repository?

For example, if I create a 1-line scad file of:

scale ([1,1,0]) cube ([10,10,10]);

I get a 10x10x10 cube. Same if I put in scale ([1,1,1]), but scale ([1,1,0.1]) works as expected.

I have uploaded a new version with that corrected, as perhaps the Z scaling issue will be fixed in newer OpenSCAD versions. Thanks for spotting it!
Sorry I never replied. I was using the head from git, so that probably explained the difference.
I hadn't thought of that... easily done. Comment out the line in the scad file that calls the tooth profile you have specified, eg if the tooth profile is T5 (set in "tuneable constants"), in the section "//teeth - cut out of shaft", comment out this line:

if ( profile == 6 ) { T5();}

When the file is rendered, you'll have a pulley blank of the correct size for the tooth size - probably not that important. Set the other constants for an idler: retainer = 1, idler = 1, and pulley_b_ht equal to idler_ht.
I hadn't thought of that... easily done. Comment out the line in the scad file that calls the tooth profile you have specified, eg if the tooth profile is T5 (set in "tuneable constants"), in the section "//teeth - cut out of shaft", comment out this line:

if ( profile == 6 ) { T5();}

When the file is rendered, you'll have a pulley blank of the correct size for the tooth size - probably not that important. Set the other constants for an idler: retainer = 1, idler = 1, and pulley_b_ht equal to idler_ht.
I hadn't thought of that... easily done. Comment out the line in the scad file that calls the tooth profile you have specified, eg if the tooth profile is T5 (set in "tuneable constants"), in the section "//teeth - cut out of shaft", comment out this line:

if ( profile == 6 ) { T5();}

When the file is rendered, you'll have a pulley blank of the correct size for the tooth size - probably not that important. Set the other constants for an idler: retainer = 1, idler = 1, and pulley_b_ht equal to idler_ht.
I hadn't thought of that... easily done. Comment out the line in the scad file that calls the tooth profile you have specified, eg if the tooth profile is T5 (set in "tuneable constants"), in the section "//teeth - cut out of shaft", comment out this line:

if ( profile == 6 ) { T5();}

When the file is rendered, you'll have a pulley blank of the correct size for the tooth size - probably not that important. Set the other constants for an idler: retainer = 1, idler = 1, and pulley_b_ht equal to idler_ht.
Is there a way to make an idler with no teeth? this is for the back side of the belt.
I hadn't thought of that... easily done. Comment out the line in the scad file that calls the tooth profile you have specified, eg if the tooth profile is T5 (set in "tuneable constants"), in the section "//teeth - cut out of shaft", comment out this line:

if ( profile == 6 ) { T5();}

When the file is rendered, you'll have a pulley blank of the correct size for the tooth size - probably not that important. Set the other constants for an idler: retainer = 1, idler = 1, and pulley_b_ht equal to idler_ht.
I added a variable called has_no_teeth, so I don't have to remember which one I commented out

// line 24 (in "tunable constants")
has_no_teeth = 1; // 1 for yes, 0 for no

// line 150 (under "scale( {")
if ( !has_no_teeth ) {
// all of the "if ( profile == " statements inside here
}
// then comes the close bracket for the scale statement
That's annoying. Didn't notice it was doing this! I have flagged all bar one for removal.
I hadn't thought of that... easily done. Comment out the line in the scad file that calls the tooth profile you have specified, eg if the tooth profile is T5 (set in "tuneable constants"), in the section "//teeth - cut out of shaft", comment out this line:

if ( profile == 6 ) { T5();}

When the file is rendered, you'll have a pulley blank of the correct size for the tooth size - probably not that important. Set the other constants for an idler: retainer = 1, idler = 1, and pulley_b_ht equal to idler_ht.
I hadn't thought of that... easily done. Comment out the line in the scad file that calls the tooth profile you have specified, eg if the tooth profile is T5 (set in "tuneable constants"), in the section "//teeth - cut out of shaft", comment out this line:

if ( profile == 6 ) { T5();}

When the file is rendered, you'll have a pulley blank of the correct size for the tooth size - probably not that important. Set the other constants for an idler: retainer = 1, idler = 1, and pulley_b_ht equal to idler_ht.
I hadn't thought of that... easily done. Comment out the line in the scad file that calls the tooth profile you have specified, eg if the tooth profile is T5 (set in "tuneable constants"), in the section "//teeth - cut out of shaft", comment out this line:

if ( profile == 6 ) { T5();}

When the file is rendered, you'll have a pulley blank of the correct size for the tooth size - probably not that important. Set the other constants for an idler: retainer = 1, idler = 1, and pulley_b_ht equal to idler_ht.
I hadn't thought of that... easily done. Comment out the line in the scad file that calls the tooth profile you have specified, eg if the tooth profile is T5 (set in "tuneable constants"), in the section "//teeth - cut out of shaft", comment out this line:

if ( profile == 6 ) { T5();}

When the file is rendered, you'll have a pulley blank of the correct size for the tooth size - probably not that important. Set the other constants for an idler: retainer = 1, idler = 1, and pulley_b_ht equal to idler_ht.
I made a tray of four GT2 which seems good !

But the pitch of the belt I got from a scanner (or a printer) is even smaller... argh, probably too fine to be printed ^^'
Hi Emmanuel, yes that belt looks tiny! Nice print though, thanks for sharing.
tried to make a pulley w/ an idler, retainer and pulley base
&
amp; the base and idler overlapped rather than stacked on top of each other -- dunno if I'm doing something wrong or if there is a bug in the posted scad. ended up hacking together two stls in sketchup to get what I wanted so I'm good, but wanted check w/ you. thanks again for this great library of work!
Not so much of a mistake as a 'feature'. Yes, the idler and pulley base overlap. The top edge of the pulley base has a curve on it, and acts as an idler/belt guide if the teeth diameter is smaller than the base diameter. You only need the idler if the tooth diameter is bigger than the base (or you don't want a base at all), which gets rid of the curve, as it assumes you want to print it the other way up, where the curved edge could be an overhang problem. There is a commented out line further down the scad to flip the pulley over if you need a big pulley with a small base, to aid printing. I could finesse this area a bit, I suppose!
Thanks for sharing the picture of your pulley. The belt fit looks good, that's the most important thing.
i just print a MXL 18 t pulley AMAZING...your job is fantastic!!
Picture, or it didn't happen!
I just found a website that had a ton of timing belt pulley CAD models, I just staeted downloading them. Now I don't have too! This is great! Thank you for sharing!
Thanks for the thanks, everyone. If there are other profiles that you would like added, send me a message. I also have a version, if anyone is interested, that uses bezier functions from WilliamAAdams to draw the tooth curves, but it's possible to go a bit mad with the number of vertices!
I'd love to see that - with modern firmware such as Marlin and the latest Sprinter (which I prefer) you have lookahead so the amount of segments only makes things better because it doesn't slow down for each segment.
I find that at that size, a square-tooth profile works best for all belt types, because of printer tolerances and because there's always a very slight pause between segments, even when printing from an SD card. The teeth come out pretty rounded anyway.
That's why I simplified the curves to straight line segments. However, on the larger tooth profiles, especially HTD, a curved ramp into and out of the tooth is really important for clearance and fit. Our printers may not be capable of the resolution for the smaller pulleys at the moment, and I agree that FDM-style printers give a rounded outer corner already, but if these pulleys are printed on a powder bed, laser sintering or DLP/resin type printer, better tooth fit can be achieved. People with these printers might benefit from a higher resolution model; with a bezier curve version, they can choose the level of detail.
I have been printing HTD 5mm and the fit is perfect!
Awesome! Can you add a picture to the 'I made one' section?
Wow . . looks like I have some printing and experimenting to do with these! Nice work man
Wow - a work of art!
Thanks guys, hope everything is well with you, the family and the business!
Yikes... Very well done!
thanks very much!!
wow, epic!

now to see if anyone has a printer that can actually print a 2mm pitch pulley!
My parametric printrbot variant includes a pulley that works with GT2 (2mm pitch) and MXL (2.032mm pitch) belts. They print and work great with a .4mm nozzle. thingiverse.com/thing:14208
i.imgur.com/8UDUG.jpg 2mm pitch, 14mm dia, 22 teeth, meshes perfectly with mxl belt :)
Top