Advertisements

Posts Tagged 3018 CNC

CNC 3018-Pro: HD and CD Fixtures

I actually had this in mind when I laid out the hard drive and CD engraving fixtures:

CNC 3018-Pro - HD and CD fixtures
CNC 3018-Pro – HD and CD fixtures

The fixtures are centered at X±70.0 mm / Y=0.0 from the G54 workspace coordinate origin dead-center in the middle of the platform, with G55 centered on the HD fixture to the left and G56 on the CD fixture to the right.

So the engraving workflow amounts to homing the CNC 3018 when I turn it on, taping a platter in a fixture, selecting the corresponding WCS, loading a suitable G-Code file, and firing it off. It seems bCNC returns to G54 after completing the file, so verifying the WCS selection every time is Very Good Practice.

The friable lacquer coating on some CDs fills my world with glitter whenever I engrave a pattern on their label side. I didn’t plan on a dust shoe for this thing!

Advertisements

, ,

Leave a comment

GCMC Platter Engraving

Engraving Spirograph / Guilloché patterns on scrap CDs and hard drive platters now works better than ever:

Spirograph - 674203941 - preview
Spirograph – 674203941 – preview

After, that is, I realized:

  • Any Rotor will work, as long as it’s smaller than the Stator
  • You must pick pen offset L so the pattern never crosses the stator center point
  • L ≥ 1 is perfectly fine
  • You must scale the resulting pattern to fit the actual space on the disk

One of my final doodles showing how the variables relate to each other, although the Wikipedia article may be useful for the underlying math and other posts have more pix on various machines:

Spirograph Scaling doodles
Spirograph Scaling doodles

Cheat sheet:

  • Stator has tooth count (∝ radius) R
  • Rotor has tooth count (∝ radius) r
  • K = r/R, so if you normalize R=1, K=r
  • Pen offset L puts it at radius rL in the rotor

Picking a suitable rotor requires iterating with random choices until one fits:

  RotorTeeth = Stators[-1];
  n = 0;
  while (RotorTeeth >= floor(0.95 * StatorTeeth) || RotorTeeth < 5) {
    RotorTeeth = (XORshift() & 0x007f);       // this is why Stator can't have more than 127 teeth
    n++;
  }
  comment("Rotor: ",RotorTeeth," in ",n," iterations");

The 5% buffer on the high end ensures there will be an L keeping a hole in the middle of the pattern. Requiring at least five teeth on the low end just seems like a Good Idea.

Given the stator & rotor tooth counts, iterate on random L values until one works:

  n = 0;
  do {
    L = (to_float((XORshift() & 0x1f) + 1) / 32.0) * (1.0/K - 1.0);   // allow L > 1.0
    n++;
  } while (L >= (1.0/K - 1.0) || L < 0.01);
}
comment("Offset L: ", L," in ",n," iterations");

With L chosen to leave a hole in the middle of the pattern, then the pattern traced by the pen in the rotor is centered at 1.0 – K (the normalized Stator radius minus the normalized Rotor radius) and varies by ±LK (the offset times the normalized Rotor radius) on either side:

RotorMin = 1.0 - 2*K;
comment("Rotor Min: ",RotorMin);

BandCtr = 1.0 - K;                      // band center radius
BandMin = BandCtr - L*K;                //  ... min radius
BandMax = BandCtr + L*K;                //  ... max radius

BandAmpl = BandMax - BandCtr;

comment("Band Min: ",BandMin," Ctr: ",BandCtr," Max: ",BandMax);

Knowing that, rescaling the pattern to fit the disk limits goes like this:

FillPath = {};

foreach (Path; pt) {

  a = atan_xy(pt);                      // recover angle to point
  r = length(pt);                       //  ... radius to point

  br = (r - BandCtr) / BandAmpl;        // remove center bias, rescale to 1.0 amplitude
  dr = br * (OuterRad - MidRad);        // rescale to fill disk
  pr = dr + MidRad;                     // set at disk centerline

  x = pr * cos(a);                      // find new XY coords
  y = pr * sin(a);

  FillPath += {[x,y]};
}

