← How-Tos
cnc 1 hr ago ◯ 7 min read

CNC Milling Double-Sided PCBs: Registration, Alignment Pins, and Through-Hole Basics

pcb millingcncdouble-sided pcbregistrationthrough-holevias

<p>Milling a single-sided PCB on a desktop CNC router is a well-trodden path — this site's guide to milling PCBs with FlatCAM covers isolation routing on one copper layer in detail. Double-sided boards are a different problem entirely, because now the top and bottom copper patterns, and every via and through-hole drilled between them, all have to line up to within a few thousandths of an inch, on a machine with no camera alignment system and a workholding setup that has to survive being flipped over mid-job. This guide covers the registration methods, workflow, and through-hole basics that make double-sided milling repeatable on a hobby-class router like the Wolfpawn 4040 Pro.</p>

<h2>Why Double-Sided Milling Is Harder Than It Looks</h2> <p>A single-sided isolation-routed board only needs the tool to follow a toolpath accurately — there's nothing to align to. A double-sided board needs the second side's toolpath to land on the same physical XY coordinates as the first side's, but mirrored, after the board has been physically removed from the spoilboard, flipped along its long axis, and re-clamped. Any error in that flip — even a fraction of a millimeter — shows up as pads that don't line up with their via, or worse, a milled trace that cuts through a via meant to connect the two layers. The entire workflow below exists to make that flip repeatable.</p>

<h2>Registration Methods, Compared</h2> <table> <tr><th>Method</th><th>How It Works</th><th>Accuracy</th><th>Best For</th></tr> <tr><td>Dowel pin / tooling pin registration</td><td>Drill two registration holes through the blank on side one; press dowel pins into matching holes in a fixture plate; flip the board around the pins for side two</td><td>Excellent (±0.05mm achievable)</td><td>Repeat production runs, anyone milling more than a handful of double-sided boards</td></tr> <tr><td>Edge-referenced flip (fence/stop blocks)</td><td>Clamp the blank against two fixed stop blocks on the spoilboard; flip the board over the same edge and re-seat against the stops</td><td>Good if the blank's edges are square and consistent</td><td>One-off boards, no dedicated fixture plate available</td></tr> <tr><td>Tape-and-glue with fiducial drilling</td><td>Drill small fiducial holes at two corners on side one; use them visually or with dowels to re-align on side two</td><td>Moderate — depends on drilling and re-seating precision</td><td>Simple boards where a small misalignment on non-critical traces is tolerable</td></tr> <tr><td>Vacuum table with registration pins built in</td><td>Combines vacuum hold-down with fixed alignment pins in the table itself</td><td>Excellent, and fast to flip</td><td>Shops doing PCB milling regularly enough to justify the fixture</td></tr> </table> <p>For anyone doing this more than once, dowel pin registration is worth the setup time. Drill two holes (commonly 1/8" or 3mm) well outside the actual board outline — in sacrificial tabs on the blank, or in a surrounding fixture frame if your blank is smaller than the tooling holes need — using the same machine, in the same setup, before you do anything else. Because the holes are drilled by the same spindle that will later mill the copper, any small machine backlash or belt stretch is baked into both operations identically, which is exactly what registration is trying to achieve.</p>

