This mount will hold a NEMA 17 stepper firmly in place so I can attach things to the shaft:
The baseplate holes fit 10-32 screws, which work in the plastic sheet that will go below this thing, and the motor mount plate holes fits 3 mm bolts for the motors. Washers under the heads, of course. Build with three additional shells, three solid layers, and 0.25 fill for useful rigidity; the flanges came out completely solid.
Somewhat to my surprise, this didn’t show any signs of delamination due to the rather low 190 °C extrusion temperature. The flanges aren’t all that massive, though, so perhaps trouble still lies await.
The OpenSCAD solid model uses subtractive construction, for reasons that I’ll go into later:
The OpenSCAD source code:
// NEMA 17 stepper mount for dynamometer // Ed Nisley KE4ZNU August 2011 include </home/ed/Thing-O-Matic/lib/MCAD/units.scad> //-- Layout Control Layout = "Build"; // Build Show //-- Extrusion parameters ThreadThick = 0.33; ThreadWT = 2.0; ThreadWidth = ThreadThick * ThreadWT; HoleWindage = 0.3; // enlarge hole dia by this amount function IntegerMultiple(Size,Unit) = Unit * ceil(Size / Unit); //-- Useful sizes Tap10_32 = 0.159 * inch; Clear10_32 = 0.190 * inch; Head10_32 = 0.373 * inch; Head10_32Thick = 0.110 * inch; Nut10_32Dia = 0.433 * inch; Nut10_32Thick = 0.130 * inch; NEMA17_ShaftDia = 5.0; NEMA17_ShaftLength = 24.0; NEMA17_PilotDia = 0.866 * inch; NEMA17_PilotLength = 0.080 * inch; NEMA17_BCD = 1.725 * inch; NEMA17_BoltDia = 3.5; NEMA17_BoltOC = 1.220 * inch; //-- Mount Sizes MountWidth = IntegerMultiple(NEMA17_BCD,ThreadWidth); // use BCD for motor clearance MountThick = IntegerMultiple(8.0,ThreadThick); // for stiffness MountBoltDia = 3.0; StandThick = IntegerMultiple(5.0,ThreadWidth); // baseplate StrutThick = IntegerMultiple(4.0,ThreadWidth); // sides holding motor mount UprightLength = MountWidth + 2*StrutThick; StandBoltHead = IntegerMultiple(Head10_32,5); // bolt head rounded up StandBoltOC = IntegerMultiple(UprightLength + 2*StandBoltHead,5); StandLength = StandBoltOC + 2*StandBoltHead; StandWidth = IntegerMultiple(2*StandBoltHead,ThreadThick); StandBoltClear = (StandLength - UprightLength)/2; // flat around bolt head MotorRecess = StandWidth - MountThick; echo(str("Stand Base: ",StandLength," x ",StandWidth," x ",StandThick)); echo(str("Stand Bolt OC: ",StandBoltOC)); echo(str("Strut Thick: ",StrutThick)); //-- Convenience values Protrusion = 0.1; // make holes look good and joints intersect properly BuildOffset = 3 * ThreadWidth; //---------------------- // Useful routines module PolyCyl(Dia,Height,ForceSides=0) { // based on nophead's polyholes Sides = (ForceSides != 0) ? ForceSides : (ceil(Dia) + 2); FixDia = Dia / cos(180/Sides); cylinder(r=(FixDia + HoleWindage)/2, h=Height, $fn=Sides); } module ShowPegGrid(Space = 10.0,Size = 1.0) { Range = floor(50 / Space); for (x=[-Range:Range]) for (y=[-Range:Range]) translate([x*Space,y*Space,Size/2]) %cube(Size,center=true); } //---------------------- // Combined stand and mounting plate module Combined() { difference() { translate([StandThick/2,0,StandWidth/2]) cube([(MountWidth + StandThick),StandLength,StandWidth],center=true); translate([-Protrusion/2,0,StandWidth - (MotorRecess - Protrusion)/2]) cube([(MountWidth + Protrusion),MountWidth,(MotorRecess + Protrusion)],center=true); translate([0,0,-Protrusion]) // pilot hole PolyCyl(NEMA17_PilotDia,(MountThick + 2*Protrusion)); for (x=[-1,1]) // motor bolt holes for (y=[-1,1]) translate([x*NEMA17_BoltOC/2,y*NEMA17_BoltOC/2,-Protrusion]) PolyCyl(MountBoltDia,(MountThick + 2*Protrusion)); for (y=[-1,1]) // cutouts over bolts translate([-Protrusion/2, y*((StandLength - StandBoltClear)/2 + Protrusion), StandWidth/2]) cube([(MountWidth + Protrusion), (StandBoltClear + Protrusion), (StandWidth + 2*Protrusion)],center=true); for (y=[-1,1]) // stand bolt holes translate([(MountWidth/2 - Protrusion),y*StandBoltOC/2,StandWidth/2]) rotate([0,90,0]) PolyCyl(Clear10_32,StandThick + 2*Protrusion,8); } } //---------------------- // Lash everything together ShowPegGrid(); if (Layout == "Build") { translate([0,0,0]) Combined(); } if (Layout == "Show") { translate([-StandWidth/2,0,(StandThick + MountWidth/2)]) rotate([0,90,0]) Combined(); }
Is this part stiff enough to use directly in the system?
For my purposes, yes indeed!
Two of ’em will turn into a simpleminded dynamometer, so it’s pure torque loading. The face of the motor stiffens the plate between the uprights very nicely.
I think it’d have trouble with axial loads and I wouldn’t want to run it with a pulley imposing much of a radial load, but for pure torque, it’ll do fine.
Sort of like an engine block stiffens the F1 cars.
You mechanical guys are nuts. wink, wink, nod, nod
Ed – I’m blatantly misusing your mount here: http://www.thingiverse.com/thing:12403 – works great, btw.
Oh, I don’t know, it seems happy enough… you can’t be treating it all that badly!
That’s a neat gadget; I like the combination of tech foundation and artsy results.
Where can we download the “units.scad” file referenced?
It’s part of the MCAD library collection that’s now included with OpenSCAD, although apparently only in the source distribution down near the bottom of http://www.openscad.org, not the precompiled binaries. The original version is at github.com/D1plo1d/MCAD.