comment("Path has ",count(FillPath)," points");

The final step prunes coordinates so close together as to produce no useful motion, which I define to be 0.2 mm:

PointList = {FillPath[0]};                // must include first point

lp = FillPath[0];
n = 0;

foreach (FillPath; pt) {
  if (length(pt - lp) <= Snuggly) {       // discard too-snuggly point
    n++;
  }
  else {
    PointList += {pt};                    // otherwise, add it to output
    lp = pt;
  }
}

PointList += {FillPath[-1]};                // ensure closure at last point

comment("Pruned ",n," points, ",count(PointList)," remaining");

The top of the resulting G-Code file contains all the various settings for debugging:

(Disk type: CD)
(Outer Diameter: 117.000mm)
(        Radius: 58.500mm)
(Inner Diameter: 38.000mm)
(        Radius: 19.000mm)
(Mid Diameter: 77.500mm)
(      Radius: 38.750mm)
(Legend Diameter: 30.000mm)
(         Radius: 15.000mm)
(PRNG seed: 674203941)
(Stator 8: 71)
(Rotor: 12 in 1 iterations)
(Dia ratio K: 0.169 1/K: 5.917)
(GCD: 1)
(Lobes: 71)
(Turns: 12)
(Offset L: 3.227 in 1 iterations)
(Rotor Min: 0.662)
(Band Min: 0.286 Ctr: 0.831 Max: 1.376)
(Path has 43201 points)
(Pruned 14235 points, 28968 remaining)

The GCMC source code as a GitHub Gist:

, ,

1 Comment

CNC 3018-Pro: Hard Drive Platter Fixture

A variation on the CD fixture produces a 3.5 inch hard drive platter fixture:

Platter Fixtures - Hard Drive on 3018
Platter Fixtures – Hard Drive on 3018

Which needed just a touch of milling for a snug fit around the platter:

CNC 3018-Pro - HD platter fixture - test fit
CNC 3018-Pro – HD platter fixture – test fit

Tape it down on the 3018’s platform, set XY=0 at the center, and It Just Works™:

CNC 3018-Pro - HD platter fixture - 70 g
CNC 3018-Pro – HD platter fixture – 70 g

The rather faint line shows engraving at -1.0 mm = 70 g downforce isn’t quite enough. Another test with the same pattern at -3.0 mm = 140 g came out better:

CNC 3018-Pro - HD platter fixture - 140 g
CNC 3018-Pro – HD platter fixture – 140 g

It’s in the same OpenSCAD file as the CD fixture, in the unlikely event you need one.

, , ,

3 Comments

CNC 3018-Pro: CD Fixture Probe Camera Target

Taping the CD fixture to the CNC 3018-Pro’s raised platform solves the repeatability problem by putting the CD at a fixed location relative to the machine’s Home coordinates. The next step puts the XY=0 coordinate origin at the exact center of the platter, so the pattern comes out exactly centered on the disc:

CNC 3018-Pro - CD fixture
CNC 3018-Pro – CD fixture

The fixture has a central boss:

Platter Fixtures - CD on 3018 - tape flange
Platter Fixtures – CD on 3018 – tape flange

The blue boss centers the CD’s hub hole, the red plateau supports the disc, and the white background lies 5 mm below the CD’s upper surface:

CNC 3018-Pro - CD holder target
CNC 3018-Pro – CD holder target

Yup, red and blue Sharpies FTW.

The bCNC probe camera image includes two faint cyan rings centered on the crosshair:

CNC 3018-Pro - bCNC probe camera - red-blue CD target
CNC 3018-Pro – bCNC probe camera – red-blue CD target

Set the diameter to 15 mm (or a bit less), center the outer ring on the hub hole = the border between blue & red, set XY=0, and it’s within maybe ±0.1 mm of the true center.

Done!

, ,

1 Comment

bCNC Probe Camera Calibration

I’m sure I’ll do this again some time …

