Advertisements

Archive for September 6th, 2011

Stepper Dynamometer: Sync Wheel

This is a modification of that sync gadget to work on the prototype stepper dynamometer. The key differences:

  • The wheel has a notch rather than a flag
  • The opto switch mounts on a sturdy post

The wheel fits the shaft with a 4-40 setscrew to hold it in place. The post has 4-40 mounting holes for one of those optical switches, plus a big hole for the wiring. The solid models look about like you’d expect:

Wheel and post solid model

Wheel and post solid model

I located the post’s holes on the baseplate with a spindly pair of transfer punches, after transferring the wheel’s centerline by eyeballometric guesstimation:

Locating holes with transfer punches

Locating holes with transfer punches

Then aligned the baseplate on the Sherline, located the holes, and drilled ’em with manual CNC to get the proper spacing:

Drilling opto switch post holes

Drilling opto switch post holes

And then it went together quite smoothly:

Dyno with sync wheel

Dyno with sync wheel

What’s really nice about 3D printing is you can build stuff like this without too much fuss & bother: figure out the solid model, walk gingerly through the software minefield, and (usually) assemble the parts later that day.

A bit of wiring to power the LED and pull up the phototransistor should do the trick.

The OpenSCAD code, including a few tweaks that rationalize spacings and sizes and suchlike:

// Optical Interrupter for stepper dynamometer
// Suited for low speed demonstrations!
// Ed Nisley KE4ZNU August 2011

include </home/ed/Thing-O-Matic/lib/MCAD/units.scad>
include </home/ed/Thing-O-Matic/Useful Sizes.scad>

// Layout options

Layout = "Build";					// Build Show Wheel Switch

//- Extrusion parameters - must match reality!
//  Print with +2 shells and 3 solid layers

ThreadThick = 0.33;
ThreadWidth = 2.0 * ThreadThick;

HoleWindage = 0.3;

function IntegerMultiple(Size,Unit) = Unit * ceil(Size / Unit);

Protrusion = 0.1;

//- Wheel dimensions

ShaftDia = (3/8) * inch;
ShaftHeight = 27.39;					// from motor mount assembly

HubDia = IntegerMultiple(ShaftDia,ThreadWidth) + 15*ThreadWidth;
HubLength = IntegerMultiple(10.0,ThreadThick);		// total, not added to plate

SetScrewOffset = 2*Tap4_40;
SetScrewDia = Tap4_40;

WheelRadius = IntegerMultiple(24.0,ThreadWidth);
WheelThick = IntegerMultiple(1.5,ThreadThick);

CutoutAngle = (2/50)*360;
CutoutWidth = WheelRadius*tan(CutoutAngle);
CutoutDepth = 6.0;

echo(str("Wheel radius: ",WheelRadius," dia: ",2*WheelRadius," thick: ",WheelThick));
echo(str("Hub sidewall:",(HubDia - ShaftDia)/2));
echo(str("Cutout width: ",CutoutWidth," angle: ",CutoutAngle," depth: ",CutoutDepth));

//- Optical switch dimensions

OSBaseLength = (31/32) * inch;
OSBaseWidth = (1/4) * inch;
OSBaseThick = 0.100 * inch;

OSLeadSpace = 0.300 * inch;							// leads fit though this opening

OSHolesOC = (3/4) * inch;							// switch mounting holes
OSHoleDia = Tap4_40;

SwHeight = IntegerMultiple((ShaftHeight + OSBaseWidth),ThreadThick);
SwWidth = IntegerMultiple(OSBaseLength,ThreadWidth);
SwThick = IntegerMultiple(OSBaseWidth,ThreadWidth);

SwBaseWidth = 4*SwThick;							// pillar base width
SwBaseOC = IntegerMultiple(2.5*SwThick,1.0);		// base screw spacing

echo(str("Pillar height: ",SwHeight," width: ",SwWidth," thick: ",SwThick));
echo(str("       base screws: ",SwBaseOC," OC"));

//----------------------
// 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);

}

module Sector(OutR,InR,Thick,Angle) {

  difference() {
	cylinder(r=OutR,h=Thick);
	cylinder(r=InR,h=Thick);

	rotate([0,0,CutoutAngle/2])
	  translate([0,OutR,Thick/2])
		cube([OutR*2,OutR*2,Thick],center=true);
	rotate([0,0,-CutoutAngle/2])
	  translate([0,-OutR,Thick/2])
		cube([OutR*2,OutR*2,Thick],center=true);
  }
}

//-- Interrupter Wheel

module Wheel() {

  difference() {
	union() {
	  cylinder(r=WheelRadius,h=WheelThick);			// base plate
	  cylinder(r=HubDia/2,h=HubLength);				// hub
	}

	translate([0,0,-Protrusion])						// shaft hole
	  PolyCyl(ShaftDia,(HubLength + 2*Protrusion));

	translate([0,0,(HubLength - SetScrewOffset)])
	  rotate([0,270,0])
		PolyCyl(SetScrewDia,HubDia);

	translate([0,0,-Protrusion])						// sector cutout
	  Sector((WheelRadius + Protrusion),
			(WheelRadius - CutoutDepth),
			(WheelThick + 2*Protrusion),
			CutoutAngle);
  }

}

//-- Optical Switch Mount

module SwitchMount() {

  difference() {
	union() {											// mounting pillar
	  translate([0,0,SwHeight/2])
		cube([SwThick,SwWidth,SwHeight],center=true);
	  translate([0,0,SwThick/2])
		cube([SwBaseWidth,SwWidth,SwThick],center=true);
	}

	translate([0,0,ShaftHeight]) {
	  translate([-(SwThick/2 + Protrusion),0,0])		// lead clearance slot
		rotate([0,90,0])
		  scale([(OSBaseWidth/OSLeadSpace),1,1])
			PolyCyl(OSLeadSpace,(SwThick + 2*Protrusion));

	  for (y=[-1,1])									// switch screws
		translate([0,(y*OSHolesOC/2),0])
		  rotate([0,90,0])
			cylinder(r=Tap4_40/2,h=(SwThick + 2*Protrusion),center=true,$fn=6);
	}

	for (x=[-1,1])										// base screws
	  translate([(x*SwBaseOC/2),0,-Protrusion])
		rotate([0,0,(x-1)*90])							// get points outward
		  PolyCyl(Clear4_40,(SwThick + 2*Protrusion));
  }

}

//-------------------
// Build it!

ShowPegGrid();

if (Layout == "Build") {
  translate([0,WheelRadius,0])
	Wheel();
  translate([0,-SwWidth,0])
	SwitchMount();
}

if (Layout == "Wheel")
  Wheel();

if (Layout == "Switch")
  SwitchMount();

if (Layout == "Show") {
  translate([0,WheelThick/2,ShaftHeight])
	rotate([90,0,0])
	  Wheel();
  translate([(WheelRadius + OSBaseThick + SwThick/2),0,0])
	SwitchMount();
}

The sizes differ slightly from the photos, but you’d never see the difference.

Advertisements

, ,

Leave a comment