The Smell of Molten Projects in the Morning

Ed Nisley's Blog: Shop notes, electronics, firmware, machinery, 3D printing, laser cuttery, and curiosities. Contents: 100% human thinking, 0% AI slop.

NEMA 17 Stepper Motor Mount

This mount will hold a NEMA 17 stepper firmly in place so I can attach things to the shaft:

NEMA 17 Mount on build plate
NEMA 17 Mount on build plate

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:

NEMA 17 Stepper Mount - solid model
NEMA 17 Stepper Mount – solid model

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();
}

Comments

12 responses to “NEMA 17 Stepper Motor Mount”

  1. George Martin Avatar

    Is this part stiff enough to use directly in the system?

    1. Ed Avatar

      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.

  2. George Martin Avatar

    Sort of like an engine block stiffens the F1 cars.
    You mechanical guys are nuts. wink, wink, nod, nod

  3. Stepper Dynamometer Mechanics « The Smell of Molten Projects in the Morning Avatar

    […] two of those mounts with one of those couplers, add two NEMA 17 steppers (the one on the right is that one), slide a […]

  4. OpenSCAD vs. Skeinforge 40: Bogus G-Code « The Smell of Molten Projects in the Morning Avatar

    […] first pass at the NEMA 17 motor mount bracket used additive modeling, glomming together several blocks made from cube […]

  5. John Abella (@johnabella) Avatar

    Ed – I’m blatantly misusing your mount here: http://www.thingiverse.com/thing:12403 – works great, btw.

    1. Ed Avatar

      blatantly misusing your mount here

      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.

  6. […] the motor mounts and […]

  7. […] now I’m designing some rather mundane stepper motor mounts.  They’re inspired by Ed’s designs, but I’ve written the code myself.  I’ll post the code on Thingiverse once I’ve […]

  8. zenwebb Avatar
    zenwebb

    Where can we download the “units.scad” file referenced?

    1. Ed Avatar

      download the “units.scad”

      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.

  9. […] used Ed’s NEMA 17 stepper motor mounts with some slight changes, and screwed them directly into the edges of some plywood I had […]