Focus the camera at whatever distance needed to clear the longest tooling you’ll use or, at least, some convenient distance from the platform. You must touch off Z=0 at the surface before using bCNC’s probe camera alignment, because it will move the camera to the preset focus distance.

Align the camera’s optical axis perpendicular to the table by making it stare into a mirror flat on the platform, then tweaking the camera angles until the crosshair centers on the reflected lens image. This isn’t dead centered, but it’s pretty close:

CNC 3018-Pro - bCNC Probe Camera - collimation - detail
CNC 3018-Pro – bCNC Probe Camera – collimation – detail

The camera will be focused on the mirror, not the reflection, as you can tell by the in-focus crud on the mirror. Whenever you focus the lens, you’ll probably move the optical axis, so do the best you can with the fuzzy image.

You can adjust small misalignments with the Haircross (seems backwards to me) Offset values.

A cheap camera’s lens barrel may not be aligned with its optical axis, giving the lens a jaunty tilt when it’s correctly set up:

CNC 3018-Pro - Engraving - taped
CNC 3018-Pro – Engraving – taped

With the camera focus set correctly, calibrate the camera Offset from the tool (a.k.a. Spindle) axis:

  • Put a pointy tool at XY=0
  • Touch off Z=0 on a stack of masking tape
  • Put a dent in the tape with the bit
  • Move to the camera’s focused Z level
  • Make the dent more conspicuous with a Sharpie, as needed
  • Register the spindle location
  • Jog to center the crosshair on the dent
  • Register the camera location

Calibrate the Crosshair ring diameter thusly:

  • Put an object with a known size on the platform
  • Touch off Z=0 at its surface
  • Move to the camera’s focused Z level
  • Set the Crosshair diameter equal to the known object size
  • Adjust the Scale value to make the Crosshair overlay reality

For example, calibrating the diameter to 10 mm against a shop scale:

CNC 3018-Pro Probe Camera - scale factor - detail
CNC 3018-Pro Probe Camera – scale factor – detail

At 10 mm above the CD, setting the camera’s resolution to 11.5 pixel/mm:

CNC 3018-Pro - bCNC probe camera - settings
CNC 3018-Pro – bCNC probe camera – settings

Makes the outer circle exactly 15.0 mm in diameter to match the CD hub ring ID:

CNC 3018-Pro - bCNC probe camera - red-blue CD target
CNC 3018-Pro – bCNC probe camera – red-blue CD target

I doubt anybody can find the pixel/mm value from first principles, so you must work backwards from an object’s actual size.

, , ,

3 Comments

CNC 3018-Pro: Diamond Drag Engraving Test Disk

The smaller and more rigid CNC 3018-Pro should be able to engrave text faster than the larger and rather springy MPCNC, which could engrave text at about 50 mm/min. This test pattern pushes both cutting depth and engraving speed to absurd values:

Engraving Test Pattern - 2019-09-18
Engraving Test Pattern – 2019-09-18

Compile the GCMC source to generate G-Code, lash a CD / DVD to the platform (masking tape works fine), touch off the XY coordinates in the center, touch off Z=0 on the surface, then see what happens:

CNC 3018-Pro - Engraving test pattern - curved text
CNC 3018-Pro – Engraving test pattern – curved text

The “engraving depth” translates directly into the force applied to the diamond point, because the spring converts displacement into force. Knowing the Z depth, you can calculate or guesstimate the force.

Early results from the 3018 suggest it can engrave good-looking text about 20 times faster than the MPCNC:

CNC 3018-Pro - Engraving - speeds
CNC 3018-Pro – Engraving – speeds

You must trade off speed with accuracy on your very own machine, as your mileage will certainly differ!

The GCMC source code as a GitHub Gist:

, , ,

2 Comments

CNC 3018-Pro: DRV8825 Drivers at the Edge of Madness

Having previously concluded running the CNC 3018-Pro steppers from 12 V would let the DRV8825 chips provide better current control in Fast Decay mode at reasonable speeds, I wondered what effect a 24 V supply would have at absurdly high speeds with the driver in 1:8 microstep mode to reduce the IRQ rate.

