A KiCad BOM is a list of all the parts your design is using. The term BOM, or bill-of-materials, is standard for supply chain management and does not just apply to electronics. KiCad’s eeschema has a BOM export feature. Unfortunately as of Version 4.0, this feature is still somewhat lacking. Given the limitations, here are some tips to take your KiCad BOM from Schematic to Mouser. Spending a few extra minutes while capturing (drawing) your schematic thinking about your KiCad BOM can save you a ton of time later on. Moreover, as you build up a database of parts, these extra minutes turn into seconds. Here are a couple of ways to describe your parts, especially passive components, better while drawing schematics in KiCad.

Introducing my KiCad BOM Experiment: An ESP8266 Based RGB LED Controller

Currently, I am designing an ESP8266 based RGB LED controller. I sent my first revision of the board to OSH Park. (After I get this first board built, I’ll add it to my list of projects.) While the boards are getting made, I turned my attention to ordering the parts to load onto the PCB. Here’s how I optimized my work to get a good BOM.

Drawing the KiCad Schematic

When drawing a KiCad schematic, you likely know the exact semiconductors and their packaging you plan to use. For example, if designing a microcontroller based project you already know what chip and whether or not you are using a through-hole or surface mount component. This knowledge makes picking an exact part number easy. What about passive components? An easy trap to fall into is placing resistors, inductors, and capacitors into a design and only changing their value and footprint fields. For example, drop in a capacitor and change the value to 47 uF. You know you want to use a surface package, so you pick something like “0805” or “1206” as its footprint. These actions make designing the printed circuit board easy but are going to give you grief when you generate your KiCad BOM.

1. Add Fields for Type, Voltage, and Tolerance

For semiconductors (or chips) the part number is specific. However, for passive components, you need more than just a value and footprint–which are the default fields KiCad gives you. Ideally, you want a particular manufacturer’s part number. However, you may not want to spend much time during schematic capture to research all of the capacitor options. In that case, you should add other data to make lifer easier later on. Here are some example parameters you may want to record when building your schematic in KiCad.
  • Material Type. This property is of particular importance for capacitors. Defining a capacitor dielectric (or a property of the dielectric) is critical. For a ceramic capacitor, you want to call out C0G, X5R, or X7R. For an aluminum electrolytic cap, you want to define whether a “wet” (traditional) or newer Organic-Polymer should be used. Resistors come in thin and thick film types. Inductors… are a whole different post. 🙂
  • Voltage. What is the minimum rated voltage needed for a component? Ceramic capacitors lose capacitance when driven close to their rated voltage, so you may want to specify a voltage rating two or three steps higher than what you will apply.
  • Tolerance. Resistors, inductors, and capacitors do not ship with absolute values. What is the tolerance range you can tolerate? (No pun intended). 1%, 5%, 10%, and 20% are all common “tolerance” values. Keep in mind on inductors and capacitors if you are selecting the highest value for a given rated voltage, you may be limited to higher tolerance values.
  • ESR. Defining the equivalent series resistance (ESR) of capacitors can be significant, especially in LDO designs. Do you have a max you can tolerate?
  • Case Size. Footprints in KiCad clearly state the “X” and “Y” directions for a component’s size. However, you may also want to define a maximum height or thickness.

Put these details in a field

Even if you have a manufacturer’s part in mind, there is a good reason to record this information: What if it is not in stock and you need to cross to another? [shareable]Here’s why part desc help when ordering a KiCad BOM[/shareable] There are two methods you can enter this information. You can add a field for each property. This clunky option is an area where KiCad fails, in my opinion. One benefit though is when you export a KiCad BOM, you’ll get a CSV with each of these fields. Distributors can more easily import and cross parts when this extra information is defined.
KiCad BOM Individual Fields
KiCad BOM with Individual Fields

2. Describe the part as the Value

