Created
October 10, 2017 11:28
-
-
Save ednisley/604e4742d96f34d66f7ce21e50343254 to your computer and use it in GitHub Desktop.
OpenSCAD source code: NEMA17 stepper mount with matching bearing mount
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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(); | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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(); | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
More details on my blog at http://wp.me/poZKh-76D