Wrangling your bill of materials can be rough. I’ve seen many engineers fall before the great three headed spreadsheet of doom. It’s tedious work and it’s often filled with frustration and error.
So what does frustration lead to?
Eagle CAD has some great capabilities when it comes to part management. Some of these tricks may save you hours on the backend when designing and assembling boards.
In this brief guide, you’ll learn how to organize your libraries so that they’re a joy to use. Plus you learn that some up front effort will save you tons of time on the backend!
Let’s get started first by organizing your library in a sane manor.
If you’re at all familiar with Eagle, you know about libraries. Libraries are available from manufacturers and some even come with Eagle. They contain parts (footprints and symbols) that you can use inside your design. Some are well done, some make me want to cry. The coolest thing about libraries though?
You can roll your own.
Devices, Footprints, 3D Packages, Symbols oh my
Each library consists of many devices. These devices have 3 separate parts: a footprint, a 3D package and a symbol.
The footprint is the definition of the solder pads for your device. The 3D package is a rendering of the part placed on a rendering of the footprint. Finally, the symbol is the representation of this part in the schematic. When building a library, you can get away with not having a 3D package. You will always need a footprint and symbol though.
If you double click on a device you’ll see what i’m talking about.
A single device can have many footprints. They also can have many technologies. The only thing that a device can’t do is have many symbols.
So, with this knowledge we can use the same symbol and footprint to represent many parts. A great example of this is a resistor.
This is a screenshot of my RES device. As you can see it has many different technologies. You can also see that it has many different footprints. That’s because resistors are resistors are resistors. They (mostly) have two pins. That means we can re-use the same symbol for all the parts!
The *Technologies *****column is where things start getting interesting. You’ll notice that there’s a device name followed by some parameters. You can use these parameters to distinguish between different parts. From the example above, you’ll see that the first parameter is the value and the second is the tolerance.
To make a new technology click the blue Technologies link. It should open a window like this one:
Yes, creating technologies is a manual process but once you have it down it does get easier!
If you look back at the main screen, these technologies get appended to the name of the device. So a 1k, 1% part looks like: RES-1K-1%. That’s not the full story though. A 1k 1% part can have many shapes and sizes. That’s where the different footprints come in.
A footprint is main way that individual parts get organized. When you click on one, you’ll notice the list of technologies changes. You are now editing parts for that specific footprint.
You’ll also notice that there’s a Variant column. This is how we can tell different parts/footprints from each other. For example, when we search for RES-1k-1% in the schematic editor you’ll see several options. You’ll notice that Eagle appends the variant name to the technologies and device name. That way we can easily tell what part to use without wasting minutes of your time researching what part is what.
Resistors and capacitors both follow this system. Other parts may be more complex and have less similarities. So what do we do there?
We’ll use a system.
Use a System
As you saw in the previous section, there’s the makings of a process or system for creating new devices. Let’s break it down a bit more.
Different parts types get their own prefix. Here are some common ones that I use for my boards:
- IND - for inductors
- RES - for resistor
- CAP - for capacitor
- IC - for integrated circuits and processors
- ANT - for antennas
- CON - for connectors
- DIO- for diodes
- BRD - for PCB boards
- MOD - for modules
- PAD - for solder pads
- TR- for transistors
- TP - for test point
And so on.
For parts that have the same pin connections but have different footprints we can create a device. Then, we can attach footprints to that device much like we did in the earlier resistor example.
For parts that are unique though, you’ll have to create unique parts for each device. For example, ICs are almost always unique.
In this case, i’ve appended the manufacturer’s part number to the IC- prefix. That way it’s easy to tell what IC is what.
You may have also noticed that when you’re editing a part you get access to the attributes columns. Here you can put any data you want. At the very least I put a Digikey Part number and Manufacturer Part number. That way when you export your BOM, it will be easy to import into something like OctoPart, or a Digikey cart.
Creating parts through the Eagle interface is painful though. There is an easier way if you don’t mind using a text editor. We’ll go over that in the next section!
Editing Libraries is Painful
Let’s be honest here. This stuff takes time and it’s a ton of work. I’ll often find myself cross eyed after copying and pasting information from Digikey.
There is a cool solution to this problem too.
Use a text editor.
Eagle, as long as I’ve used it, has used XML files to represent schematics, board files and libraries. That means they’re easy to edit if you’re willing to take the plunge.
To find your library first open up your Control Panel in Eagle. Then right click on the library that you want to edit. Click the Show in Finder option. (There should be a similar option for Windows)
A window will pop up with your library highlighted! Right click on it and open it with a text editor of your choice. I use Visual Code for the automatic syntax highlighting.
Here’s what the library we were using earlier looks like in XML format. Using a quick search of
name="RES" we can find the RES part reasonably fast.
You can see that each footprint variant is represented by a
<device> tag. (yes, these XML tags do not quite match up with the EagleCAD UI) Each technology is represented by a
<technology> tag. As an example, let’s say we want to add a 1% 100k 0603 part. We can create a new technology with the
name equal to
<technology name="-100K-1%"> <attribute name="DESC" value="RES SMD 100K OHM 1% 1/10W 0603"/> <attribute name="DIGIKEYPN" value="311-100KHRCT-ND"/> <attribute name="MPN" value="RC0603FR-07100KL"/> <attribute name="POWER" value="1/10W"/> <attribute name="TOLERANCE" value="1%"/> <attribute name="VALUE" value="100k"/> </technology>
Every attribute and value are easily edited right here. All of a sudden it becomes much easier to copy data from Digikey.
If you’re using a shared/cloud library there is one more important step. Once you’ve made the changes, you need to open your library with the Eagle library editor. Then you need to click the Save button before you do anything else. If you publish a new version to the cloud before you do this your changes may be lost.
By now you should get how the library is put together. Let’s use the parts that we’ve created to create a pre-populated BOM.
Making Exports Easy
Now let’s see why we’ve done all this work in the first place: easy BOM exports! I’ll use the Air Quality Wing schematic as the example.
Open up the schematic and then run the
run bom command.
A window should pop up with all the parts listed out. You’ll want to change a few things before you click the Save.. button. First, select Values instead of Parts. This will bucket your parts together that have the same value. Then, you’ll want to select CSV instead of Text. This will put your file in a format that most distributors can recognize. If you’ve defined a variant make sure you chose that too!
Side note: Eagle, for what ever reason, exports their CSV files using a semi-colon as a delimiter instead of a comma. You can change this by opening up your bom.ulp file in /examples/ulps/examples/
Open it up in a text editor and replace
char Separator = ';';
char Separator = ',';
Then save and quit. Then we can go back to exporting our BOM!
Once you’ve made all the necessary changes, click the save button in the BOM export window. Find a good place to save your file. Make sure you name it something you can easily recognize!
You can open it in something like Excel to check the output.
Most vendors require you to have a Quantity column and a Manufacturer Part number column. Make sure both of these look ok before importing.
There’s also another advantage to organizing your part libraries. You’ll be PLM ready. What does that mean? We’ll go over that in the next section.
Be PLM Ready
First of all Jared, what the heck is PLM?
PLM stands for Product Lifecycle Management. PLM software tools exist to help product teams organize their bill of materials. Using a PLM system you can track and view changes. You can also share this information with outside vendors. All of a sudden you’re not sending spreadsheets back and forth over email. There’s a single source of truth. Nice no?
When you import parts into a PLM system, every parts needs a name or unique identifier. If you’ve been connecting the dots thus far, you’ll notice that every part has a unique identifier. You can use these part numbers to identify parts within your PLM system. This makes it easy to make changes and manage your assemblies.
I won’t go in to too much detail here about PLM systems. You can check out a previous post I wrote on the subject here.
In this post you’ve learned how to create and organize parts within your library. You now know the difference between a device, variant and technology. You know how to edit your library when the Eagle interface starts driving you crazy. Plus, you’ll be able to export your BOMs with ease because of all the upfront work we’ve done. Not bad!
All of this work can be tedious and can take some time. The nice thing is you can spread it out over time. Any time you need a part, add it to your library. Repeat the process until you get most of the parts you need.
Stay tuned for more posts like this. If you have questions drop me a line firstname.lastname@example.org. If you haven’t already, make sure you sign up for my mailing list below. You’ll be one of the first to know that i’ve released new content. Until next time!