简介:这份AD封装库与元件库合集面向使用Altium Designer进行原理图绘制和PCB布局的电子工程师、学生及项目开发者,旨在解决建库耗时、封装规格不统一、3D模型缺失等常见问题。压缩包共117个文件,约464.27MB,其中64个PcbLib提供电阻、电容、IC、连接器、FPC、QFN、DIP等器件的物理封装,45个SchLib对应原理图符号与电气属性,另有8个HTM页面便于浏览和索引;元件符号覆盖运算放大器、逻辑门、微控制器等,3D模型可辅助空间装配检查,PCB库则涉及层叠、过孔与焊盘等制造要素。资源分类较齐全,能减少重复创建元件的工作量,让设计者把精力放在电路功能与布局优化上。目前已有580人学习,适合希望快速补齐标准库、提升设计规范性与效率的新手和资深工程师参考使用。
1. 一块板子返工三次,多半不是布线的问题
上个月帮人看一块小板:打样回来发现某个连接器的焊盘间距比手册少 0.1mm,只能飞线救场,第二批又把二极管的方向装反。追到最后,问题出在 AD 封装库、元件库、3D 库、PCB 库、原理图库这五样里有两样没对齐,跟布线水平没有关系。这套库集合要解决的就是这件事:原理图符号负责逻辑连接,PCB 封装负责物理落位,3D 模型负责装配干涉,元件库负责参数与料号,封装库负责复用和批量校验,五者用同一套命名和同一份引脚编号串起来,拖进工程就能用,不用每次自己画。它最适合三类人:接手别人工程、打开就一片红叉的;要给结构出 STEP 做干涉检查、手上 3D 模型却东一个西一个的;以及个人库攒了两三年、想升级成团队可维护版本的。
2. 先看懂骨架:四类文件的职责边界与目录约定
库用不起来,八成不是缺元件,而是没搞清楚哪个文件管哪一段。有人在 PcbLib 里改丝印改了半小时,回头发现原理图那边封装链接还指着旧名字;也有人把整个 3D 模型嵌进集成库,结果文件涨到几百兆,打开一次要等两分钟。这一章先把职责边界和目录约定讲清楚,后面所有操作都建立在这个骨架上。
2.1 SchLib、PcbLib、IntLib 与 STEP 各管一段
原理图库文件(.SchLib)里放的是电气符号:引脚编号(Designator)、引脚名(Name)、电气类型(Input/Output/Passive/Power)、多子件(Part A/B/C/D),以及一条指向封装的模型链接。它只回答“这根线连到哪个脚”,不关心这个脚在物理上长什么样。PCB 库文件(.PcbLib)里放的是焊盘堆栈、丝印、机械层轮廓、3D Body 和 courtyard 参考框,它只回答“这块铜长什么样、占多大地方”。
集成库(.IntLib)是把上面两者编译打包后的只读产物,好处是分发时只有一个文件、不会出现符号更新了封装没跟上的情况;代价是它不能被直接编辑,改了源库必须重新编译。STEP 模型(.step/.stp)是给结构和装配检查用的,在 AD 里通过 3D Body 挂到封装上,可以选择嵌入(Embed)或仅链接。常见做法是:常用小元件嵌入,大连接器和异形件用链接,避免库文件无限膨胀。
职责分清楚之后,很多争执就不用吵了。焊盘该多大,是 PcbLib 的事;引脚号该怎么排,是 SchLib 的事;两者唯一的契约就是编号必须一一对应。这条契约一旦破了,PCB 上就会出现莫名其妙的“少一根网络”,而且 DRC 不报错,纯靠眼睛看。
2.2 目录与命名:把“找得到”变成“查得回”
我一般按功能分目录,不按厂商分。厂商分目录的问题是同一个 0603 电阻会有七八份,改一份漏七份;按功能分,同类只有一个入口,改一次全部生效。命名上坚持“类别_封装名_尺寸_密度”的结构,公制和英制双写,这样搜“1608”和搜“0603”都能命中。
# 库根目录约定:编号前缀决定扫描顺序,99_ 放废弃但还不能删的 AD_Lib/ ├── 01_Symbol/ # .SchLib,按功能拆:MCU / Power / Connector / Discrete ├── 02_Footprint/ # .PcbLib,与 01 一一对应,文件名保持一致 ├── 03_3D/ # .step/.stp,文件名 = 封装名,方便脚本按名匹配 ├── 04_IntLib/ # 编译产物,只读,带日期戳:AD_Lib_20240612.IntLib ├── 05_DbLib/ # 数据库库工程与 ODBC 配置说明 └── 99_Deprecated/ # 已停用但历史工程还在引用的,禁止删除只允许冻结这段结构不是审美问题。01 和 02 文件名严格对应,是为了让后面第 3 章的引脚差集脚本能靠名字直接配对;03 里 STEP 文件名等于封装名,是为了 3D 批量挂载时不用手工一个个点;99 单独隔离,是因为老工程还在引用,直接删会在打开时报“文件不存在”,而这类报错新手很难定位到是库的问题。
命名里我强制带尺寸,比如IC_SOIC-8_3.9x4.9mm_P1.27mm、RES_0603_1608Metric。原因是同一个 SOIC-8 有窄体和宽体两种,光看名字分不出来,等到贴片厂反馈“上不了”才发现本体宽度不对,那就是整批返工。
2.3 挂进工程:三种引用方式怎么选
AD 里让工程看到库,常见三条路。第一条是 Installed Libraries,在面板里把 .SchLib/.PcbLib 加进去,简单直接,缺点是路径存在本地配置里,换台机器就断。第二条是工程内建库,把库文件直接放进工程目录并 Add to Project,路径相对、跟着工程走,适合项目专用件。第三条是数据库库或工作区库,元件信息存在数据库里,符号和封装按字段动态取,适合人多、料号多的场景。
选型上没有绝对优劣,只有规模匹配。单人单机、元件两三百个,Installed 就够;三五个人的小组,建议 IntLib 加统一的库根目录,编译一次全组同步;超过十个人或者要和 ERP 对接料号,就得上 DbLib,否则同一个电阻在不同人电脑上有五个不同 Comment,BOM 合并时能把你逼疯。
要注意的是,AD 记录库路径时倾向存绝对路径,这就是第 5 章第一个坑的来源。规避办法很土但有效:库根目录固定在同一层级,比如统一放在某个盘的EE_Lib下,团队内约定不许改;再配合工程内建的 PcbLib 兜底。
3. 从符号到焊盘:把库里的件真正落到板上
库挂上了不等于能用。真正上板要过三关:符号引脚和焊盘编号对齐、3D 模型位置正确、集成库更新能同步到已放置的元件。这三关的失败表现差别很大——第一关表现为“少网络”,第二关表现为“元件穿板”,第三关表现为“我明明改了啊”。下面逐个拆。
3.1 引脚号映射:九成的“未连接”都出在这
原理图符号的 Pin Designator 和 PCB 封装的 Pad Designator 必须一一对应,注意是 Designator(编号)不是 Name(名字)。运放这类多子件最容易出问题:一个封装里 Part A 用 1/2/3,Part B 用 5/6/7,第 4 和第 8 是电源脚,画符号时如果偷懒把电源脚挂在 Part A 上又设成隐藏,封装那边照样有 8 个焊盘,网表就会缺两根。
还有个高频雷区是散热焊盘。QFN、DFN 底部那个大焊盘,符号里必须单独给一个引脚,编号一般是 “9” 或 “EP”,封装里对应的焊盘编号也必须一模一样。有人符号里写EPAD,封装里写9,DRC 一句话不报,PCB 上那块铜就是孤岛,回流焊时它悬空,散热和接地全废。
二极管、极性电容的 A/K 与 1/2 混用也是老问题。建议全库统一:无极性件用数字,有极性件的正极固定为 1、负极固定为 2,符号的引脚名可以写 A/K 方便阅读,但编号必须是 1/2。统一之后,下面这段差集脚本才有意义。
import csv def load_designators(path, key_col, val_col): """把库报表读成 {元件名: {引脚号/焊盘号}} 的字典 key_col / val_col 需要改成你导出报表里的真实表头名 """ table = {} with open(path, newline="", encoding="utf-8-sig") as f: # utf-8-sig 吃掉 BOM for row in csv.DictReader(f): name = (row.get(key_col) or "").strip() des = (row.get(val_col) or "").strip() if not name or not des: continue # 空行、汇总行直接跳过 table.setdefault(name, set()).add(des) return table sym = load_designators("sch_pins.csv", "Component", "PinDesignator") pcb = load_designators("pcb_pads.csv", "Footprint", "PadDesignator") # 1) 两边都有的元件,比较编号集合的差集 for name in sorted(sym.keys() & pcb.keys()): only_sym = sym[name] - pcb[name] only_pcb = pcb[name] - sym[name] if only_sym or only_pcb: print(f"[MISMATCH] {name} 仅符号有={sorted(only_sym)} 仅封装有={sorted(only_pcb)}") # 2) 只有符号没有封装的,单独提示,别让它被上面的交集运算漏掉 for name in sorted(sym.keys() - pcb.keys()): print(f"[NO_FOOTPRINT] {name}")逻辑很直白:用集合差集代替肉眼比对,双向都查,既能抓到“封装多一个焊盘”,也能抓到“符号多一个引脚”。参数上唯一需要动手的是两个列名,各家导出的报表表头不一样,改脚本比改报表省事。跑之前要保证符号报表和封装报表用的是同一套元件名,否则交集为空、脚本一声不吭地“通过”,这种假阴性比报错更危险。
我一般的做法是把这个脚本挂在库提交前的检查里,输出为空才允许合并。血泪经验是:手工核对超过 50 个元件之后,注意力一定崩,第 51 个必错。
3.2 3D 模型对齐:旋转、原点与单位三件事
STEP 挂进封装的操作路径是 Place → 3D Body → 选择 Embed/Generic STEP Model,然后指定文件。操作本身两分钟,坑全在后面:模型飞在半空、整个埋进板子里、或者转了 90 度躺倒。
第一个变量是原点。有的 STEP 原点在模型底面中心,有的在几何中心,有的干脆在建模时的世界原点。Z 方向偏移给 0,如果模型原点在几何中心,那它下半截就会插进 PCB 里。判断方法很简单:切到 3D 视图侧看,量一下模型底面和板面的距离,把这个距离填回 Z 偏移,或者直接把模型往上抬半个本体高度。
第二个变量是旋转。Rotate X/Y/Z 三个角度里,X 一般用来把躺倒的模型立起来(±90),Z 用来对准引脚方向。连接器尤其要注意,Type-C 这种对称件转 180 度看不出来,但 1 脚位置反了,贴出来整批报废。
第三个变量是单位。STEP 通常是毫米,AD 内部跟着当前视图单位走,如果你在 mil 视图下导入又手工填了偏移,很容易出现“差 25.4 倍”的惨剧。建议导入 3D 之前先按 Q 切到毫米。
提示:嵌入和链接的取舍上,我按体积分。0603 电阻、SOT-23 这种嵌入没问题;大连接器、带螺纹的异形件用链接,避免 IntLib 编译后体积失控。
对齐做完,务必用 3D 视图加测量工具确认一遍元件高度。结构那边给的限高是硬约束,电解电容高 0.5mm 顶到外壳,装配时才发现就晚了。常见做法是把整板导出 STEP 给结构,让对方在整机模型里做一次干涉,比自己在 AD 里逐个看靠谱。
3.3 集成库与数据库库:什么时候该升级管理方式
源库跑通之后,分发方式要跟着团队规模走。三种方式的核心差别在于“谁是唯一数据源”:
| 方式 | 唯一数据源 | 适合规模 | 主要代价 |
|---|---|---|---|
| Installed Libraries | 各人本地库文件 | 1~2 人 | 路径易断,版本不同步 |
| 集成库 IntLib | 编译产物 | 3~10 人 | 改动要重新编译分发,不能直接编辑 |
| 数据库库 DbLib | 数据库记录 | 10 人以上 | 要维护 ODBC 和字段映射,前期投入大 |
编译 IntLib 的流程是新建 Integrated Library 工程,把 SchLib 和 PcbLib 加进去,然后执行编译,输出落在指定目录。这里有个细节:编译只做“符号到封装的链接检查”,不做焊盘尺寸检查,所以编译通过不等于库是对的,别把它当验收。
升级到 DbLib 的信号有三个:同一个物料在不同项目里 Comment 不一致、BOM 合并要手工去重、采购要求按料号追溯。DbLib 的本质是把“元件”变成数据库一行记录,符号路径、封装路径、参数都是字段。配置时最容易翻车的是路径字段用了绝对路径,换服务器就全断——这也是第 5 章要展开的坑之一。
4. 参数怎么定:焊盘补偿、丝印与 courtyard 的具体取值
库能不能用,最终落在数值上。焊盘小 0.1mm 就是立碑,丝印压焊盘就是上不了锡,courtyard 没留就是贴片机撞件。这一章给的是可直接抄的起点值,具体项目还要按板厂工艺能力微调。
4.1 焊盘尺寸与阻焊、钢网补偿
翼形引脚(SOIC、QFP 这类)的焊盘,经验公式是:焊盘长度 = 引脚长度 + 趾部补偿 + 跟部补偿,焊盘宽度 = 引脚宽度 + 两侧余量。趾部(toe,远离本体那端)给 0.2~0.3mm,跟部(heel,靠本体那端)给 0.15~0.25mm,侧向单边 0.05mm 左右。密度等级高的板子(引脚中心距 0.4mm 以下)要往下压,否则连锡。
def gull_wing_pad(lead_len, lead_w, toe=0.30, heel=0.20, side=0.05, mask=0.05): """翼形引脚焊盘推算,单位 mm lead_len/lead_w: datasheet 上的引脚长度与宽度 toe/heel: 趾部、跟部补偿,密间距时下调到 0.15/0.10 side: 侧向单边余量 mask: 阻焊单边外扩,板厂能力弱时加到 0.06~0.08 """ pad_l = round(lead_len + toe + heel, 3) # 焊盘总长 pad_w = round(lead_w + 2 * side, 3) # 焊盘总宽 mask_open = round(pad_w + 2 * mask, 3) # 阻焊开窗宽度 paste_ratio = 1.0 # 钢网默认 1:1,散热盘另算 return {"pad_l": pad_l, "pad_w": pad_w, "mask_w": mask_open, "paste_ratio": paste_ratio} print(gull_wing_pad(1.0, 0.4)) # 典型 SOP-8 引脚:长约 1.0mm、宽约 0.4mm函数本身没难度,关键在参数怎么改。密间距器件(0.5mm 及以下)把 toe 降到 0.15、heel 降到 0.10,能显著减少桥连;大功率器件反而要往上加,让焊点有足够的爬锡高度。阻焊外扩不是越大越好,外扩过头会让相邻焊盘的阻焊桥消失,回流时连成一片。
散热焊盘单独处理:整块开窗会在回流时把元件“浮”起来,常见做法是分成若干个 1~2mm 的小窗口,覆盖率控制在 50%~70%,同时在大焊盘上打过孔接地。这些孔要盖油还是塞孔,得提前和板厂确认,别等做完才问。
注意:焊盘尺寸我倾向固化在 PcbLib 里,而不是靠 DRC 规则去兜。规则是全局的,改一次影响全板;库是按器件定制的,两者分工不能混。
4.2 丝印、装配图与极性标识
丝印的作用是给人看的,不是给机器看的,所以优先级是“看得清”大于“画得满”。线宽我一般用 0.15mm,字高不低于 1.0mm,元件本体的外框线画到本体尺寸外扩 0.1mm 即可,不要贴到焊盘边上。
硬性要求只有一条:丝印不能压在焊盘开窗上。压了会导致两种情况,轻的是字符残缺,重的是字符油墨污染焊盘造成虚焊。AD 里有对应的 DRC 规则,把 Silk To Solder Mask Clearance 设成 0.1mm,跑一遍就能把越界的丝印全揪出来,然后手工裁线。裁的时候注意别把 1 脚标记裁掉了。
极性标识是最容易被忽略的细节。二极管用一条短线表示阴极,在 0603 这种尺寸上几乎看不见,贴片厂反馈过好几次。改用三角形实心块或者直径 0.3mm 的圆点,辨识度立刻上来。1 脚标记同理,实心圆点比一个空心方框可靠得多。
装配图不要靠丝印层凑。正确做法是把元件轮廓放到独立的机械层,再用 Draftsman 出装配图,标注位号和极性。这样丝印层保持干净,装配图又能带上尺寸和注释,两边都不将就。
courtyard 这块 AD 没有原生层,行业里普遍用两层空闲机械层(比如 Mechanical 15/16)画,一层给本体、一层给焊接区。间距取值上,0603 这种小件留 0.25mm 就够,大连接器留 0.5mm 以上,因为贴片机吸嘴和周边元件需要避让空间。这一层不参与电气 DRC,但它是你后面做器件间距检查的唯一依据,别省。
4.3 把库和 DRC 规则绑在一起
库设计阶段就应该能过全局规则,否则每拉一个元件进来就要 waive 一次,时间全耗在点“忽略”上。我一般在新库工程里先落一套规则,再往里加封装。
关键几条:Minimum Solder Mask Sliver 设 0.1mm,防止阻焊桥细到板厂做不出来;Silk To Solder Mask Clearance 设 0.1mm;Hole To Hole 设 0.5mm,通孔件密集时尤其要跑;Board Outline Clearance 按板厂要求设 0.3~0.5mm。这些值不是拍脑袋,是从常见加工能力倒推出来的下限,具体项目再按板厂工艺文件调整。
规则配好之后有个小技巧:在 PcbLib 里对单个封装跑 DRC。很多人以为 DRC 只能在 PcbDoc 里跑,其实封装编辑状态下也能查间距和阻焊,早点发现问题比等到整板跑要省事得多。库里的封装全部单件过一遍规则,再拼板,返工率会明显下来。
5. 避坑:库复用里最常翻的五次车
库这个领域有个特点:错误不报,后果滞后。做的时候一切正常,打样回来才发现问题,一次就是两周工期。下面五条是我自己踩过或者帮人排查过的,按“现象 → 原因 → 解决”写,遇到对得上的直接照方抓药。
5.1 加载与导入阶段的两个坑
换台电脑打开工程,封装全找不到。现象是打开原理图,元件属性里的封装名还在,但 PCB 同步时提示封装不存在,或者库面板里一片灰。原因是 AD 在符号的封装模型里记录的是库文件路径,而 Installed Libraries 列表存在本地用户配置里,换机器、改盘符、改目录名都会断。解决分两层:短期用 Project → Add Existing to Project 把 PcbLib 拉进工程目录,让路径相对化;长期统一库根目录层级,或者干脆改用 IntLib/DbLib 分发,把路径依赖从“每个人的电脑”转移到“一个文件”。
导入第三方库后,元件名带一堆奇怪后缀。现象是从别处拿来的 IntLib 解开后,Symbol 名叫RES0603_1、RES0603_2,重名冲突。原因是原库里有同名元件,解包工具自动加了序号。解决是解包后先做一次重命名批处理,按第 2 章的命名规范统一,再重新编译。别偷懒直接用,后期搜索时你会发现同一个电阻有三份,改了一份另两份还是老的。
5.2 上板与出图阶段的三个坑
原理图改了封装,PCB 上纹丝不动。现象是明明在 PcbLib 里把焊盘加大了,重新编译了 IntLib,板上那个元件还是老样子。原因是已放置的元件是“快照”,不是“引用”,库更新只影响新放置的元件。解决是从原理图端执行 Tools → Update From PCB Libraries,或者在 PCB 端用 Update From Library 批量刷新,勾选需要更新的元件。刷新完必须重跑 DRC,因为焊盘变大会引入新的间距违规,这一步跳过等于没更新。
3D 视图里元件整个埋进板子里。现象是切到 3D,元件只露出顶上一小块,或者干脆看不见。原因基本是 STEP 模型原点在几何中心,而 Z 偏移填了 0。解决办法是量出本体高度,把 Z 偏移设成半高,让模型底面贴合板面;或者在建模软件里把原点改到底面再导出。附带提醒,导入前把单位切成毫米,在 mil 视图下填偏移量会得到 25.4 倍的惊喜。
库文件越做越大,打开要等一两分钟。现象是 IntLib 编译出来上百兆,双击加载有明显卡顿。原因是所有 STEP 都用了嵌入模式,而且模型精度过高,一个连接器带螺纹、带圆角,动辄几兆。解决办法是分级处理:小元件保留嵌入,大件改成链接模式;STEP 导出时关掉螺纹、圆角这些对装配无意义的细节;再按类别把一个大库拆成电源库、连接器库、分立器件库,用哪个挂哪个。
同一颗料,BOM 里出现三行。现象是贴片厂反馈物料重复,采购按三份报价。原因是 Comment 字段没统一,有人写100nF,有人写0.1uF,有人写104。解决办法是上数据库库,把 Comment 变成由料号驱动的字段,从源头禁止手填。做不到就退一步,在库编译前跑一次 Comment 规范化检查,把常见写法统一成一种。
6. 给库做一次批量体检:脚本化校验与验收标准
人工翻库翻到第五十个元件,注意力必然崩,所以验收这一步我坚持脚本化。核心思路是把库的信息导出成表格,用脚本按规则打分,输出一份“不合格清单”,人只看清单。
import csv, re # 命名规则:类别前缀 + 封装名,尺寸段可选 NAME_RE = re.compile(r"^(IC|RES|CAP|CON|IND|LED|Q)_[A-Za-z0-9._\-]+(_\d+(\.\d+)?x\d+(\.\d+)?mm)?$") def audit(path): """path 为库报表 CSV,需包含以下列: Footprint / PadCount / Has3DBody / SilkToPad / Courtyard """ issues = [] with open(path, newline="", encoding="utf-8-sig") as f: for i, row in enumerate(csv.DictReader(f), start=2): # start=2 对齐表格行号 fp = (row.get("Footprint") or "").strip() if not fp: continue if not NAME_RE.match(fp): issues.append((i, fp, "命名不符合规范")) if int(row.get("PadCount") or 0) == 0: issues.append((i, fp, "焊盘数为 0")) if (row.get("Has3DBody") or "").strip().lower() not in ("y", "yes", "1"): issues.append((i, fp, "缺少 3D 模型")) if (row.get("SilkToPad") or "").strip().lower() in ("y", "yes", "1"): issues.append((i, fp, "丝印压焊盘")) if (row.get("Courtyard") or "").strip().lower() not in ("y", "yes", "1"): issues.append((i, fp, "缺少 courtyard 参考框")) return issues for row_no, fp, msg in audit("pcb_lib_report.csv"): print(f"行 {row_no:>4} | {fp:<40} | {msg}")脚本的判断逻辑是逐条独立打分,不做短路,这样一个封装能同时暴露多个问题,改一轮就够。参数上要改的是列名和正则里的类别前缀,前缀跟着你们团队的分类走。跑出来的行号直接对应表格行,方便回查。
我更看重的是那份“通过”的标准,因为标准定松了脚本等于白跑:
| 检查项 | 通过标准 | 常见不通过原因 |
|---|---|---|
| 命名规范 | 全部匹配前缀与尺寸段 | 早期建的库没带尺寸 |
| 焊盘数 | 与引脚数一致,含散热盘 | QFN 漏建 EPAD |
| 3D 模型 | 全部有,且高度与规格书一致 | 只挂了大件,小件偷懒 |
| 丝印 | 不压开窗,1 脚标记清晰 | 从旧库继承的越界线 |
| courtyard | 全部有,间距 ≥0.25mm | 直接没画 |
这套体检我一般放在两个时间点:新库入库前跑一次,全量重构后跑一次。中间不动。因为库这个东西,越改越容易出问题,改完必须有一次结构化回归。
最后一次翻车是这样的:赶一个急活,从旧库拷了十几个封装改巴改巴就用,没跑体检,结果一个 SOP-8 的丝印压到了焊盘上,贴片厂没吭声照贴,回来整批虚焊。从那以后我每次动库,哪怕只改一个焊盘,也强制把体检脚本和引脚差集脚本各跑一遍,输出为空才允许提交。慢五分钟,省两周。希望帮到你。
本文还有配套的精品资源,点击获取