CNC 3018-Pro: LM6UU Linear-bearing Diamond Drag Bit Holder

The CNC 3018-Pro normally holds a small DC motor with a nicely cylindrical housing,so this was an easy adaptation of the MPCNC’s diamond drag bit holder:

CNC 3018-Pro - Diamond bit - overview
CNC 3018-Pro – Diamond bit – overview

The lip around the bottom part rests atop the tool clamp, with the spring reaction plate sized to clear the notch in the Z-axis stage.

The solid model looks about like you’d expect:

Diamond Scribe - Mount - solid model
Diamond Scribe – Mount – solid model

The New Thing compared to the MPCNC holder is wrapping LM6UU bearings around an actual 6 mm shaft, instead of using LM3UU bearings for the crappy diamond bit shank:

CNC 3018-Pro - Diamond bit - epoxy curing
CNC 3018-Pro – Diamond bit – epoxy curing

I cut the shank in two pieces, epoxied them into 3 mm holes drilled into the 6 mm shaft, then epoxied the knurled stop ring on the end. The ring is curing in the bench block to stay perpendicular to the 6 mm shaft.

The spring constant is 55 g/mm and it’s now set for 125 g preload:

CNC 3018-Pro - Diamond bit - force measurement
CNC 3018-Pro – Diamond bit – force measurement

A quick test says all the parts have begun flying in formation:

CNC 3018-Pro - Diamond bit - test CD
CNC 3018-Pro – Diamond bit – test CD

It’s definitely more rigid than the MPCNC!

The OpenSCAD source code as a GitHub Gist:

// Diamond Scribe in linear bearings for CNC3018
// Ed Nisley KE4ZNU - 2019-08-9
Layout = "Build"; // [Build, Show, Base, Mount, Plate]
/* [Hidden] */
ThreadThick = 0.25; // [0.20, 0.25]
ThreadWidth = 0.40; // [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
// Knife holder & suchlike
ScribeOD = 3.0; // diamond scribe shaft
Bearing = [6.0,12.0,19.0]; // linear bearing body, ID = shaft diameter
Spring = [4.5,5.5,3*ThreadThick]; // compression spring around shaft, LENGTH = socket depth
//Spring = [9.5,10.0,3*ThreadThick]; // compression spring around shaft, LENGTH = socket depth
WallThick = 4.0; // minimum thickness / width
Screw = [3.0,6.75,25.0]; // holding it all together, OD = washer
Insert = [3.0,5.0,8.0]; // brass insert
//Insert = [4.0,6.0,10.0];
Clamp = [43.2,44.0,34.0]; // tool clamp ring, OD = clearance around top
LipHeight = IntegerMultiple(2.0,ThreadThick); // above clamp for retaining
BottomExtension = 25.0; // below clamp to reach workpiece
MountOAL = LipHeight + Clamp[LENGTH] + BottomExtension; // total mount length
echo(str("Mount OAL: ",MountOAL));
Plate = [1.5*ScribeOD,Clamp[ID] - 0*2*WallThick,WallThick]; // spring reaction plate
NumScrews = 3;
ScrewBCD = Bearing[OD] + Insert[OD] + 2*WallThick;
echo(str("Retainer max OD: ",ScrewBCD - Screw[OD]));
NumSides = 9*4; // cylinder facets (multiple of 3 for lathe trimming)
// Basic mount shape
module CNC3018Base() {
translate([0,0,MountOAL - LipHeight])
cylinder(d=Clamp[OD],h=LipHeight,$fn=NumSides);
translate([0,0,MountOAL - LipHeight - Clamp[LENGTH] - Protrusion])
cylinder(d=Clamp[ID],h=(Clamp[LENGTH] + 2*Protrusion),$fn=NumSides);
cylinder(d1=Bearing[OD] + 2*WallThick,d2=Clamp[ID],h=BottomExtension + Protrusion,$fn=NumSides);
}
// Mount with holes & c
module Mount() {
difference() {
CNC3018Base();
translate([0,0,-Protrusion]) // bearing
PolyCyl(Bearing[OD],2*MountOAL,NumSides);
for (i=[0:NumScrews - 1]) // clamp screws
rotate(i*360/NumScrews)
translate([ScrewBCD/2,0,MountOAL - Clamp[LENGTH]])
rotate(180/8)
PolyCyl(Insert[OD],Clamp[LENGTH] + Protrusion,8);
}
}
module SpringPlate() {
difference() {
cylinder(d=Plate[OD],h=Plate[LENGTH],$fn=NumSides);
translate([0,0,-Protrusion])
PolyCyl(Plate[ID],2*MountOAL,NumSides);
translate([0,0,Plate[LENGTH] - Spring[LENGTH]]) // spring retainer
PolyCyl(Spring[OD],Spring[LENGTH] + Protrusion,NumSides);
for (i=[0:NumScrews - 1]) // clamp screws
rotate(i*360/NumScrews)
translate([ScrewBCD/2,0,-Protrusion])
rotate(180/8)
PolyCyl(Screw[ID],2*MountOAL,8);
}
}
//-----
// Build it
if (Layout == "Base")
CNC3018Base();
if (Layout == "Mount")
Mount();
if (Layout == "Plate")
SpringPlate();
if (Layout == "Show") {
Mount();
translate([0,0,1.25*MountOAL])
rotate([180,0,0])
SpringPlate();
}
if (Layout == "Build") {
translate([0,-0.75*Clamp[OD],MountOAL])
rotate([180,0,0])
Mount();
translate([0,0.75*Plate[OD],0])
SpringPlate();
}
view raw Diamond Scribe.scad hosted with ❤ by GitHub