Author Topic: CNC Routing of PCBs  (Read 3837 times)

TomWS

  • Global Moderator
  • Hero Member
  • *****
  • Posts: 1853
CNC Routing of PCBs
« on: March 29, 2015, 05:34:49 PM »
Inspired by luisr320's using his CNC router to make a PCB (see https://lowpowerlab.com/forum/index.php/topic,943.msg6076.html#msg6076), I decided to give it a try with my home build CNC router that I made primarily for woodworking.  Since making my router, I've found more and more interesting applications, including V-grooving panelized PCBs so that I could break them apart easily.

I thought it would be useful for 'quickturn' prototype projects and was not expecting to do any high density PCBs with this device.  Still, the resolution of my router is 1mil and the accuracy isn't too far off so I thought it was possible to use it for this application.

Armed with the pcb-gcode.ulp program added to my Eagle setup, I created two simple designs.  The first is an LCD breakout board I needed for an LCD display with 1.8mm pitch pins so that I could fan out those pins to a standard 0.100" header.  The Eagle design looks like this:


As you can see it's pretty simple, but also very useful.

The next design is a PCB for a Moteino based Electric Power Monitor.  This monitors 4 channels of clip-on AC Current probes and reports RMS AmpSeconds every 10 minutes.  I only need two or three of them and was originally just going to go the perf-board route, but, again, Luis reminded me that I should give the CNC 'route' a try.  Here is the PCB for the Power Monitor:


It is also a simple, one layer design, but I did find that I needed to modify the component library to get this to work on the router.

I was pretty sure from the outset that I would need heavier traces than I would normally use and in this case had selected 50mil traces to start.  What I hadn't planned on was that I'd also need bigger pads for all of the components.  Part of this was due the fact that I can't drill holes as small as most PCB houses - I might be able to do a couple, but not a boardful without breaking drill bits.  So, with the idea that I would have 40 mil holes, I learned that the normal sized pads quickly disappeared after routing.

I also had to make a couple of passes to tweak the parameters for the pcb-gcode.ulp program to get a reliable and good PCB on my router.  Fortunately the program is easily modified and, in the end, only took two full passes to get a useful set of boards.

Here are the resulting PCBs:
Being Routed (held down with my vacuum chuck):


Breakout Board:


Power Monitor PCB:


I'll be posting this project with schematics and code separately.

I can provide details on the parameters I used if anyone is interested.

Tom

ColinR

  • Full Member
  • ***
  • Posts: 176
Re: CNC Routing of PCBs
« Reply #1 on: March 29, 2015, 09:15:12 PM »
Neat. Makes me want to cnc my mill.
CuPID Controls :: Open Source browser-based sensor and device control
Interfaceinnovations.org/cupidcontrols.html
cupidcontrols.com

wile1411

  • Jr. Member
  • **
  • Posts: 53
  • Country: au
Re: CNC Routing of PCBs
« Reply #2 on: April 10, 2015, 01:42:35 AM »
is there more the read elsewhere about your Moteino based Electric Power Monitor?

TomWS

  • Global Moderator
  • Hero Member
  • *****
  • Posts: 1853
Re: CNC Routing of PCBs
« Reply #3 on: April 10, 2015, 02:02:28 AM »
is there more the read elsewhere about your Moteino based Electric Power Monitor?
Not yet, but I'll be posting schematics and code in a couple of days.
Tom

luisr320

  • Full Member
  • ***
  • Posts: 227
  • Country: pt
Re: CNC Routing of PCBs
« Reply #4 on: April 10, 2015, 04:12:48 AM »
Very nicely done. Please forward your settings for the pcb-gcode.
What type of bit are your using?

TomWS

  • Global Moderator
  • Hero Member
  • *****
  • Posts: 1853