So, in what follows, the DRV8825 chip runs in 1:8 microstep mode with Fast Decay current control. You must apply some hardware hackage to the CAMTool V 3.3 board on the CNC 3018-Pro to use those modes.

In all the scope pix, horizontal sync comes from the DRV8825 Home pulse in the top trace, with the current in the two windings of the X axis motor in the lower traces at 1 A/div. Because only the X axis is moving, the actual axis speed matches the programmed feed rate.

Homework: figure out the equivalent two-axis-moving speed.

The 12 V motor supply works well at 140 mm/min, with Fast Decay mode producing clean microstep current levels and transitions:

3018 X - Fast - 12V - 140mm-min 1A-div
3018 X – Fast – 12V – 140mm-min 1A-div

The sine waves deteriorate into triangles around 1400 mm/min, suggesting this is about as fast as you’d want to go with a 12 V supply:

3018 X - Fast - 12V - 1400mm-min 1A-div
3018 X – Fast – 12V – 1400mm-min 1A-div

Although the axis can reach 3000 mm/min, it’s obviously running well beyond its limits:

3018 X - Fast - 12V - 3000mm-min 1A-div
3018 X – Fast – 12V – 3000mm-min 1A-div

The back EMF fights the 12 V supply to a standstill during most of the waveform, leaving only brief 500 mA peaks, so there’s no torque worth mentioning and terrible position control.

Increasing the supply to 24 V, still with 1:8 microstepping and Fast Decay …

At a nose-pickin’ slow 14 mm/min, Fast Decay mode looks rough, albeit with no missteps:

3018 X - Fast - 24V - 14mm-min 1A-div
3018 X – Fast – 24V – 14mm-min 1A-div

At 140 mm/min, things look about the same:

3018 X - Fast - 24V - 140mm-min 1A-div
3018 X – Fast – 24V – 140mm-min 1A-div

For completeness, a detailed look at the PWM current control waveforms at 140 mm/min:

3018 X - Fast detail - 24V - 140mm-min 1A-div
3018 X – Fast detail – 24V – 140mm-min 1A-div

The dead-flat microstep in the middle trace happens when the current should be zero, which is comforting.

At 1400 mm/min, where the 12 V waveforms look triangular, the 24 V supply has enough mojo to control the current, with increasing roughness and slight undershoots after the zero crossings:

3018 X - Fast - 24V - 1400mm-min 1A-div
3018 X – Fast – 24V – 1400mm-min 1A-div

At 2000 mm/min, the DRV8825 is obviously starting to have trouble regulating the current against the increasing back EMF:

3018 X - Fast - 24V - 2000mm-min 1A-div
3018 X – Fast – 24V – 2000mm-min 1A-div

At 2500 mm/min, the back EMF is taking control away from the DRV8825:

3018 X - Fast - 24V - 2500mm-min 1A-div
3018 X – Fast – 24V – 2500mm-min 1A-div

The waveforms take on a distinct triangularity at 2700 mm/min:

3018 X - Fast - 24V - 2700mm-min 1A-div
3018 X – Fast – 24V – 2700mm-min 1A-div

They’re fully triangular at 3000 mm/min:

3018 X - Fast - 24V - 3000mm-min 1A-div
3018 X – Fast – 24V – 3000mm-min 1A-div

In round numbers, you’d expect twice the voltage to give you twice the speed for a given amount of triangularity, because the current rate-of-change varies directly with the net voltage. I love it when stuff works out!

At that pace, the X axis carrier traverses the 300 mm gantry in 6 s, which is downright peppy compared to the default settings.

Bottom lines: the CNC 3018-Pro arrives with a 24 V supply that’s too high for the DRV8825 drivers in Mixed Decay mode and the CAMTool V3.3 board’s hardwired 1:32 microstep mode limits the maximum axis speed. Correcting those gives you 3000 mm/min rapids with good-looking current waveforms.

I’m reasonably sure engraving plastic and metal disks at 3000 mm/min is a Bad Idea™, but having some headroom seems desirable.

, ,

Leave a comment