Close
0%
0%

Process for DIY PCB with Carvera CNC

Process for making simple, double-sided circuit boards on a Carvera CNC. All the way from design, routing, soldermask to silk screen

Similar projects worth following

Introduction

I've always been intrigued by the possibility of making circuit boards at home. So when I got a CNC machine, one of the first things I wanted to try was fabricating custom-made circuit boards. I focused on creating a reliable process that can be easily followed and is almost guaranteed to produce same result over and over again.

Despite it being a DIY process, I was still interested in creating boards that are somewhat comparable to commercial ones, which meant having a soldermask, and (to some extent) silk screen. At the same time, I was not under the illusion that it will ever match what you can get from many online PCB fabrication places, but it's sufficient for most hobby applications.

This process shown here covers producing a double sided circuit board using Makera's Carvera CNC machine. It's desktop-size machine with work area of 36 * 24 cm, 200W spindle, accuracy in the range of <0.01mm and integrated 2.5W laser module. However, to some extent, this process can likely be applied to just about any CNC machine.


The process covers:

  • Drawing and exporting a PCB in KiCAD
  • Creating routing job using FlatCAM
  • Preparing a board cutout and align holes using MakeraCAM
  • Routing
  • Applying solder mask
  • Removing solder mask from pads
  • Flipping and aligning the board
  • Applying silk screen
  • Drilling holes for through-hole components
  • Creating stencil

Finally, I'd like to point out that there's not a lot of novelty in this process, it's a collection of different techniques made with inspiration from others seen online. There will be credits through the guide to different sources.

Limitations

So far, this process has been reliably test out on components as detailed as LQFP48/64 package. This means package size of 10x10mm and pads of ~1.2x0.25mm, spaced 0.5mm apart.

