My PCB-Milling-Toolchain


PCB-milling is an interesting alternative to the traditional PCB-etching method, because it doesn’t involve chemicals and the mill can also be used to drill the holes an cut out the board. I think i t’s also faster (never did etching). On the downside, the process is not easy to handle and it’s hard to level the surface of the PCB precisely to get a consistant quality of the traces. I haven’t enough practise to tell how fast the tool wears out and how the costs add up compared to the traditional etching method. But I finally managed to get nice results from PCB-milling and like to share the setup with you by describing the toolchain I used. The tools are all open source, by the way:)

The Mill:
It’s a small but robust one I bought on ebay from a nice guy named Anton Schelkopf. With steppers (nema23) and milling motor (Kress 800 FME) it was about 650€. I’m very satisfied with it. The milling tool is a 0.8mm carbide spear drill. Here ist another interesting and affordable mill:


The Controller:
I use a self built controller shield on top of an Arduino Uno running GRBL, a solid firmware for CNC-Mills. It has three pololu A4988 motor drivers. I’ll have to make a proper case and connectors for it:) There are also some purchasable controllers out there, this one for instance:


Create PCB with Kicad:
I think Kicad is the most promising open software suite for making schematics and PCBs out there. It has quite a steep learning curve though. If you want it to be more easy, maybe Fritzing is the right tool for you.

Screenshot from 2014-11-25 19:16:32

FlatCam converts the gerber files to gcode:
I really like FlatCam for this purpose. It has an extensive functionality and nice workflow. I have some problems with saving the defaults and a few other quirks, but I think it’s just because it’s not mature yet (evolving fast).  The only open alternatives I found was the gcodetools-plugin for Inkscape and this browser app.

Screenshot from 2014-11-25 19:15:41

Send the gcode to the controller with bCNC:
I recently found this and it really filled the missing link I was looking for: Getting a really flat surface is one of the hardest task of pcb milling. One method to overcome this is called auto leveling, which is supported by bCNC (and GRBL since Version 0.9):

Screenshot from 2014-11-25 00:12:29

The next picture shows my mill scanning the height differences of the copper surface by probing it on several locations. The milling tool is connected to A5 on the arduino, the pcb goes to ground. One location is probed by moving the milling motor down until the tool touches the surface so that A5 and ground connect. The mill then stops and sends the current Z-value to bCNC. There is also video of the probing process
The sampled data is used to modify the Z-position of the mill on the fly (while sending the gcode to the mill) to compensate the height differences of the pcb surface.

Without auto leveling…

and with auto leveling – tadaa!


11 thoughts on “My PCB-Milling-Toolchain”

  1. Good post Frank.
    I’d like to link this page from the bCNC wiki. Could I use some of your pictures as reference for autoleveling?

  2. Hello
    I am working with a bCNC, but i am having problem to leveling and to put the zero point.
    So if you have a video tutorial.
    shoul apreciate.

  3. Hi
    Could you please outline the steps and procedure you’ve followed on doing your pcb autoleveling. I’ve tried doing it following the procedure from the bCNC wiki but the tool just strays way outside of the working area when I try running the Gcode after autoleveling.

    1. Hi,
      sorry but I’m currently moving to a new location and my mill isn’t at my new place yet. So I don’t want to tell you something I can not verify that it works and it’s been some time since I’ve done my last pcb. It’s important to zero your location after the probing proces though. When I get my mill in about two weeks, I’ll probably make a video of the probing proces since there seem to be quite some people having problems with the probing process. Good luck!

  4. Hi!

    Nice tutorial! Thanks!
    I hope your mill is online again after your move 🙂

    Mainly the Autoleveling is clear.
    My hint is how to create a “Probe-Plate offset”:
    I want to probe and autolevel a piece of wood. Because of this I need a metal-plate as “Ground”.
    This works fine for normal one-point-probing: I created a small macro behind a “User-button”. It starts a probing cycle and add the offset of my ground-plate automatically.
    So normal Zero-ing works perfect in that way with one button click 🙂

    But how can I give that Offset to Autolevelign mechanism? Over TLO?


Leave a Reply

Your email address will not be published. Required fields are marked *