PCB封装命名规范:焊盘、Shape与封装层字段规则解析
简介:面向PCB设计、封装建库与硬件研发人员的命名规范文档,针对器件与焊盘命名不统一、库文件混乱、团队协作易出错等问题,提供可参照的标准化命名思路。压缩包内共1个docx文件,约1.63MB,篇幅完整、目录层级清晰,便于按章节检索。内容围绕焊盘命名与PCB封装命名展开,涵盖表贴、通孔、花焊盘及Shape命名,并细分电阻、电位器、电容、电感、磁珠、二极管、晶体谐振器与振荡器、熔断器、发光二极管等类别,同时涉及BGA、CGA、LGA、PGA、CFP、DIP、DFN、QFN等封装形式的命名约定,可帮助读者快速建立统一命名体系,减少建库错漏与沟通成本。已有805人学习,适合作为企业封装库规范、个人建库查漏补缺及团队培训的参考材料。
1.
上周帮一个做工业控制板的团队收拾封装库,打开目录就看到R0603、0603_R、RES_0603_1.6X0.8三种写法并存,同一个 0603 电阻躺着四个焊盘尺寸版本,谁也不敢删。这种局面靠开会统一不了,得有一份能落到字符级的规范。这份被传成「最全」的 PCB 封装命名规范 docx 干的就是这件事:把焊盘、Shape、封装三层名字的每个字段固定下来,字符集、单位、尺寸编码、密度等级、消歧后缀全部写死,建库的人照着填,写脚本的人照着解析。它面向的是要维护公共库的硬件工程师、封装库管理员,以及需要从库里批量提取尺寸参数的 SI 和工艺同事。规范本身不含封装文件,给的是「怎么起名」这套约束,能不能用好,取决于你愿不愿意把它的字段顺序原样搬进自己的库。
2. 命名底座:字符集、单位与尺寸编码的三道硬约束
2.1 为什么先锁死字符集和单位
封装库出问题,十次里有六次不是尺寸算错,是名字里混了不该有的字符。规范 3.1 条把字符集卡得很死:只允许数字 0-9、字母 a-z(不区分大小写)、下划线_、中横线-,其余一律算非法字符。这条看着小题大做,实际是唯一能让「人写的名字」和「脚本读的名字」对上的办法。中文括号、顿号、+、/、空格这些字符一旦进了封装名,轻则导出网表时字段被截断,重则在某些 EDA 的数据交换格式里直接解析失败,报错还只报「文件格式错误」,排查起来纯靠猜。
单位同理,规范只认毫米(mm)和毫英寸(mil)两种,而且必须作为后缀出现。这不是洁癖:库文件里最怕的是「隐式单位」,名字叫SOP8_3.9,没人知道 3.9 是毫米还是别的什么,三年后接手的人只能去翻原始 datasheet。把单位顶在名字末尾,等于给每个封装贴了张不干胶标签。
提示:大小写「不限制」不等于「随便写」。绝大多数 EDA 工具在比较封装名时是大小写敏感的,
SOP8和sop8会被当成两个不同的封装,最后库里出现一对孪生兄弟。落地时统一小写,是成本最低的约定。
字符集和单位这两条约束真正的价值,是让后续所有规则可以被机器校验。你在第 6 章会看到一个十几行的正则就能把八成不合规的名字筛出来,前提就是这两条先立住。
2.2 尺寸编码:公制留两位、英制不留小数
规范里最容易翻车的是尺寸怎么写成纯数字。3.3 条和 3.4 条给了两套完全不同的编码:
- 公制:数字的后两位表示小数位,
160读作 1.60mm,50读作 0.50mm,5读作 0.05mm;整数位长度不限制,超过两位小数的四舍五入到两位。 - 英制:所有数字都是整数,
210就是 210mil,没有小数位,数字长度不限制。
这套编码的本质是「把小数点从名字里赶出去」。因为小数点在某些工具的文件名、网表字段、脚本参数里都是高危字符,而尺寸又必须有小数精度,唯一解法就是定点数编码。
写代码时我一般直接按这个规则做双向转换,下面这段跑一次就能验证自己的理解对不对:
def mm_to_code(value_mm: float) -> str: """公制尺寸转命名编码:乘 100 取整,160 表示 1.60mm""" if value_mm <= 0: raise ValueError("尺寸必须为正") # 先 round 再 int,避免 1.6*100 得到 159.99999999 被截断成 159 return str(int(round(value_mm * 100))) def mil_to_code(value_mil: float) -> str: """英制尺寸转命名编码:只保留整数,四舍五入""" if value_mil <= 0: raise ValueError("尺寸必须为正") return str(int(round(value_mil))) def code_to_value(code: str, unit: str) -> float: """编码还原成实际尺寸,用于校验库里名字和实际焊盘是否一致""" if unit == "mm": return int(code) / 100.0 if unit == "mil": return float(int(code)) raise ValueError(f"不支持的单位: {unit}") # 自检:规范里的例子能不能对上 assert mm_to_code(1.2) == "120" assert mm_to_code(0.5) == "50" assert mm_to_code(0.05) == "5" assert code_to_value("160", "mm") == 1.6 assert mil_to_code(210) == "210"mm_to_code里那个int(round(...))不是啰嗦,浮点数乘法在这个场景下真的会咬人:1.6 * 100在多数运行时里是160.00000000000003或159.99999999999997,直接int()截断就会得到159,名字里凭空少了 0.01mm。code_to_value反向解析的用途在后面很关键——建库脚本可以把自己的名字读回来,和实际焊盘几何做比对,名字写160、焊盘却是 1.5mm 这种事故能自动抓出来。
一个容易忽略的细节:公制编码不要补零到固定位数。0.5mm 写成50是对的,写成050虽然数值上也能读成 0.50,但和「后两位是小数位」的规则混在一起会让解析器产生歧义,050到底是 0.50 还是 050 这个整体?团队里只要有一个人补零,后面所有人的解析脚本都得多写一个分支。
2.3 参数占位符的取值口径
规范 3.5、3.6 两条定义了整套大括号占位符的含义,这部分是全文的字典,值得单独拎出来。真正需要背下来的不是占位符名字,是每个字段「取典型值还是取最大值」——取错了,名字没错,封装是错的。
| 占位符 | 取值口径 | 取错的后果 |
|---|---|---|
{Length}{Width}{Body Length}{Body Width} | 典型值;无典型值取平均值;只有唯一值就取该值 | 取最小值会让焊盘偏小,贴片偏移 |
{Height}{Body Height} | 取最大值 | 取典型值会撞外壳、撞散热器 |
{Lead Diameter} | 取最大值 | 孔径给小了,插件插不进去 |
{Lead Spacing}{Pitch}{Lead Span} | 典型值 | 排距取极值会导致引脚对不上孔 |
{Lead Span L1}/{Lead Span L2} | L1 取较小排距,L2 取较大排距 | 四边引脚器件装反方向 |
{Pin Qty} | 功能引脚 + 散热盘数量 | 漏掉散热盘,钢网开孔数量对不上 |
{Body Thickness} | 文档只给了参数名,没给口径,落地按典型值 | 与高度混淆,叠层干涉算错 |
{Columns}{Rows} | 引脚列数、行数 | 阵列器件行列写反,焊盘阵列方向错 |
从一份 datasheet 走到一个合规名字,我固定走五步:
- 先把手册里的尺寸表抄成一张两列表,左列是符号(D、E、A、e、b),右列是 min/typ/max 三个值,不要边看边写名字。
- 按上表的口径给每个符号定一个「命名值」,典型值优先,高度类一律取 max。
- 判断单位:手册给公制就用 mm,给英制就用 mil,不要在同一个名字里混两种单位。手册同时给两套时,选和你库里其它封装一致的那套。
- 把命名值过一遍
mm_to_code或mil_to_code,得到纯数字串。 - 按第 3、4 章的字段顺序拼装,最后检查字符集。
第 3 步的「不混单位」值得多说一句。规范允许一个库里同时存在 mm 后缀和 mil 后缀的封装,但不允许一个名字里既有公制编码又有英制编码。原因很实际:160在公制下是 1.6mm,在英制下是 160mil,差了 2.5 倍,混着写等于给后面的人埋雷。
3. 焊盘层命名:表贴、通孔、花焊盘与 Shape 的拼装顺序
3.1 表贴焊盘:形状字母决定字段个数
规范第 4 章开头有句话要先记住:焊盘是组成封装的单元,本节讲的焊盘包括表贴焊盘、通孔焊盘,以及组成特殊表贴焊盘的 shape 和组成通孔焊盘的 flash。这句话划定了层级——焊盘是最小可复用单元,封装是焊盘的组合。命名规则也是按这个层级分开的,不要混着用。
表贴焊盘分三类,字段个数完全不同:
| 类型 | 形状字母 | 需要的字段 | 示例(1.2×0.6mm,阻焊增量 0.1mm) |
|---|---|---|---|
| 长方形 / 椭圆形 | r矩形、b椭圆 | 长边 W、短边 H | r120_60s10mm |
| 正方形 / 圆形 | s方形、c圆形 | 单一边长或直径 | c100s10mm |
| D 形 | d | 长边 W、短边 H | d120_60s10mm |
字段顺序按 4.1.1 的说明条目走:形状字母 → 长边 → 短边 → 固定字符s(solder mask,阻焊)→ 阻焊增量 → 单位。矩形和椭圆必须两个尺寸都写,方和圆只写一个,这就是「形状字母决定字段个数」的含义。如果给圆形焊盘写了两个尺寸,解析器要么报错要么默默取第一个,两种结果都难受。
阻焊增量是唯一一个「差值」而不是「绝对值」的字段,含义是阻焊开窗比焊盘大出来的尺寸。1.2×0.6 的焊盘配 0.1mm 的单边增量,公制编码写10。这里有个惯例要提前定死:增量写的是单边还是双边。规范没明说,我一般按单边记,并在团队库的 README 里写一行,避免有人按双边算导致开窗大了一倍。
非标准表贴焊盘(键盘按键那种异形盘、SON 封装的散热盘)走的是另一套命名:smd_{Pack.Name}_{Number}。Pack.Name是这个焊盘适用的封装名,Number是序号。如果封装里只有一个非标准焊盘,序号可以省略;有两个就写 1 和 2。
在 EDA 里落地的顺序我一般是:先按 datasheet 算出 W/H/增量 → 在 padstack 编辑器里建盘 → 立刻按规则命名保存 → 再拖进封装。反过来做(先拖进封装再回头命名)几乎必然出现同名不同尺寸的脏数据,因为改尺寸的时候没人会回头改名字。
3.2 通孔焊盘:钻孔形状与金属化必须写进名字
通孔焊盘比表贴多两个维度:钻孔形状和金属化。规范 4.2 条把通孔焊盘拆成圆形/方形一组、椭圆形/矩形一组,每组再按「带自定义 flash 的金属孔 / 不带自定义 flash 的金属孔 / 非金属孔」三种情况给格式。
字段顺序是:固定字符t(through)→ 焊盘形状字母 → 焊盘尺寸 → 钻孔形状字母 → 钻孔尺寸 → 钻孔类型p/n→ 花焊盘外径 → 花焊盘内径 → 花焊盘辐宽 →s→ 阻焊增量 → 单位。
拆开看每一项:
- 焊盘形状:
c圆、s方、b椭圆、r矩形。方和圆只需要一个边长,椭圆和矩形需要长、宽两个。 - 钻孔形状:同样用
c/s/b/r,跟焊盘形状独立。一个方形焊盘配圆形钻孔是非常常见的组合,别想当然认为两者必须一致。 - 钻孔类型:
p表示孔壁金属化(plated),n表示非金属化(non-plated)。这个字母漏了,工厂按什么做完全靠猜,安装孔被镀上铜、或者该导通的地方没导通,都是从这里来的。 - flash 三段:外径、内径、辐宽。不带自定义 flash 的金属孔这三段直接省略。
举例:焊盘 1.6mm 圆形、钻孔 1.0mm 圆形、金属化、阻焊增量 0.1mm,落地成tc160c100p10mm;同样几何改成非金属化就是tc160c100n10mm;如果要带自定义 flash,就在p后面接外径、内径、辐宽三段编码。椭圆形焊盘 2.2×1.2mm 配 1.6×0.6mm 椭圆钻孔,写成tb220_120b160_60p...。
注意:
p和n的区别不是文档细节,是生产指令。安装孔、散热器固定孔、屏蔽罩定位孔全都要用n,一旦写成p,工厂会在孔壁镀铜,装配时螺钉直接把铜层和信号层短在一起。
3.3 花焊盘:外径、内径、辐宽、开口角一个都不能省
花焊盘(thermal relief)是负片设计里连接铜皮和焊盘的「四条腿」,它的命名要描述四个几何量:外圈长、外圈宽、内圈长、内圈宽、辐宽、开口方向与水平线的夹角。
规范 4.3 条给的字段顺序是:固定字母f→ 外圈长 → 外圈宽 → 分隔符x→ 内圈长 → 内圈宽 → 形状字母(c/b/s/r)→ 辐宽 → 开口角度 → 单位。
举一组具体数字:D=1.3mm、d=1.0mm、w=0.2mm、b=90°、外圈 1.9×1.6mm、内圈 1.3×1.0mm。拼出来是f190x160x130x100b20_90mm,读法是外圈 1.90×1.60,内圈 1.30×1.00,圆形,辐宽 0.20mm,开口 90°。
辐宽和角度之间我习惯加一个下划线,因为角度可能是两位数也可能是三位数,不加分隔符时20和90粘在一起变成2090,谁也拆不开。规范里的x是明确写进说明的分隔符,辐宽和角度之间的分隔属于落地细节,团队里统一就行,但一定要统一。
花焊盘最容易出的问题是内外径反了。外径小于内径的 flash 在负片上表现为焊盘和铜皮完全隔离,板子做回来是「断路」,而设计文件里看着一切正常。我的习惯是建完 flash 立刻用测量工具量一遍内径,和名字里的数字对一次,二十秒的事。
3.4 Shape 与非标焊盘:编号跟着封装名走
要做出标准盘拼不出来的形状,得先在软件里画 shape。规范 4.4 条给的命名是sh_{Pack.Name}_{Number},和 4.1.3 的非标焊盘smd_{Pack.Name}_{Number}是同一套逻辑:名字里必须带它服务的封装名。
为什么绑封装名而不是叫shape_1、shape_2?血泪经验是复用会咬人。一个叫shape_thermal的散热盘 shape 被五个封装引用,某天有人为了改 QFN 的散热盘把它拉长了 0.2mm,另外四个封装的焊盘跟着变,而且没有任何提示。库里不会报错,只有板子回来才发现某个 SOP 的散热盘偏出了本体。
具体例子:封装sot230p700x180-4nmm里有两个非标准焊盘,对应的 shape 就是sh_sot230p700x180-4nmm_1和sh_sot230p700x180-4nmm_2,焊盘本身是smd_sot230p700x180-4nmm_1和_2。序号省略规则也一样:只有一个就不写序号。
这套命名还有个副作用是好的:Pack.Name里已经包含了密度等级和单位,所以从 shape 名字就能反推出它只该出现在哪个封装里。库大了以后做引用关系检查,直接按名字前缀匹配就能列出一张「哪个 shape 被哪些封装引用」的清单,比在EDA 的引用报告里翻快得多。
4. 封装层命名:类型词根、密度等级与后缀消歧
4.1 类型词根表:一个前缀对应一类器件
第 5 章是整份规范的主体,从 5.2 到 5.30,基本上是一器件一节。所有封装名的结构可以归纳成一句话:类型词根 + 尺寸串 + 引脚信息 + 密度等级 + 单位,个别情况在末尾追加消歧后缀。
先把词根表建立起来,这是整套命名能够自解释的关键:
| 词根 | 含义 | 词根 | 含义 |
|---|---|---|---|
resc | 片状电阻 chip | capc | 片状电容 chip |
resm | 模制电阻 molded | capm | 模制电容 molded |
resmelf | 柱状电阻 | capmp | 模制有极性电容 |
resadh/resadv | 轴向电阻水平/垂直安装 | capcp | 有极性片状电容 |
pot | 电位器、可变电阻 | capae | 表贴铝电解电容 |
indc/indm/indpw | 片状/模制/绕线电感 | capcav/capcaf/capcax | 凹陷/平滑/凸出电容阵列 |
capadh/capadv | 无极性轴向圆柱电容 | cappadh/capparh | 有极性轴向电容 |
caprd/caprr/caprb | 径向圆柱/矩形/圆形电容 | capv | 可变电容 |
BGACGALGAPGA | 球栅/柱栅/焊盘栅/针栅阵列 | QFNDFNSON | 无引脚/双侧无引脚/小外形无引脚 |
QFPSOPSOICSOJ | 四边/小外形封装族 | SOTTODIP | 小外形晶体管/晶体管外形/双列直插 |
CFPLCC | 扁平封装/无引脚芯片载体 | PLCC | 带 J 形引脚塑料芯片载体 |
词根的设计逻辑是「英文缩写的首字母组合」,读一遍就知道是哪个器件族。5.6 到 5.11 这几节(磁珠、二极管、晶体谐振器、晶体振荡器、熔断器、发光二极管)在文档里给了章节但正文被截断,落地上按同一套构词法自定两到四个字母的前缀即可,关键是团队内固定,不要同一个人今天写bead明天写fb。
有一个细节要注意:有极性的器件,词根里通常会多一个p。capc无极性、capcp有极性;capadh无极性轴向、cappadh有极性轴向。这个字母丢了,贴片机就不知道极性标记在哪,有极性电容反贴是能炸的。
4.2 密度等级:表贴 M/N/L,插件 A/B/C
规范 5.1 条是整个文档里最容易被读错的一节。PCB 分高密度板、中等密度板、低密度板,同一颗器件要建三个不同尺寸的封装,靠后缀区分:
| 密度 | 表贴后缀 | 插件后缀 | 焊盘特征 |
|---|---|---|---|
| 低密度(most) | M | A | 焊盘最宽松,封装占地最大 |
| 中等密度(nominal) | N | B | 尺寸适中,默认选这个 |
| 高密度(least) | L | C | 焊盘最紧,适合高密度板 |
反直觉的地方在于M对应 most,指的是「焊盘最宽松」,不是「最密」。很多人的第一反应是 M 代表 mini,结果建出来的是最大号的盘,装在高密度板上完全放不下。记住一句话:M 是「给得最多」,L 是「给得最少」。
密度等级在名字里的位置是紧贴单位的,看两个官方示例:
SOIC127P1041X419_8NMM:SOIC 族,pitch 1.27mm,体宽 10.41mm,高度 4.19mm,8 脚,N 密度,单位 mm。DIP762W46P254L1918H533Q7_14BMM:DIP 族,引脚间距 7.62mm,引脚直径 0.46mm,pitch 2.54mm,体长 19.18mm,高度 5.33mm,7 脚,B 密度(插件),单位 mm。
_8NMM这一段是整份规范最坑的写法:它其实是_8N+mm,密度字母和单位紧挨着。人读没问题,写解析脚本时如果按「单位两个字符」去切,会把NM当成单位,剩下一个孤零零的N没法解释。我自己落地时习惯插一个下划线写成_8N_mm,含义不变,机器解析稳得多。这条在下一章的排查里还会出现。
4.3 后缀消歧:_1、R 和两组引脚数
尺寸完全一样的器件,名字必须能区分的场景有四种,规范 5.1 条给了对应的后缀规则:
公差不同:8 脚 SOIC,引脚跨距有的厂家是 6±0.1,有的是 6±0.2。这种情况在末尾加数字序号区分,1、2、3……,例如SOIC127P1041X419_8N_1mm。序号加在密度等级之后、单位之前,顺序别搞反。
引脚顺序相反:有些器件的引脚是顺时针排的,和常规逆时针相反。这种在末尾加R,例如PLCC127P990X990X457_20Rmm。R放在密度等级后面,因为它描述的是「整个器件的引脚排布」,属于器件级属性而非尺寸属性。
引脚最大编号大于引脚总数:手册上的引脚编号到 14,实际只有 4 个引脚(常见于把多个引脚焊在一起接散热或做机械固定的器件)。命名要先写实际引脚数,再写最大编号,例如DIP762W46P254L1918H533Q_4_14Bmm。
实际引脚数大于编号数:反过来,有编号的 48 个引脚,加上散热盘和机械脚实际 56 个。命名写「实际数_编号数」,例如BGA48C75P6X8_800X1200X120_56_48Nmm。
另外一类是晶体管和场效应管的引脚极性排列,不同厂家三个极的位置不一样。规范的做法是在名字里直接写引脚 1、2、3 对应的极,例如SOT95P237X117_BCE_3Nmm表示 1=B、2=C、3=E。这个名字的信息量非常大:封装工程师不用查手册就知道焊盘该怎么对应,贴片厂的程序也能直接核对。
四种消歧后缀的共同逻辑是:名字里必须能唯一确定几何和引脚语义。只要两条信息在名字里体现不出来,就一定会有人在建库时用错。
4.4 把规则套到无源器件上:电阻、电容、电感的完整拆解
无源器件占了库里的绝大多数,规范 5.2 到 5.5 给了非常细的分支。电阻类:
| 子类 | 命名格式 | 示例 |
|---|---|---|
| 片状电阻 | resc_e{Type}_{L}x{W}x{H}x{PinLen}{Level}mm | resc_e2010_500x250x65x60nmm |
| 模制电阻 | resm{L}x{W}x{H}{Level}mm | — |
| 柱状电阻 | resmelf{L}x{D}{Level}mm | resmelf260x76nmm |
| 引脚凹陷排阻 | rescav{Pitch}p{L}x{W}x{H}_{PinQty}{Level}mm | rescav50p160x100x55_8nmm |
| 引脚凸出等宽排阻 | rescaxe{Pitch}p{L}x{W}x{H}_{PinQty}{Level}mm | — |
| 引脚凸出不等宽排阻 | rescaxs{Pitch}p{L}x{W}x{H}_{PinQty}{Level}mm | — |
| 引脚平滑排阻 | rescaf{Pitch}p{L}x{W}x{H}_{PinQty}{Level}mm | — |
| 轴向电阻 | resadh/resadv{LeadSpacing}w{LeadDia}l{BodyL}d{BodyD}{Level}mm | resadh800w52l600d150bmm |
resc_e2010_500x250x65x60nmm逐段拆开:resc片状电阻、e2010片式元件通用尺寸代号、500体长 5.00mm、250体宽 2.50mm、65高度 0.65mm、60引脚长度 0.60mm、n中等密度、mm公制。这里有一个高频误解:e2010里的 2010 是行业通用代号(英制 0.2×0.1 英寸),和后面的实测公制尺寸是两个东西,两个都要写,不能互相替代。代号解决「能不能和别的库对上」,实测尺寸解决「焊盘到底画多大」。
电容类的分支更碎,但规律一致:
- 表贴:
capc无极性、capcp有极性、capcwr线绕矩形、capm模制无极性、capmp模制有极性、capae表贴铝电解。 - 阵列:
capcav凹陷、capcaf平滑、`
本文还有配套的精品资源,点击获取