-
MPCNC Drag Knife: LM12UU Linear Bearing
The anodized body of the drag knife on the left measures exactly 12.0 mm OD:
Which happy fact suggested I might be able to use a standard LM12UU linear bearing, despite the obvious stupidity of running an aluminum “shaft” in a steel-ball bearing race:
The 12 mm section extends about halfway through the bearing, with barely 3 mm extending out the far end:
Because the knife body isn’t touching the bearing for the lower half of its length, it’ll probably deflect too much in the XY plane, but it’s simple enough to try out.
As before, the knife body’s flange is a snug fit in the hole bored in the upper disk:
This time, I tried faking stripper bolts by filling the threads of ordinary socket head cap screws with epoxy:
Turning the filled section to match the thread OD showed this just wasn’t going to work at all, so I turned the gunked section of the threads down to about 3.5 mm and continued the mission:
Next time, I’ll try mounting the disk on telescoping brass tubing nested around the screws. The motivation for the epoxy nonsense came from the discovery that real stainless steel stripper bolts run five bucks each, which means I’m just not stocking up on the things.
It slide surprisingly well on the cut-down screws, though:
Those appliqué templates came from patterns for a block in one of Mary’s current quilting projects, so perhaps I can be of some use whenever she next needs intricate cutouts.
The OpenSCAD source code as a GitHub Gist:
This file contains hidden or 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// Drag Knife Holder using LM12UU linear bearing // Ed Nisley KE4ZNU – 2019-04-26 Layout = "Show"; // [Build, Show, Puck, Mount, Plate] /* [Extrusion] */ ThreadThick = 0.25; // [0.20, 0.25] ThreadWidth = 0.40; // [0.40] /* [Hidden] */ Protrusion = 0.1; // [0.01, 0.1] HoleWindage = 0.2; inch = 25.4; function IntegerMultiple(Size,Unit) = Unit * ceil(Size / Unit); ID = 0; OD = 1; LENGTH = 2; //- Adjust hole diameter to make the size come out right 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); } //- Dimensions // Basic shape of DW660 snout fitting into the holder // Lip goes upward to lock into MPCNC mount Snout = [44.6,50.0,9.6]; // LENGTH = ID height Lip = 4.0; // height of lip at end of snout // Knife holder & suchlike KnifeBody = [12.0,15.9,2.0]; // flange epoxied to top of diamond shaft, with epoxy fillet WallThick = 4.0; // minimum thickness / width Screw = [4.0,8.5,8.0]; // holding it all together, OD = washer Insert = [4.0,6.0,10.0]; // brass insert Bearing = [12.0,21.0,30.0]; // linear bearing body Plate = [KnifeBody[ID],Snout[OD] – WallThick,KnifeBody[LENGTH] + WallThick]; // spring reaction plate PlateGuide = [4.0,4.8,Plate[LENGTH]]; // … guide tubes PuckOAL = max(Bearing[LENGTH],(Snout[LENGTH] + Lip)); // total height of DW660 fitting echo(str("PuckOAL: ",PuckOAL)); Key = [Snout[ID],25.7,(Snout[LENGTH] + Lip)]; // rectangular key NumScrews = 3; ScrewBCD = 2.0*(Bearing[OD]/2 + Insert[OD]/2 + WallThick); NumSides = 9*4; // cylinder facets (multiple of 3 for lathe trimming) module DW660Puck() { translate([0,0,PuckOAL]) rotate([180,0,0]) { cylinder(d=Snout[OD],h=Lip/2,$fn=NumSides); translate([0,0,Lip/2]) cylinder(d1=Snout[OD],d2=Snout[ID],h=Lip/2,$fn=NumSides); cylinder(d=Snout[ID],h=PuckOAL,$fn=NumSides); intersection() { translate([0,0,0*Lip + Key.z/2]) cube(Key,center=true); cylinder(d=Snout[OD],h=Lip + Key.z,$fn=NumSides); } } } module MountBase() { difference() { DW660Puck(); translate([0,0,-Protrusion]) // bearing PolyCyl(Bearing[OD],2*PuckOAL,NumSides); for (i=[0:NumScrews – 1]) // clamp screws rotate(i*360/NumScrews) translate([ScrewBCD/2,0,-Protrusion]) rotate(180/8) PolyCyl(Insert[OD],2*PuckOAL,8); } } module SpringPlate() { difference() { cylinder(d=Plate[OD],h=Plate[LENGTH],$fn=NumSides); translate([0,0,-Protrusion]) // knife holder body PolyCyl(KnifeBody[ID],2*PuckOAL,NumSides); translate([0,0,Plate[LENGTH] – KnifeBody[LENGTH]]) // flange, snug fit PolyCyl(KnifeBody[OD],KnifeBody[LENGTH] + Protrusion,NumSides); for (i=[0:NumScrews – 1]) // clamp screws rotate(i*360/NumScrews) translate([ScrewBCD/2,0,-Protrusion]) rotate(180/8) PolyCyl(PlateGuide[OD],2*PuckOAL,8); } } //—– // Build it if (Layout == "Puck") DW660Puck(); if (Layout == "Plate") SpringPlate(); if (Layout == "Mount") MountBase(); if (Layout == "Show") { MountBase(); translate([0,0,1.6*PuckOAL]) rotate([180,0,0]) SpringPlate(); } if (Layout == "Build") { translate([0,Snout[OD]/2,PuckOAL]) rotate([180,0,0]) MountBase(); translate([0,-Snout[OD]/2,0]) SpringPlate(); }






