After removing the AC motor from the sewing machine, I wondered if a NEMA 23 stepper motor would fit:

Huh. Who’d’a thunk it? That’s just too good to pass up…
Although you wouldn’t use PLA for the real motor mount, this was easy:

And the whole affair fits pretty much like you’d expect:

The NEMA 23 motor doesn’t have the same end profile as the AC motor and the adapter plate gets in the way of the pulley, but flipping the pulley end-for-end perfectly aligned the belt.
For whatever it’s worth, here’s how I removed the pressed-on gear from the shaft:

I’m pretty sure I have a little gear puller somewhere, but it’s not where I expected to find it, which means it could be anywhere.
Much to my astonishment, the shafts on both motors are exactly 1/4″ inch. I filed a flat on the shaft to avoid having the setscrew goober the poor thing.
A stepper isn’t the right hammer for this job, because it can’t possibly reach 8000 rpm, but it’ll be good enough to explore the parameter space and weed out the truly stupid mistakes. A brushless DC motor from halfway around the planet would fit in the same spot.
The OpenSCAD source code:
// NEMA 23 Stepper Mounting Plate // Ed Nisley - KE4ZNU - June 2014 Layout = "Build"; // Build Show //- Extrusion parameters must match reality! // Print with 4 shells and 3 solid layers ThreadThick = 0.20; ThreadWidth = 0.40; HoleWindage = 0.2; // extra clearance Protrusion = 0.1; // make holes end cleanly AlignPinOD = 1.70; // assembly alignment pins: filament dia inch = 25.4; function IntegerMultiple(Size,Unit) = Unit * ceil(Size / Unit); //---------------------- // Dimensions // Origin at bottom front corner of plate as mounted on machine // motor mounted on rear surface, so recess is on that side PlateThick = 4.0; // overall plate thickness SlotOffset = [10.0,13.0,0]; // center nearest origin, motor in X+,Y+ direction SlotSize = [8.0,25.0]; // diameter of mounting screw , overall end-to-end length CutoutOffset = [0.0,40.0,0]; // cutout around machine casting CutoutSize = [18.0,18.0]; MotorBase = 58.0; // square base plate side MotorHoleOC = 47.2; // hole center-to-center spacing MotorHoleOffset = MotorHoleOC/2; MotorHoleDia = 5.0; MotorBaseCornerRadius = (MotorBase - MotorHoleOC)/2; FlangeWidth = 20.0; // mounting flange MotorCenter = [(FlangeWidth + MotorBase/2),(MotorBase/2),0]; // XY of shaft centerline MotorShaftDia = 7.0; // allow some clearance HubDia = 38.5; // allow some clearance HubHeight = 1.8; //---------------------- // 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) { RangeX = floor(100 / Space); RangeY = floor(125 / Space); for (x=[-RangeX:RangeX]) for (y=[-RangeY:RangeY]) translate([x*Space,y*Space,Size/2]) %cube(Size,center=true); } //---------------------- // Build it! module BasePlate() { difference() { // cube([(MotorCenter[0] + MotorBase/2),MotorBase,PlateThick],center=false); linear_extrude(height = PlateThick) { hull() { translate([MotorBaseCornerRadius,MotorBaseCornerRadius]) circle(r=MotorBaseCornerRadius); translate([MotorBaseCornerRadius,MotorBase - MotorBaseCornerRadius]) circle(r=MotorBaseCornerRadius); translate([FlangeWidth + MotorBase - MotorBaseCornerRadius,MotorBase - MotorBaseCornerRadius]) circle(r=MotorBaseCornerRadius); translate([FlangeWidth + MotorBase - MotorBaseCornerRadius,MotorBaseCornerRadius]) circle(r=MotorBaseCornerRadius); } } translate(MotorCenter - [0,0,Protrusion]) { rotate(180/8) PolyCyl(MotorShaftDia,(PlateThick + 2*Protrusion),8); // shaft hole PolyCyl(HubDia,(HubHeight + Protrusion)); // hub recess for (x=[-1,1] , y=[-1,1]) { translate([x*MotorHoleOffset,y*MotorHoleOffset,0]) rotate(180/8) PolyCyl(MotorHoleDia,(PlateThick + 2*Protrusion),8); } } translate(SlotOffset - [0,0,Protrusion]) { // adjustment slot linear_extrude(height = (PlateThick + 2*Protrusion)) hull() { circle(d=SlotSize[0]); translate([0,(SlotSize[1] - SlotSize[0])]) circle(d=SlotSize[0]); } } translate(CutoutOffset - [Protrusion,0,Protrusion]) linear_extrude(height = (PlateThick + 2*Protrusion)) square(CutoutSize + [Protrusion,Protrusion]); } } ShowPegGrid(); if (Layout == "Show") { BasePlate(); } if (Layout == "Build") { translate([-(SlotOffset[0] + MotorBase/2),MotorBase/2,PlateThick]) rotate([180,0,0]) BasePlate(); }
Maybe I missed it, but what was wrong with the original motor? Or are you just that bored? :)
The AC motor turns in only one direction, so a stepper could raise the needle without going through a partial stitch. It would also provide precise speed regulation and where-am-I positioning without much effort. Alas, it was not to be…
Bored? Me? Don’t have time for that!