An alternative is to enter the critical information as part of the “Value” field. It’ll make the schematic and printed circuit board a little messier but makes choosing a vendor specific part easier.
Note when I choose this method, I end up hiding the value field in PCB and manually adding labels if I want the value on the PCB.
Use this format:
#Component# #Type# #Size# #Voltage# #Value# #Tolerance#
If we were talking about a capacitor I would say something like:
CAP X7R 0805 10V 1UF 10%
KiCad BOM with fields in VALUE
KiCad BOM with fields in VALUE
Either adding that much detail while you draw the schematic or waiting until the end to add it, seems like a lot of work. While it will make using “crossing tools” from distributors work well, there has to be a better way! What if there was a way to summarize all of the components, especially the passives, with similar high-level parameters at once? There’s a script that just does that.

3. BOMs-Away by Jeff Ciesielski

While there are many KiCad BOM utilities, BOMs Away (available on Github) caught my attention. It helps to close the loop to get my parts from KiCad into Mouser (or Digikey). Writing out the long descriptions like above gets tedious quickly. Especially if you are using common parts for a decoupling capacitor or pull-up resistor. (Also, CMD-C doesn’t work on the Mac version of KiCad. So that gets in the way of copy and paste.) BOMs-Away is a fantastic Python-based app that consolidates components with the same values and footprints into a single list. So all of your 100nF 0805 capacitors can be summarized in a single line. Once summarized, you to define a manufacturer, manufacturer part #, supplier (distributor), and supplier part # (distributor SKU). By doing this consolation, you can make sure you aren’t missing or have conflicting values. My next phase is to look into some KiCad tools to help choose parts. For now, I am just going to Mouser and searching for what’s available.
KiCad Bom with Boms-Away KEMET Capacitor
Boms-Away Adds Information
Here you can see that C8, C9 and C10 of my schematic are all 0805 10 uF capacitors. I’ve gone to Mouser and found the KEMET C0805C106M3PAC is available and filled in the appropriate information. The downside to this approach is that I still need to look back at my schematic. Otherwise, I’m blind to the function of the capacitor and the details I need to chose the correct one. If I had labeled with Voltage, Tolerance, and Type information mentioned in method #2, it would have made my search much simpler. Lots of work up front or lots of work in the backend, choose your poison.

Notes on using BOMs Away

BOMs-away uses an odd combination of python modules. I had no trouble installing them, but I could see that being an issue. Make sure you read the readme on Github closely. The UI’s unique look takes a little bit of time to get comfortable using it. There is a feeling of a mobile app running on a PC. For what the tool does, though, I do not consider either of those notes “complaints.” Just notes.

Saving Schematic

Once you add information like the Manufacturer, Supplier, and Supplier SKU, BOMs-Away can export the data directly into your KiCad Schematic. BOMs-Away even export directly to CSV for upload to Mouser or Digikey. No need to re-load eeschema just to generate a KiCad BOM export.

Conclusion

In an ideal world, a component database would be part of the KiCad suite. And when you export the BOM it would export a distributor-friendly part description. Since KiCad, currently, lacks that functionality BOMs Away is a workaround. One of these methods for managing your BOM should help your design flow.
What tools or techniques do you use to manage your KiCad BOMs?
Author

Fan of making things beep, blink and fly. Created AddOhms. Stream on Twitch. Video Host on element14 Presents and writing for Hackster.IO. Call sign KN6FGY.

4 Comments

    • Generally, it stores it in the Project Directory.

      But because the “BOM Generator” work by using external scripts, it entirely depends on what command is run. The default command looks like:

      python "C:\Program Files\KiCad\6.0\bin\scripting\plugins/bom_csv_grouped_by_value.py" "%I" "%O.csv"

      The last parameter is “%O.csv” which means the output file ends in .csv and is in the “current” directory. Which, is the project’s directory.

  1. Taylor Street Reply

    This looks like a pretty awesome tool. However, I absolutely love KiField. It’s a simple Python-based command line plugin that allows you to export all the objects from a schematic. It allows you to recurse through hierarchical schematics, group components like you mentioned above, and even make backups of the file it’s writing to. But the best part is that after extracting all of the data into a CSV file, you can edit the file and then re-import it back into the schematic to update all of the fields automatically. It’s pretty brilliant. Just make sure to install it with Python 3 though, because it has issues with Python 2 doing the re-import. Super easy to install too:

    pip3 install kifield

    Then just type “kifield –help” for info.

Write A Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.