aus Metalab, dem offenen Zentrum für meta-disziplinäre Magier und technisch-kreative Enthusiasten.
Wechseln zu: Navigation, Suche


CNCs can facilitate in the creation of PCBS:

  • Manual etching and then using CNC to drill automatically.
  • Cutting out the board , to have round PCBs, or similar.
  • Automated isolation routing: From a PCB some surface parts are milled away, so that the connection copper area are left isolated.

Currently, all three steps are working on the [Geilomat].

A rather badly isloated and drilled PCB. One can get much better results.


Metaboard is a bash shell script, that will automatically create cnc-paths in the form of gcode files. The starting point is the eagle .brd file. It calls a couple of external programs:

  • Eagle: to output the gerber files of the top and bottom layer
  • eagle: to call an ulp-program "drillbernhard.ulp" that outputs the drilling and cutting paths.
  • Visolate: To create the isolation paths.
  • grecode To mirror the board for second side. (Grecode was created especially for metaboard.sh by --Bkubicek 09:55, 26. Jul. 2010 (CEST))

While these are called, a couple of windows will pop up and hopefully disappear again.

Possible issues:

  • Eagle sometimes stays on top: just close the opened .brd, and load your .brd again using the menu. If have no clue why this happens.
  • It might be necessary to have a parent project file in the same directory?


The workflow splits into the following points:

  • Preperation: create an eagle brd file, copy it
  • Metaboard.sh: create the gcode files for the geilomat
  • Setup: mount the board in the geilomat, insert a suitable mill head.
  • EMC-setup: home the machine, "touch off"/set coordinate system so milling will be on the actual board
  • Bottom layer:
    • drilling and cutting
    • Isolation-milling
  • Flipping the board, mounting it.
  • Top layer:
    • Loading the top layer debugging file.
    • Aligning: Rotate and shift the top layers using grecode, so that the board is aligned perfectly.
    • Isolate the top.

Create yourself a directory in ~/gcodes/ and copy your .brd file there. Then open up a shell window, move to the directory call

metaboard.sh yourboard.brd

If all goes well, you will obtain a lot of *.ngc files, that contain [Gcode] for the CNC process. Also, a tmp directory will be created, where there are even more files. The files in the original directoy are:

  • xxx_top.ngc: The top layer isloation paths.
  • xxx_bottom.ngc: The bottom layer isloation paths.
  • xxx_drillcuttop.ngc: The top layer drilling and cutting.
  • xxx_drillcutbottom.ngc: The bottom layer drilling and cutting.
  • xxx_debug.ngc: A file so you can view the content of all the other files at once, to check for errors, or measure coordinates..

Metaboard background info

The PCB have to be put on a plain-milled surface of at least 3 mm thickness, as we are drilling. The slightest bend (0.2 mm) in the PCB will probably move the "Gravierstichel" out of the plane where it would isolate. You need a 0.6 or 0.8 mm drill with a mounting diameter suitable for the Kress-"Spannzange", probably 3mm or 1/8 inch=3.1something.

We will create three ngc-files, one for the isolation, one for the drilling, and one for the final cutting. They will be glued together in one ngc file to align them graphically using Axis.

  • Prerequisites:
    • download Visolate
    • On Windows, that is
    • create a shortcut, respecting your paths, with the target ""C:\Program Files (x86)\Java\jre1.6.0_07\bin\java.exe" -Xmx1024000000 -jar C:\Users\bkubicek\Visolate.jar" and the working directory "C:/Users/bkubicek/Documents/eagle/LEDlampe/"
    • download and install [java3d]
    • save Datei:Drillbernhard.ulp.txt into your eagle/ulp directory without the .txt extension. Its an ugly hack of the next original ulp...
    • save Datei:Gcode.ulp.txt into your eagle/ulp directory without the .txt extension.
  • Create the Eagle board. Route only on Bottom Layer.
  • Output using the cam-processor, using the "GERBER_RS274" device, and only the layers "bottom","pads", "vias". Filename gerber_boardname.
  • Output using File->RUN->(ulp-directory)->drillbernhard.ulp . Layer "bottom", Mill and cut deaktivated, drill active,outputfile "drill_boardname.ngc"
  • Output using File->RUN->(ulp-directory)->gcode.ulp . Layer "bottom", Mill and drill deaktivated, cut active,outputfile "cut_boardname.ngc", other parameters are nearly irrelevant.
  • Then start Visolate, load the gerber file, make if full screen. press Fit. Fix Topology. Make toolpaths. Output file as "isolate_boardname.ngc"
  • Then comes the joining of the three ngc files: Create a new ngc file starting with
M8 ; turn on spindle ; adjust to your mill
G0 Z2.54 ; move up to 0.1 inch above
G0 X-0.24 Y-0.24   ;change this to align the drill holes with the the isolation path
;; end head

then add the content of isolate_boardname.ngc without the m5 m3 tail. The isolation has relative coordinates, so we have to set a proper starting location via the previous head. Also, moving to the assumed Z=0 position would already mill the board, so we have to change the first Z move. comment out the first move to Z-0.01 it could look something like this

G17 G40 G49 G80
G1 Z0.1
G0 X0.10814 Y0.28534
;G1 Z-0.1 ;; uncommented t
G1 X0.00392 Y0
;; end isolate

insert a commented line with an end program.

; G0 Z20 M2 ; program end to manual tool-change to drill

after the isolation we will insert the content of drill_boardname.ngc adjust the variables posdown to -2.1 posup to 1, feedown to 100,feedup to 200 after the cutting, create some blank lines and insert a section of cut_boardname.ngc, namely the part between (Start cutting wires) and (finished). This movements cut out the pcb from the surrounding. Maybe you have to invert all Y coordinates because of the mirroring

The complete file then should have some head, the isolation, the drilling and the cutting.

  • Open this ngc file in axis, and adjust the relative position of the drills to the isolation by the G0 X Y in the head, saving and reloading in axis.
  • after all is good, remove the commend right before the drilling, to have the the program stop there. Reload in axis. Insert a 30 Degree 0.1 or 0.2 mm "Gravierstichel", home the machine, touch off at a suitable location, and start the program.
  • If the isolation is not deep enough, touch off z in lower height, and restart.

Then Change to a 0.6 mm drill with a 3.12mm 1/8 inch holing diameter, touch of Z again, and re-insert the comment right before the drilling.

  • Reload in Axis, scroll to the line right before the drilling, right click->run from here.
  • do all the drilling and sidewards cutting.

  • if you really want things to be perfect, you could locate the most outwards line in the isolation, and move them deeper Z-0.1 ->Z-0.12 and the following relative up-movent as well Z0.1 ->Z0.12. By that, there will be no copper close to the cutting locations.