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:)
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: http://www.shapeoko.com/
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: https://github.com/synthetos/grblShield
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.
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.
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):
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.