<h2>Workflow: From Gerbers to a Registered Double-Sided Board</h2> <ol> <li><strong>Generate top and bottom copper Gerbers from your CAD tool</strong> (KiCad's plot function exports <code>F.Cu</code> and <code>B.Cu</code> separately). Confirm which layer is which before going further — it's easy to mirror the wrong side and end up milling a board that's electrically backwards.</li> <li><strong>Import both layers into FlatCAM or your CAM tool of choice</strong> and generate isolation toolpaths for each, exactly as you would for a single-sided board. Keep the two jobs as separate G-code files.</li> <li><strong>Mirror the bottom-layer toolpath</strong> around the Y-axis (or X, depending on how you'll physically flip the board) so that when the physical board is flipped, the toolpath lines up with where the copper actually is. Most CAM tools have a built-in mirror function for exactly this — do not attempt to mirror the Gerber file itself and re-run isolation routing, since trace width and offset calculations can behave unpredictably on a mirrored import in some tools.</li> <li><strong>Drill registration holes first, on the machine, before milling any copper</strong> — through the blank, in the tooling-hole locations decided in your CAM layout. This is the step that makes everything downstream repeatable.</li> <li><strong>Set machine work zero using the registration holes</strong>, not an arbitrary corner of the stock. If your fixture plate has fixed dowel pins, this step is effectively automatic — work zero is wherever the pins put the board.</li> <li><strong>Mill the top copper layer</strong>, then drill all through-holes and vias in the same setup, before removing the board. Drilling through-holes while the board is still registered to the machine — rather than after flipping — means both the top-layer copper and the hole positions came from the same zero reference.</li> <li><strong>Flip the board over the dowel pins (or your chosen registration method)</strong> and mill the bottom copper layer using the mirrored toolpath.</li> <li><strong>Check registration under magnification before cutting the board free</strong> from any remaining tabs. Look specifically at a few vias and pads that appear on both layers — if they're centered on each other, the flip worked; if they're offset consistently in one direction, that's a fixture or zero-point error you can often correct in software for the next board rather than a random error.</li> </ol>

<h2>Through-Hole and Via Basics for a Milled Board</h2> <p>Desktop CNC-milled boards don't get the electroplated through-hole barrels a fab house provides — the hole itself doesn't conduct anything by default, so every via and through-hole component needs a way to actually connect the two copper layers:</p> <ul> <li><strong>Wire-through vias:</strong> The simplest approach — drill the via, thread a short piece of bare wire (or a component lead) through it, and solder on both sides. This is the standard method for hobby double-sided milled boards and is completely reliable if done carefully; it just means vias have to be large enough to physically thread wire through, which pushes minimum via size up compared to a fab-house board.</li> <li><strong>Via rivets:</strong> Small conductive eyelets pressed into the hole and soldered on both sides — sold specifically for hobby double-sided PCB work, and give a cleaner and more mechanically robust connection than bare wire for boards that will be handled or flexed.</li> <li><strong>Conductive via paint/ink:</strong> Exists as a product but is generally less reliable than a mechanical connection for anything carrying real current — reserve it for low-current signal vias where a wire or rivet genuinely won't fit.</li> <li><strong>Through-hole component leads as vias:</strong> Where a via would land right where you're placing a through-hole resistor, header, or connector anyway, just let the component's own lead do double duty as the layer-to-layer connection — solder it on both sides. This is a common and legitimate way to reduce the total number of dedicated vias needed.</li> </ul> <p>Because manual via population is real assembly labor, it's worth designing double-sided milled boards with the fewest vias that make sense rather than routing exactly as you would for a fab-house board — favor keeping related signals on one layer where possible, and treat crossing to the other layer as a deliberate decision rather than the router's default behavior.</p>

<h2>Drill Bit and Depth Considerations</h2> <p>Via and through-hole drilling on a CNC router uses much smaller bits than the isolation routing endmill — typically 0.6-1.0mm carbide PCB drills for vias and component leads, up to 0.8-1.3mm for header pins. These bits are fragile and snap easily if the spindle isn't running true or if Z-zero is off by even a small amount, driving the bit into the spoilboard at full plunge rate. Always use a sacrificial spoilboard layer under the actual PCB blank (a scrap of MDF or plywood specifically for drilling) so a slight depth overshoot damages the sacrificial layer instead of your machine's actual spoilboard or bed, and probe Z-zero directly on the copper surface for each new blank rather than reusing an old Z value.</p>

<h2>When to Send It Out Instead</h2> <p>Double-sided milling is genuinely useful for prototyping, one-offs, and boards where turnaround time matters more than density — but it has real limits. Fine-pitch SMD parts, tight trace spacing, or any board where you need plated through-holes for mechanical or high-current reasons (not just signal continuity) are better served by a fab house like JLCPCB, covered elsewhere on this site — the per-board cost for even small quantities is often lower than the labor and consumables spent hand-populating vias on a milled board once you factor in your own time.</p>

<p>Double-sided CNC milling rewards the same discipline as any precision machining task: register once, register consistently, and verify before you commit. A dowel-pinned fixture plate is a small upfront investment that turns "hope it lines up" into a repeatable process — and for anyone milling more than the occasional prototype, it pays for itself within a handful of boards.</p>