This is a pretty good question considering all the other options that are available. Etching a circuit board is a pretty simple process by comparison and the results are almost always good if you're using a fresh batch of etching solution and did a halfway decent job of transferring the design to the board. There's also the option of using one of the many fab houses such as OSH Park, Fusion by Seeed Studio, or DKRed. They offer pretty fast turn times and extremely high quality results at fair prices. And let's not forget that soldering onto a proto-board is always an option for circuits that are being used for testing.
With all this in mind, why go through the trouble of milling a circuit board? I'm starting to wonder that myself, actually.
All jokes aside, to me there are a couple good reasons to mill a board instead of using one of the other options. So let's start answering some of the questions from the bottom up. The reason I would choose not to create the circuit on a proto-board is related to its complexity. Sometimes it's much more difficult to solder all the components properly if the circuit contains more than a handful of parts. It can be done, but with each part added you run the risk of making a mistake which, at best, could prevent the circuit from working properly and at worst, destroy components. This doesn't mean it's not a viable option, but I do take this into account when deciding if I'll mill a board or not. That being said, I would use proto-board to create a prototype if my circuit was not too complicated.
Secondly, using a board fabrication service is extremely convenient and the results typically speak for themselves. The only problem that you will run into with these services is turn time. If you can afford it, you could pay the extra money for rapid turn times and expedited shipping, but this can get very expensive. Usually if you're prototyping, this is not really a good option. There are cheap options available as well, but these options come with long waits. Typically around 2 weeks. By then, chances are very good I'll either forget what in the world I was doing or have moved on to something else. I tend to save this option for production boards. In order to make sure that I keep on going with the project, I will almost always skip this option and move to the next best thing. That brings me to option number three; Etching a circuit board in house.
Etching a circuit board is not a complicated task. It requires only a couple easy to find ingredients to create a good etching solution and some pretty simple methods to put an etch mask down on the board. There's quite a few different ways to etch a board and they all come out with very similar results which I've documented here. It's also extremely quick. It can be done in a matter of 1-2 hours if you are fast and don't require any kind of solder mask. The only problem with this method is that you are always left with chemicals that need to be disposed of properly. Ferric Chloride shouldn't just be poured down the drain and even if you are using less volatile alternatives, like cupric chloride, you still have to consider how to dispose of the chemicals. Still, I might choose this option if the prototype requires very fine traces or trace widths, but for the most part I would opt to use a milling machine for everything that doesn't meet the above criteria.
With that out of the way, let's move on to discussing how to go about milling a circuit board.
You'll need a few things before you begin milling a circuit board. Most importantly, you're going to need a mill. I'm currently using a Genmitsu 3018-pro that I purchased on Amazon for less than $200 at the time of writing this. Secondly, you'll need a decent v-bit for routing traces. I use a 30 degree 0.2mm bit, but there are other options available and I've also heard decent results can be accomplished with a 0.5mm end-mill.
Software to create g-code and communicate with the mill is also going to be required here. I personally use FlatCAM and Universal G-code Sender, both of which are free to use. The reason I've selected these is because they both operate on a Linux system. I'm currently using a Chromebook as my primary machine and it can run Linux as a virtual machine which is why I selected these, but there are alternatives available. You will also need to create a circuit board for milling, which I'm assuming you already know how to do if you're reading about this. I use KiCad for the circuit board creation and I've got a few helpful tips on available if you're just getting started with it.
Some other useful things to have around would be decent cutting fluid (Tap Magic) which prolongs the life of your fragile bits, and a vacuum cleaner because this thing gets dusty. You may also want to invest in an enclosure if you're running this machine in your house as it's not recommended to breathe in the dust created by milling circuit boards.
The substrate of the circuit board is also going to come into play here. FR-4 is a common type of substrate for these copper clad boards, but the fiberglass resin is very tough on your milling bits. If you can find it, you should choose an FR-1 type board, which is more like a plastic/cardboard material. It's much easier on your tools and will save you some money on replacement bits.
That sums up the requirements, now lets move on to the setup.
Before hopping into the milling process there are a few things that need to be setup properly in KiCad before exporting the Gerber files to ensure the required results are met.
KiCad contains options for design rules checks and we will need to make sure that we do not violate any of these rules before we export for milling. Traces need to be kept at or above 0.5mm, though finer traces can be created, the finer the trace the more difficult the milling process. Proper spacing between traces and drill hits will also need to be met to ensure the pads and parallel traces are not destroyed during milling. This is all simple to setup in our design rules dialog available within KiCad.
Let's discuss these settings here.
**Author: Please create an instructional video demonstrating the export of gerber files and settings selected**
You will need a level surface to mill your board on if you want consistent results. The easiest way to do this is to grab a piece of MDF from a local hardware store and mill it flat. Then you can use that for your spoil board and mill the circuit right on top of it. Other things to keep in mind are proper work hold-down. If the work-piece is vibrating too much it will cause issues. Over-sized clamps or multiple hold-downs are preferable while milling. I usually create a pocket for the clad board to sit into on the MDF to help with alignment.
A properly hardened v-bit will also greatly increase the likelihood of success during your milling operation. Don't purchase the cheapest bits you find on the internet as you will encounter issues with cheaper bits breaking tips, even at very low feed rates and modest cut depths. I experience the best results with v-groove bits like these ones sold on the Genmitsu website. But any hardened bit will likely do the trick. Just keep in mind that the longer the cutting operation, the more likely you will begin to wear down or chip a bit. This can cause cut depth issues that will appear in the finished product. Using proper cutting oil will really increase the life of your tool. I've used motor oils and 3-in-1 oil before, but they never work as well as oils that have been formulated specifically for cutting. My go to oil is tap magic. You'll find options for 0.1mm tip V-bits, but I would recommend using 0.2mm bits as the 0.1mm bits chip easily. Just make sure your design rules checks are set so the trace spacing on your board can accommodate these values.
A leveled piece is what makes the difference when creating a finely milled circuit board. The more samples that are taken when calculating the surface of the work-piece, the better the results will be. This is however quite a time consuming process. You will need to decide how much time you are willing to wait before the board can even begin being milled.
Below are my usual settings when auto-leveling in Universal G-code Sender. The Z retract is kept at a low value only if the resolution is high. This ensures that the tip of the bit does not glide into the work-piece as it is moving between points during probing. If you choose to use a higher number for the resolution, keep in mind that you will likely need to use a higher Z retract as well to avoid hitting the board during moves.
Resolution: 1.6
Z Retract: 12% (keeps the probe moving fast and is safe because there are so many points being probed it likely won't crash into the work-piece)
Re-zero probe after auto-level
It is extremely important to keep in mind that inside the auto-level dialog box there is a checkbox available for "Apply to Gcode". If this box is selected DO NOT export the gcode, import the newly leveled code, and run the operation with the checkbox still checked. This will double apply your auto-level calculations and cause your cutting depths to be extremely deep, almost undoubtedly destroying the tip of your tool in the process.
I've found that the best way to mill a board is by setting up a rough pass, then finishing with a cleanup pass. I set my projects to mm for ease of use.
**AUTHOR: Create a video showing the use of FlatCAM to generate a rough pass, followed by the generation of a cleanup pass**
These are the settings I've found to be the most useful.
**AUTHOR: Post screenshots of settings here and list the details below**
Tool Diameter: 0.4mm (using a 0.1mm v-bit but set to 0.4mm to move isolation pass farther from traces)
Passes: 2
Pass Overlap: 0.6 (60%)
Cut z: -0.094mm
Travel: 0.3mm
Feed: 80mm/min
Tool Diameter: 0.1mm (this is set to a different diameter than above for a reason) **AUTHOR: discuss the reasoning**
Spindle Speed : 400 (this is a percent from 0-1000 as genmitsu mill has no way of assigning RPM, using 20000RPM motor)
Multi-Depth Step: 0.033mm
Same as above, changes cut z: -0.1mm
Same as above, changes Feed: 120, Multi-Depth Step: null, Spindle Speed: 450
Note: Make sure to re-zero your probe before the clean-up pass. Depending on the amount of cuts being made on your board, the bits can wear down between the roughing pass and the cleanup pass and a zero probe should be established before cutting. Also, export gcode from auto-level to the cleanup pass gcode before cutting begins.
A little something extra that adds a really nice touch to your board and will make it look more professional is to strip back the copper around the edges before milling the edge cuts. This will prevent jagged edges and the need for excessive sanding. If you export your gerber file with fills then it will mill around your edges with the bit you're using for creating the tracks, however, it's better to create a separate edge to be milled with an endmill instead. This will ensure that you get a proper setback distance from your edge cut. Setback the copper by ~1mm around the edges.
Cut z: -0.094mm
Feed: 80mm/min
Tool Diameter: 0.1mm
Passes: 4 (this might need to be adjusted depending on your tooling to meet the 1mm target)
Spindle Speed: 400 (40% MAX RPM)
Tool Diameter: 1.1mm (the tool diameter plus the end-mill diamter)
Do not forget to apply the same auto-level gcode to the edge stripping operation before milling begins.
Tool Diameter: 0.1mm
Passes: 1
Cut Z: -2.0mm
Travel Z: 0.3mm
Feed Rate: 140mm/min
Tool Diameter: 1.0mm
Spindle Speed: 500 (~10,000RPM)
Multi-Depth Steps: 0.5mm
*No Auto-Level data is required here
Cut Z: 2.0mm
Spindle Speed: 500
*No Auto-Level data is required here
**AUTHOR: Test piece pictured, please upload proper finished board before publishing**
If you ever encounter a freeze or your machine stops milling for any reason, like a lost connection, don't panic. Take note of the coordinates on UGS in the controller state dialog box, making sure to write down each number with all decimal points included and whether they are positive or negative. Be sure to write down the g-code step you are on as well. Disable the motors on your machine manually and disconnect from the GUI. Make sure your USB cable is plugged in fully if you are hardwired and attempt to reconnect to the machine. Once UGS has re-established communications with the mill, you can then re-enable the motors on the machine. From this point you will navigate to the Controller state dialog box and manually input the X, Y, and Z coordinates that you recorded earlier. You can click directly in the boxes that display the values to set them. Once this step is complete, navigate to the g-code dialog and scroll to the last step the machine received. Right click at this step and select "Run from here". Now you can just run the program as usual and the mill will pick up right where it left off like nothing ever happened.
After all this you should be able to create a usable milled circuit board that will work just fine for most applications. There are some additional steps that could be taken to improve the ease of soldering and component placement if you choose to do so. These steps can be found below.