Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
OpenSCAD source code: NEMA17 stepper mount with matching bearing mount
// Ball bearing mount
// Ed Nisley KE4ZNU 2017-10-09
//-- Extrusion parameters
ThreadThick = 0.20;
ThreadWidth = 0.40;
HoleWindage = 0.2; // 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;
// Bearing sizes
ID = 0;
OD = 1;
LENGTH = 2;
Bearing = [8.0,22.0,7.0];
ShaftHeight = IntegerMultiple(25.2,ThreadWidth); // arbitrary or copied from motor mount
WallThick = 3.0;
//-- Mount Sizes
MountSize = Bearing[OD] + 2*WallThick;
BaseThick = max(WallThick,ShaftHeight - MountSize/2); // baseplate
StandBoltHead = IntegerMultiple(Head10_32,2); // bolt head rounded up
StandBoltClear = 1.25 * StandBoltHead;
StandBoltOC = IntegerMultiple(MountSize + StandBoltClear,2);
StandLength = StandBoltOC + StandBoltClear;
StandThick = StandBoltClear + WallThick;
StandHeight = MountSize + BaseThick;
Cutout = (StandLength - MountSize)/2;
echo(str("Stand Base: ",StandLength," x ",StandThick," x ",BaseThick));
echo(str("Stand Bolt OC: ",StandBoltOC));
echo(str("Shaft Height:",ShaftHeight));
//----------------------
// 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);
}
//----------------------
// Put it together
module BearingMount() {
difference() {
translate([BaseThick/2,0,StandThick/2])
cube([StandHeight,StandLength,StandThick],center=true);
translate([0,0,-Protrusion])
PolyCyl(Bearing[OD],(StandThick + 2*Protrusion));
for (j=[-1,1]) // cutouts over bolts
translate([-(StandHeight/2 - ShaftHeight + WallThick),
j*(StandLength/2 - Cutout/2 + Protrusion/2),
(WallThick + StandThick/2)])
cube([StandHeight,
Cutout + Protrusion,
StandThick],center=true);
for (j=[-1,1]) // stand bolt holes - base
translate([(MountSize/2 - Protrusion),
j*StandBoltOC/2,
WallThick + StandBoltClear/2])
rotate([0,90,0])
rotate(180/6)
PolyCyl(Clear10_32,BaseThick + 2*Protrusion,6);
for (j=[-1,1]) // stand bolt holes - back
translate([0,j*StandBoltOC/2,-Protrusion])
rotate(180/6)
PolyCyl(Clear10_32,StandThick + 2*Protrusion,6);
translate([0,-(MountSize/2 - ThreadWidth/2),(StandThick - WallThick)/2 + WallThick])
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
BearingMount();
// 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();
@ednisley

This comment has been minimized.

Copy link
Owner Author

commented Oct 10, 2017

More details on my blog at http://wp.me/poZKh-76D

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.