Advertisements

Archive for June 11th, 2011

Stepper Motor Sync Wheel

A need for pix of the current waveforms in a stepper motor produced a need to synchronize to the shaft rotation. Rather than cobble something up using random spare parts, I printed a wheel with a tab:

Final rotation sync disk

Final rotation sync disk

The model looks about like you’d expect:

Synch wheel solid model

Synch wheel solid model

Those stretched pentagonal holes give it a vaguely religious aspect, don’t they?

The tab is 2/50 of the circumference, so that the resulting pulse neatly brackets two consecutive groups of four full-step pulses. There’s no way to align the tab with the rotor position, so producing a good scope sync pulse becomes a simple matter of software.

The tab’s length and radial position corresponds to this carefully engineered bit of mayhem:

Optical interrupter on stepper isolator bushing

Optical interrupter on stepper isolator bushing

The shaft hole will be just slightly too small for the motor shaft, which is perfectly fine. Drill the hole to 5 mm using a #9 drill, working your way up from about #12 to keep the hole concentric.

Actually, that was the second version. The first was a quick-and-dirty disk with a tab, but it came out too floppy at only 1 mm thick and utterly boring:

Simple rotation sync disk

Simple rotation sync disk

But it served as the prototype to settle the tab dimensions and location:

First synch disk with optical interrupter

First synch disk with optical interrupter

The OpenSCAD source:

// Optical Interrupter
// Suited for low speed demonstrations!
// Ed Nisley KE4ZNU June 2011

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

ThreadThick = 0.33;
ThreadWidth = 2.0 * ThreadThick;

//- Plate dimensions

MotorShaftDia = 5.0;
MotorShaftDiaSides = 8;
MotorShaftPolyRadius = (MotorShaftDia/2)/cos(180/MotorShaftDiaSides);

HubDia = MotorShaftDia + 16*ThreadWidth;
HubThick = ceil(10.0/ThreadThick)*ThreadThick;		// total, not added to plate
HubSides = 8;

BladeRadius = 31.5;				// to center of optical switch gap
BladeThick = 2*ThreadWidth;		// measured radially
BladeAngle = (2/50)*360;		// 50 repeats of 4 full step sequences per rev
BladeHeight = 7.0;				// beyond ribs

PlateRadius = BladeRadius + 5.0;
PlateThick = ceil(3.0/ThreadThick) * ThreadThick;

HoleCenterRad = (BladeRadius + HubDia/2)/2;
HoleDia = 0.75 * (3.14159 * 2 * HoleCenterRad)/HubSides;
HoleSides = 5;

//- Convenience items

Protrusion = 0.1;
$fn = 128;						// make large circles very smooth

//- Build it!

difference() {
  union() {
	cylinder(r=PlateRadius,h=PlateThick);			// base plate

	cylinder(r=HubDia/2,h=HubThick,$fn=HubSides);	// hub

	translate([0,0,PlateThick])						// blade
	  difference() {
		cylinder(r=BladeRadius+BladeThick/2,h=BladeHeight);
		cylinder(r=BladeRadius-BladeThick/2,h=BladeHeight + Protrusion);
		rotate([0,0,(180 - BladeAngle/2)])
		  translate([PlateRadius,0,(BladeHeight + Protrusion)/2])
			cube([PlateRadius*2,PlateRadius*2,BladeHeight+Protrusion],center=true);
		rotate([0,0,(BladeAngle/2)])
		  translate([PlateRadius,0,(BladeHeight + Protrusion)/2])
			cube([PlateRadius*2,PlateRadius*2,BladeHeight+Protrusion],center=true);
	  }

  }

  translate([0,0,-Protrusion])						// shaft hole
	cylinder(r=MotorShaftPolyRadius,
			 h=HubThick+2*Protrusion,
			 $fn=MotorShaftDiaSides);

  for (Angle = [0:(HubSides-1)])					// beautification holes
	rotate([0,0,Angle*(360/HubSides)])
	  translate([HoleCenterRad,0,-Protrusion])
		rotate([0,0,180])
		  scale([1.33,1.0,1.0])
			cylinder(r=HoleDia/2,
					 h=(PlateThick + 2*Protrusion),
					 $fn=HoleSides);

}

Yeah, that optical switch really is older than you are…

Advertisements

,

9 Comments