Re: CNC Routing of PCBs
« Reply #5 on: April 10, 2015, 05:02:11 PM »
Very nicely done. Please forward your settings for the pcb-gcode.
What type of bit are your using?
The bit was a 45degree, 2 flute sprial engraving bit from PreciseBits: EM2E8-0625-45V (http://www.precisebits.com/products/carbidebits/scoreengrave.asp)
They have a new bit that looks very interesting but it's not in production yet: EM3E8-0071-15V (http://www.precisebits.com/products/carbidebits/tapered_stub_125.asp) that supposedly leaves no burr on the copper.

Key parm was probably just checking the Single Pass Isolation check box, but here are the rest of the parms:
From pcb-defaults.h:
Code: [Select]
//
// Default values for generating gcode from a PCB.
//
// These settings were last changed with pcb-gcode-setup: 3/21/2015 6:00:51 PM
//
//
// Changes you make in this file will be overwritten if you use pcb-gcode-setup.
//

int SINGLE_PASS = YES;
real ISO_MIN = 0.001000;
real ISO_MAX = 0.020000;
real ISO_STEP = 0.010000;

int GENERATE_TOP_OUTLINES = YES;
int GENERATE_TOP_DRILL = NO;
int GENERATE_TOP_FILL = NO;
int GENERATE_TOP_STENCIL = NO;

int GENERATE_BOTTOM_OUTLINES = YES;
int GENERATE_BOTTOM_DRILL = YES;
int GENERATE_BOTTOM_FILL = NO;
int GENERATE_BOTTOM_STENCIL = NO;

int MIRROR_BOTTOM = NO;
int SIMPLE_DRILL_CODE = NO;

int GENERATE_MILLING = YES;
int CLIMB_MILLING = YES;

int GENERATE_TEXT = NO;

int SPOT_DRILL = YES;
real SPOT_DRILL_DEPTH = -0.020000;

int DO_TOOL_CHANGE_WITH_ZERO_STEP = NO;

int FLIP_BOARD_IN_Y = NO;

//int OUTPUT_UNITS = U_MICRONS;
//int OUTPUT_UNITS = U_MILLIMETERS;
//int OUTPUT_UNITS = U_MILS;
int OUTPUT_UNITS = U_INCHES;
string NC_OPERATOR_MESSAGE = "";
int PREVIEW_WINDOW_WIDTH = 1280;
int PREVIEW_WINDOW_HEIGHT = 900;

and from pcb-machine.h:
Code: [Select]
//
// For ease of use, and to avoid overwritting your settings,
// use pcb-gcode-setup to make changes to these settings.
//

real DEFAULT_Z_HIGH = 0.750000;
real DEFAULT_Z_UP = 0.100000;
real DEFAULT_Z_DOWN = -0.012000;
real DRILL_DEPTH = -0.020000;
real DRILL_DWELL = 1.000000;
real SPINDLE_ON_TIME = 1.000000;
real SPINDLE_ETCH_RPM = 24000.000000;
real SPINDLE_DRILL_RPM = 24000.000000;
real SPINDLE_MILL_RPM = 15000.000000;
real SPINDLE_TEXT_RPM = 25000.000000;
real SPINDLE_STENCIL_RPM = 24000.000000;
real MILLING_DEPTH = -0.025000;
real TEXT_DEPTH = -0.005000;
real TOOL_CHANGE_POS_X = 1.875000;
real TOOL_CHANGE_POS_Y = 12.000000;
real TOOL_CHANGE_POS_Z = 1.750000;
real FEED_RATE_ETCH_XY = 8.000000;
real FEED_RATE_ETCH_Z = 5.000000;
real FEED_RATE_DRILL_XY = 20.000000;
real FEED_RATE_DRILL_Z = 10.000000;
real FEED_RATE_MILL_XY = 6.000000;
real FEED_RATE_MILL_Z = 5.000000;
real FEED_RATE_TEXT_XY = 10.000000;
real FEED_RATE_TEXT_Z = 10.000000;
real FEED_RATE_STENCIL_XY = 22.000000;
real FEED_RATE_STENCIL_Z = 23.000000;
real STENCIL_TOOL_SIZE = 0.012000;
real TOOL_SIZE = 0.012000;
real X_OFFSET = 0.000000;
real Y_OFFSET = 0.000000;
real X_HOME = 0.000000;
real Y_HOME = 0.000000;
real EPSILON = 0.000100;
and finally using a P240 grit foam sanding pad to sand off the burrs.  The PCBs worked out very well (Thanks for 'inspiring' me to try it), however, I learned that I've gotten sloppy in my soldering technique due to solder masks.  Bare copper board is much less forgiving  :D

Tom