|
// NEMA 17 stepper mount |
|
// Ed Nisley KE4ZNU August 2011 |
|
// Tweaked & thinned 2017-10-09 |
|
|
|
//– Extrusion parameters |
|
|
|
ThreadThick = 0.25; |
|
ThreadWidth = 0.4; |
|
|
|
HoleWindage = 0.3; // enlarge hole dia by this amount |
|
|
|
function IntegerMultiple(Size,Unit) = Unit * ceil(Size / Unit); |
|
|
|
Protrusion = 0.1; // make holes look good and joints intersect properly |
|
|
|
//– Useful sizes |
|
|
|
inch = 25.4; |
|
|
|
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(4.0,ThreadThick); // for stiffness |
|
|
|
MountBoltDia = 3.0; |
|
|
|
StandThick = 3.0; // baseplate |
|
|
|
StrutThick = IntegerMultiple(3.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 = 2*StandBoltHead; |
|
|
|
StandBoltClear = (StandLength – UprightLength)/2; // flat around bolt head |
|
|
|
MotorRecess = StandWidth – MountThick; |
|
|
|
ShaftHeight = IntegerMultiple(StandThick + MountWidth/2,ThreadWidth); |
|
|
|
echo(str("Stand Base: ",StandLength," x ",StandWidth," x ",StandThick)); |
|
echo(str("Stand Bolt OC: ",StandBoltOC)); |
|
echo(str("Shaft Height:",ShaftHeight)); |
|
echo(str("Strut Thick: ",StrutThick)); |
|
|
|
//———————- |
|
// 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); |
|
} |
|
|
|
//———————- |
|
// Model |
|
|
|
module MotorMount() { |
|
|
|
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 (i=[-1,1]) // motor bolt holes |
|
for (j=[-1,1]) |
|
translate([i*NEMA17_BoltOC/2,j*NEMA17_BoltOC/2,-Protrusion]) |
|
PolyCyl(MountBoltDia,(MountThick + 2*Protrusion),6); |
|
for (j=[-1,1]) // cutouts over bolts |
|
translate([-Protrusion/2, |
|
j*((StandLength – StandBoltClear)/2 + Protrusion/2), |
|
StandWidth/2]) |
|
cube([(MountWidth + Protrusion), |
|
(StandBoltClear + Protrusion), |
|
(StandWidth + 2*Protrusion)],center=true); |
|
for (j=[-1,1]) // stand bolt holes |
|
translate([(MountWidth/2 – Protrusion),j*StandBoltOC/2,StandWidth/2]) |
|
rotate([0,90,0]) |
|
rotate(180/6) |
|
PolyCyl(Clear10_32,StandThick + 2*Protrusion,6); |
|
|
|
translate([0,-(UprightLength/2 – ThreadWidth/2),StandWidth/2]) |
|
rotate([90,180,0]) |
|
linear_extrude(ThreadWidth,convexity=10) |
|
text(text=str(ShaftHeight),size=6,spacing=1.20,font="Arial",halign="center",valign="center"); |
|
|
|
} |
|
|
|
} |
|
|
|
//———————- |
|
// Build it |
|
|
|
MotorMount(); |
|
|
|
|