Multiple PCB project

I have been developing and maintaining commercial project in KiCad since 2016 and due to recent shortages in parts and some other parallel development we decided that the next iteration of the project will be split into the several PCB. I still want to retain the capability to have all of the daughter PCBs on the same master project. I know that the KiCad does not natively support this but let me try to explain my plan here and I’d like to have your input. Thanks in advance
I am aware that there are several topics covering basically the same problem that I have and I will list them on the bottom of this post.

The project consists out of 3 PCBs:

  1. Main MCU PCB (every product has one)
  2. Radio PCB (different versions of Radio PCBs will be developed)
  3. Battery PCB (not every product sold will have/need one)

These 3 PCBs schematics are spread over 8 or 9 schematic pages but Radio PCB and Battery PCB are kept on a separate page.

This is my strategy:

  1. Develop schematic pages
  2. For separate PCBs (Radio and Battery) create separate KiCad projects in same directory as main project and the rest of schematic pages
  3. Develop main PCB by deleting all components that are contained in Radio and Battery PCBs
  4. Develop daughter board PCBs from separate KiCad projects

We are numbering all components with page prefixes and annotating all components from the main page to avoid confusion. The different versions of the Radio board will have different page numbers.

This is my main project page:

Forum link with inspiration for this:

1 Like

I have not done much with KiCad V6 yet, but I think this workflow is broken now.

I’m not entirely sure why, but I think the issue is that values of schematic symbols are saved in the root sheet of a project now, (or there is some bug regarding the values of schematic symbols.

Quite a shame because i quite liked this workflow.

1 Like

Thanks for warning me about this. I tried to create separate projects in V6 (forgot to mention version in my original post) and it seems to open schematic just fine. I’ll try to create pcb and place result here.

1 Like

As the author of one of those references, and notwithstanding paulvdh's keen warning, this sounds reasonable. From memory, two of the major drawbacks with this workflow are:

  1. components from the wrong PCB have to be deleted.
  2. nets that cross PCBs will likely fail DRC.

Your “numbering all components with page prefixes” strategy is a great way of mitigating (1) and will allow all import automated (or at least mindless) deletion and checks. (2) can be mitigated with zero ohm links or the like, but you may have better ideas.

1 Like

Just to close the topic. I’ve come close to completing the project(s) as described in my original post and it seems to be working quite well. Apart of the obvious lack of support for multiple boards like in Altium this works good enough for simpler projects. There are several annoyances though:

  1. Every time you update the main board you need to delete all unneeded components from the daughter boards that should not be placed on the main board
  2. Both main PCB and daughter PCB have differently gendered connectors so you must be extra careful to make sure that they are oriented properly and that they align
  3. You must make sure that same schematic pages are not opened at the same time so you do not revert to the old version of the schematic by simply saving it on a different instance of KiCad
  4. KiCad 6 sometimes crashes if you place to much components at the same time this happens randomly every few hours, luckily there was never any work lost and the program happily recovers all lost changes but i still keep committing changes to repository religiously after each significant update.

I’m maybe 3 or 4 hours away of producing gerbers and sending them for review so let’s hope.

P.S. This is totally unrelated but it I like new way that the KiCad sets up the design rules. I need to find more help on it, the procedural language seems really powerful, need to find more info on it.

If there are things missing or unclear in the manual chapter on custom design rules (PCB Editor | 6.0 | English | Documentation | KiCad) that would be helpful, please open issues in the docs repository so we can make the documentation better.

I just found out that there are examples under the Board Setup → Custom Rules and it’s pretty easy to get it going. Finally I don’t need to have weird workarounds for design rules…

This is my multi-board workflow: KiKit/ at master · yaqwsx/KiKit · GitHub


that is definitely a nice way to do it.

I would love a mode that could use a rectangle in a user layer to select the board with the annotation.
I love the annotation mode to select the board. But I do have a lot of board with rounded border. So To simplify the ground plane I usually draw a square zone that is outside of my board edge.
And the plugin don’t detect the zone when doing the export.

Just specify a higher “tolerance” parameter in the source section, and your zones will be included.

Thanks for that.

By the way, is there a list of the parameters somewhere ?

Of course, just open the documentation:

1 Like

Thanks, I wasn’t looking at the proper documentation page.
I also needed the stack parameter. All good now.

I’ve read trough the instructions and it seems better than my approach as it shows the connectors all on one place and you can make sure that all are properly connected. This is something I am missing in my approach as I had to return back and fix several issues with connectors before sending the gerbers. In addition, showing all PCBs on one page has some advantages. Not sure how would this play with the different versions of the same PCB as I have now. And the 3D visualization might give me some headache.
I am considering changing my schematic in the next version to this approach and seeing is this viable.
The only thing I am not sure about is the KiKit addon. At this time I am quite positive that KiCad will open any of my old projects without any problems. I am not sure whether the KiKit would play nicely if I had to get back to old project after several years.
And, also, need to learn KiKit now…

If you open an old project with the current kicad, it will be brought to the new file format of the current Kicad.
So I don’t see why the plug in would not work.
I’ve actually tested it with project that I’ve started on Kicad 5.1, and continued on different version up to Kicad 6.0.5.
The main issue with the addon (as it’s the case with all the addon), is that they will still continue to work after an update of kicad. But Kikit is actively developed, so if there was an issue, it’s likely that it would be fixed.

For me I’ve created a script in a “dos” box to split my board in the PCB that are in the project, and also to convert 2 of them into 2 layers board (the third one is a 4 layer).
I still need to investigate the best way to “pass on” a version number for the PCB that I cna write in the silkscreen. I was using a text variable in the project. But the text variable does not propagate to the individual board.


on my project, I’ve got 2 boards in the same file, then I use Kikit to split them.
But I also use some project variable. Actually only one for the revision number of the board.

is there a way to copy the Project Text variable from the main board .kicad_pro into the daughter .kica_pro file that are created after the kikit separate command ?

This is implemented in the upstream version, it will be a part of the upcoming v1.1 release.

This topic was automatically closed 90 days after the last reply. New replies are no longer allowed.