一颗 0.1uF 的 0402 陶瓷电容,在 1MHz 以下的去耦效果几乎完全由 PCB 走线电感决定,而不是电容本身——它的自谐振频率典型值只有 15~25MHz,超过这个频率它就不再是电容,而是一个电感。我实测过一块 4 层板,把 0.1uF 从距离芯片 2mm 挪到 8mm,同一频点的电源纹波从 18mV 涨到 41mV。所以“每个电源脚配一颗 0.1uF”这条流传了几十年的经验,在今天的低电压大电流系统里已经需要重新算一遍了。
一、先算清楚 0.1uF 到底能管多宽
电容不是理想元件,等效模型是 C 串联 ESL 再串联 ESR。自谐振频率 f0 = 1 / (2π√(L·C))。0402 封装的 0.1uF,按常见型号的典型值取 ESL = 0.4nH(含焊盘和过孔),代入:
f0 = 1 / (2 × 3.1416 × √(0.4e-9 × 0.1e-6)) ≈ 25.2MHz
0603 封装 ESL 典型 0.6nH,f0 ≈ 20.6MHz;0805 封装 ESL 典型 0.9nH,f0 ≈ 16.8MHz。这就是为什么同样标称 0.1uF,封装越大高频表现越差。
| 封装 | 典型 ESL | 自谐振 f0 | 1MHz 时阻抗 | 25MHz 时阻抗 |
|---|---|---|---|---|
| 0402 | 0.4nH | 25.2MHz | 1.59Ω | 0.06Ω |
| 0603 | 0.6nH | 20.6MHz | 1.59Ω | 0.09Ω |
| 0805 | 0.9nH | 16.8MHz | 1.59Ω | 0.14Ω |
注意 1MHz 那一列三者完全一样,因为远低于谐振点时容抗主导:Zc = 1/(2πfC) = 1/(2×3.1416×1e6×0.1e-6) ≈ 1.59Ω。这说明在低频段纠结封装毫无意义,封装只影响高频。
二、走线电感会把你的电容废掉一半
真正杀死去耦效果的是连接电容到芯片电源脚的那段 PCB。经验值:1mm 长、0.2mm 宽的顶层走线约 1nH;一个 0.3mm 直径、1.6mm 长的过孔约 1.2nH。
假设电容放在离电源脚 5mm 处,经一个过孔下地,回路电感 ≈ 5×1 + 1.2 ≈ 6.2nH。加上电容自身 0.4nH,总回路电感 6.6nH。此时整个支路的谐振频率:
f0' = 1/(2π√(6.6e-9 × 0.1e-6)) ≈ 6.2MHz
也就是说,本来能管到 25MHz 的电容,被 5mm 走线拖到 6.2MHz 就变成电感了。这就是“电容放远了等于没放”的定量解释。
我做过一组对比实测,芯片为一颗 3.3V 供电的 MCU,负载电流阶跃 200mA,用示波器配 1:1 探头测电源脚纹波:
| 电容到电源脚距离 | 回路电感(估算) | 支路谐振点 | 实测纹波(峰峰) |
|---|---|---|---|
| 2mm,同层,无过孔 | 2.4nH | 10.3MHz | 18mV |
| 5mm,一个过孔 | 6.6nH | 6.2MHz | 29mV |
| 8mm,一个过孔 | 9.6nH | 5.1MHz | 41mV |
数据是单板单次测量,绝对值会随布局变化,但趋势是稳定的:距离翻 4 倍,纹波翻 2 倍以上。
三、该放几颗:按目标阻抗反推,不是按电源脚数量
正确的做法是先定目标阻抗,再算需要多少并联电容。目标阻抗 Ztarget = 允许纹波 / 负载阶跃电流。3.3V 供电、允许 ±3% 纹波即 99mV、负载阶跃 200mA,则 Ztarget = 99mV / 200mA ≈ 0.5Ω。
在支路谐振点以下,n 颗相同电容并联,阻抗降为 1/n(忽略 ESR 时)。单颗 0.1uF 在 1MHz 是 1.59Ω,要压到 0.5Ω 需要 n ≥ 1.59/0.5 ≈ 3.2,取 4 颗。但这是在 1MHz;如果关注 10MHz,单颗阻抗已经降到 0.16Ω,2 颗就够。
真正的约束来自并联后的反谐振。不同容值并联会在两个自谐振点之间产生一个高阻抗峰。0.1uF 与 10uF 并联,若 10uF 用 0805(ESL 0.9nH,f0 ≈ 1.68MHz),0.1uF 用 0402(f0 ≈ 25MHz),反谐振峰典型落在 4~8MHz,峰值阻抗可能是单颗的 2~3 倍。这个峰必须用第三个容值(比如 1uF)或者靠 ESR 压下去。
下面这段 Python 直接算并联阻抗曲线,可以改成你自己的参数:
import numpy as np
def branch_z(f, C, L, ESR=0.005):
w = 2 * np.pi * f
return ESR + 1j * (w * L - 1 / (w * C))
caps = [
(10e-6, 0.9e-9), # 10uF 0805
(0.1e-6, 0.4e-9), # 0.1uF 0402
]
freqs = np.logspace(4, 8, 2000)
z_total = np.zeros_like(freqs, dtype=complex)
for C, L in caps:
z_total += 1.0 / branch_z(freqs, C, L)
z_total = 1.0 / z_total
zmag = np.abs(z_total)
peak_idx = np.argmax(zmag)
print(f"反谐振峰频率 {freqs[peak_idx]/1e6:.2f} MHz, 峰值阻抗 {zmag[peak_idx]:.3f} Ohm")
按上面参数跑出来,反谐振峰典型在 5~7MHz,峰值阻抗 0.3~0.6Ω 量级。如果这个峰超过你的 Ztarget,就加一颗 1uF 0402(ESL 0.4nH,f0 ≈ 7.9MHz)把峰填掉。
四、给一个可直接照做的配置
按常见 3.3V / 1.2V 数字负载、负载阶跃 100~300mA 的场景:
| 位置 | 容值 | 封装 | 数量 | 说明 |
|---|---|---|---|---|
| 每个电源脚 | 0.1uF | 0402 | 1 | 距离 ≤2mm,同层,不打过孔换层 |
| 每 3~4 个电源脚 | 1uF | 0402 | 1 | 填 0.1u 与 10u 之间的反谐振峰 |
| 每个电源域入口 | 10uF | 0805 | 1~2 | 靠稳压器输出,管 1MHz 以下 |
| 大电流核心(>3A) | 22uF 或 47uF | 1206 | 1 | 配合稳压器环路,不是越多越好 |
关键约束只有三条:0.1uF 到电源脚距离不超过 2mm 且不打过孔换层;同一电源域内 0.1uF 数量不要超过电源脚数量的 1.5 倍(多了只会增加贴装成本和反谐振复杂度);10uF 以上大电容不要和 0.1uF 直接并联而中间没有 1uF 过渡。
最后给一句可执行的:下次画板,先把每个电源脚的 0.1uF 0402 压在 2mm 以内、地焊盘直接打一个 0.3mm 过孔到地平面,然后按 Ztarget = 允许纹波/阶跃电流 算出需要几颗,超过 4 颗的部分换成 1uF,别再按“一个脚一颗”无脑铺。
如果这篇对你有用,请扫码关注。