(source: https://www.ti.com/lit/ds/spms376e/spms376e.pdf, p.1404)

This was also used as an inspiration for design rules when making a PCB. Namely, minimum trace size of 0.2mm and clearance of 0.2mm.

Here's few of the examples made with this process:

This rest of this guide is going to follow a whole new board from scratch to the final result, shown in the last picture. See "Build instructions" section below.

Future improvements

Currently, my biggest problems with this process is the lack of plated holes to connect top and bottom copper layers, which requires them to be manually connected by soldering a component on both sides. If a component blocks access to pads on top copper, other shenanigans need to be employed like connecting the pads with a thin wire through the hole, before soldering the component, or stitching the top and bottom signal with a nearby via. In the future, I would like to incorporate rivets mentioned in this guide into this process to fix this problem.

Second thing that bothers me is the resolution of the silk-screen. It's rather chunky and I would like it to be thinner. I already tried adjusting the focus of a laser, but I'm not convinced that's the problem. Namely, just burning the same text into wood can be done at a much better resolution. My future improvements will also focus on that.

CANdlelight.mkc

MakeraCAM project

mkc - 976.88 kB - 03/04/2025 at 18:11

Download

Project_20250222_164758.FlatPrj

FlatCAM project

flatprj - 3.33 MB - 03/04/2025 at 18:09

Download

PCB Align plate v6.f3d

PCB Fixture

fusion - 225.75 kB - 03/04/2025 at 18:09

Download

  • 1
    KiCAD design + export

    When laying out a board in KiCAD, there's few tips to follow:

    • Minimum track width: 0.2mm
    • Minimum track clearance: 0.2mm
    • (optional) Don't do clearance to the board edge (source: https://forum.kicad.info/t/zone-to-board-edge-clearance/45386/4)
    • Place symmetrical align holes, for example a hole in every corner, exactly 3mm from the edge
    • Place board "Grid origin" and "Drill/Place File origin" points in the bottom left corner of the board
    • Take special care of through hole components! This PCB doesn't have plated holes and so the component needs to be soldered from both sides in order to link top and bottom layer. KiCAD will by default link signals or ground planes using a through hole component, in the same way it does with a via. However, some components might cover the top side, making it unavailable for soldering.

    For through-hole component that cover the soldering point on the top layer, it might be a good idea to route a "backup" track on the back layer, just in case it's not possible to solder them from the top, or only route on the back layer where you're sure to get good contact.

    Finally, before exporting, make sure to run design rule check to ensure no silly mistakes spoil the design later (e.g. silk screen placed on top of a copper pad).

    Export

    To export the files, navigate in KiCAD to Files -> Fabrication output -> Gerbers (.gbr) ...

    • Set output directory, e.g. "CAM"
    • Include layers: all copper, silk, mask and edge cuts
    • Under "General options", select "Use drill/place file origin"
    • Before export, it's a good idea to run design-rule check. This will provide feedback on any unconnected tracks, overlapping silkscreen etc that should be fixed
    • Finally, press "Plot" to export the files
    • Then, press "Generate Drill Files" to export drill patters and sizes
      • In the new window, make sure "Drill File Format" is "Excellon" and "Drill origin" is "Drill/place file origin"
      • Finally, press "Generate Drill File"
    • Close both dialogs
  • 2
    FlatCAM

    Isolation Routing

    To process exported files into a CNC job, we'll use FlatCAM. 

    • Start by importing F.CU layer
    • Double-click the layer and and select "Isolation Routing"
    • In the tools table, we'll set tool diameter to 0.19mm. This has to be lower than the "Minimum track clearance" setting in KiCAD to ensure correct routing. As a side note, I'm using 0.2mm V-bit for isolation routing. So the correct setting here would be 0.24mm instead. So in reality, all the pads and tracks will be 0.05mm undersized. I have tried this step with bit diameter as low as 0.1536mm for a 0.2mm bit, and the results were still satisfying.
    • To generate the CNC object from geometry, set V-Tip diameter 0.15mm for cutting depth of -0.0746mm. Spindle speed 15'000 rpm.

    Settings

    Copper clearing

    Usually, it's enough to just do isolation routing, but sometimes, there's the need for clearing copper areas. FlatCAM has NCC feature for that.

    This can be used to generate geometry and a following CNC job. In this example, I'm using a 0.5mm V-bit for clearing larger areas of copper.

    Back Isolation Routing

    Next, import back copper layer. Before generating geometry and job, the imported gerber object needs to be flipped in either X or Y axis. I prefer flip around Y axis.

    To do so, double-click imported gerber object, and press "Transformations" button from the side menu. From there, press "Flip on Y" from the "Mirror (Flip)" side menu. Using the 4 align/mount holes, confirm alignment between the front and back copper layer.

    Before back layer Y flip
    After back layer Y flip

    From here on, repeat the isolation routing and copper clearing steps in the same way as for the top layer.

    Export cnc jobs

    The above will result in 2 to 4 ".nc" files (isolation and copper clearing per copper layer), CNC job to run on the machine. To make this work with carvera's tool changer, a small tweak in ".nc" files is needed as outlined in the video here.

  • 3
    Fixture + Cutout

    To work with PCBs, I create a fixture that aligns on carvera bed using pins, and is fastened with 3 screws (file attached here). This fixture has also been milled so that its top face is flat. On the fixture, the bottom-left hole is placed at coordinates (5,5) from the anchor point 1, and it's where I'll have my bottom-left align hole for the PCB.

    I always start a PCB project by adding a raw PCB to the fixture, drilling the align holes and cutting the board to the correct size. To create CNC job for that part, I use MakerCAM. Import EdgeCuts and NPTH layers from KiCAD export into MakeraCAM. Select the align holes, and create "Vector Drilling" task for them, end depth of 10mm (to go through the board and create align holes in the fixture for later). Secondly, select the edge cut vector, and create "Vector Contour" job with end depth of 1.6mm. Both the holes and the cutout are made with 1/8" x 12mm single flute bit, in my case set as tool #1. Export both toolpaths together in a joint file, and import to Carvera controller.

    When running the job, set the offset from anchor point in controller such that the bottom left mount hole on the PCB aligns with the bottom left hole in the fixture. I always place that hole on PCB at coordinates (3,3) from origin and since the align hole on fixture is at (5,5), it gives an offset of (2,2).

    The PCB is secured to the fixture with double sided tape.

    Once the job is completed, clean up the dust chips from the board and leave it stuck to the fixture. Use the newly made holes and a 1/8" bit to test the alignment on at least 3 holes at the time. The holes might be a bit tight at this point, you can carefully widen them with a 45 deg chamfer bit in a hand drill.

View all 12 instructions

Enjoy this project?

Share

Discussions

Ryan O'Connor wrote 11/20/2025 at 18:02 point

Nice work! CNC-based PCB fabrication often brings registration and drill wander into sharper focus. On builds with tight geometry, we see small panel shifts turn into measurable annular ring loss. Did you measure any drill alignment variation after routing and flipping?

  Are you sure? yes | no

Vedran wrote 11/22/2025 at 11:18 point

Thanks! I can't say I did. I have confirmed purely visually that the alignment is good enough for my use case. It might be hard to see the scale, but the board in this example uses 0.3mm via with, i believe, 0.6mm annular ring. The hole seem to be as centered as my eye can see 😁

  Are you sure? yes | no

mtnrbq wrote 06/01/2025 at 22:02 point

Thanks for the effort putting this thorough project together. On the Kicad side, what were the settings you used for the through-hole pads, as I've had issues with insufficient copper remaining after drilling, any tips appreciated.

  Are you sure? yes | no

Vedran wrote 06/05/2025 at 12:55 point

I've left defaults that Kicad suggested. I could see that depending on the component, the pads could become a bit small - especially after drilling a hole. However, in my case it was a component footprint that was the problem. Did you have this problem on an imported or built-in component? I think an option could be to edit the footprint and make the pads larger.

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates