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 surface of the board by probing it on several locations. The mill turns down until the tool hits the surface, closes an electrical circuit and then sends the Z-value to the bCNC. The probes are connected to the controller (A5 and ground on the Arduino). 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.