
一颗晶振、两颗电容,占了 BOM 不到三毛钱,却是硬件调试里最容易"看起来没问题、上量产就出事"的电路。样机阶段十台里有八台能跑,剩下两台不启动;跑起来的那八台,高温老化两小时后 RTC 又慢了十几秒。这类问题十有八九不是芯片坏了,而是晶振电路从选型到布局有一处没算对。
先把问题分成两类,排查顺序完全不同:
前者是"开不了机",后者是"能开机但时间不对"。下面按这两条线,把关键点逐个说清楚。

这是最常见的错误来源。很多人看到参考设计上写着 22pF 就照抄,结果频偏一路偏慢,怎么调代码都不对。
无源晶振的标称频率是在指定负载电容 CL 下标定出来的。电路实际提供的负载电容是:
CL = C1 × C2 / (C1 + C2) + Cs
其中 Cs 是杂散电容(PCB 走线、芯片引脚、焊盘),典型 3~5pF。当 C1 = C2 时:
C1 = C2 = 2 × (CL − Cs)
举个例子:晶振规格书写 CL = 8pF,按 Cs = 4pF 估算,实际应选 C1 = C2 = 8pF,而不是 22pF。
晶振 CL | 杂散 Cs=3pF 时 C1=C2 | 杂散 Cs=5pF 时 C1=C2 |
|---|---|---|
8pF | 10pF | 6pF |
10pF | 14pF | 10pF |
12pF | 18pF | 14pF |
20pF | 34pF | 30pF |
电容偏大会让频率偏低,偏小则偏高,方向是相反的。电容材质必须用 C0G/NP0,X7R 的容值随温度和直流偏压变化能到 ±15%,等于给频偏又叠加了一层不确定量。
还有个细节:多数晶振的"牵引灵敏度"(trim sensitivity)只有 10~15ppm/pF 量级。也就是说 CL 差 2pF,频偏就跑掉 20~30ppm——对 UART 波特率、CAN 位定时、USB 全速这些场景,已经足够让通信偶发误码了。
晶振要维持振荡,振荡电路的负性阻抗 |−R| 必须大于晶振本身 ESR 的若干倍。行业惯例是 |−R| ≥ 5 × ESR(最低不能低于 3 倍),裕量不足的表现就是:常温能起振,低温或批次更换后起不来。
测量方法很土但有效:在晶振支路串联一个可变电阻 Rq,从小到大调,直到振荡停止,此时 Rq 的阻值约等于 |−R|。工程上可以串几个固定电阻(100Ω、220Ω、470Ω、1kΩ)逐步试,比可调电阻更接近实际。
几类常见晶振的 ESR 上限,选型时要对着看:
类型 | 频率 | ESR 典型/上限 | 备注 |
|---|---|---|---|
音叉晶振 | 32.768kHz | 35~70kΩ | 驱动极弱,起振慢,最怕负载电容偏大 |
贴片无源 | 8MHz | 40~80Ω | 最常见,裕量通常够 |
贴片无源 | 16/25MHz | 30~60Ω | 高速 USB 场景要更严 |
泛音晶振 | 3 次泛音 | 60~100Ω | 需要 LC 选频,否则振在基频 |
如果 |−R| 不够,处理顺序是:先减小 CL(电容选大了),再减小串联电阻 Rs,然后换低 ESR 晶振,最后检查是不是用错了 MCU 的驱动档位(很多芯片有 XOSC 驱动强度寄存器)。
驱动电平 DL 是晶振实际承受的功率,超规格不会立刻坏,但会带来三个后果:频率随负载漂移、老化加速(一年跑掉几十 ppm)、极端情况下晶体开裂。
估算方式:
DL ≈ I² × ESR,其中 I = 2πf × CL × Vpp
以 8MHz、CL=8pF、Vpp=1V 为例,I ≈ 2π × 8e6 × 8e-12 × 1 ≈ 0.4mA,乘以 ESR 60Ω 再平方量级算下来在几十微瓦,属于安全区。但换成低 ESR 晶振(比如 20Ω)配大驱动档位,就可能顶到规格上限。
常见规格是 10µW / 100µW / 500µW 三档。抑制手段就是串 Rs,几十到几百欧,既压驱动又抑制高次谐波,代价是负性阻抗会同步下降——所以 Rs 和 |−R| 是一对需要平衡的参数。
Rf(通常 1MΩ~10MΩ)的作用是把反相器偏置在线性放大区,让电路有足够的增益起振,同时稳定占空比。绝大多数 MCU 内部已经集成,外部再加一颗 1MΩ 一般无害,但加上后如果起振变慢,说明原本的偏置已经在临界点,问题其实在负性阻抗。
晶振电路对布局的敏感度远高于一般数字电路,因为它是高阻抗、小信号的模拟节点。
还有一个常被忽略的点:两颗负载电容的地要就近回到芯片的地,不能走长路径绕到板子另一头。这段回流路径的寄生电感会直接吃掉起振裕量。
普通无源探头输入电容 10~15pF,直接点在晶振引脚上,等于给电路并了一颗大电容——轻度表现是频率拉偏几百 ppm,重度直接停振。你测到的现象和实际工作状态根本不是一回事。
正确做法按可靠性排序:
频偏计算:ppm = (f_meas − f_nom) / f_nom × 10⁶。25℃ 下超过 ±30ppm 就要怀疑 CL 失配。
MHz 级 AT 切型晶振:频率-温度曲线是抛物线,拐点在 25℃ 附近,系数约 −0.04ppm/℃²。−20℃ 到 +70℃ 区间,频偏大致 ±20~30ppm。
32.768kHz 音叉晶振:同样是抛物线,系数约 −0.035ppm/℃²。
Δf/f (ppm) ≈ −0.035 × (T − 25)²
25℃ 之外偏 15℃,就是 −7.9ppm;对 RTC 而言一天约走慢 0.68 秒,一个月就是 20 秒。所以 RTC 走时不准,先别怀疑固件,先算这笔温度账。
老化:常规晶振 ±3~5ppm/年,高温环境加速。做十年寿命设计的产品,老化必须进预算。
总误差预算要这样列:
误差项 | 典型值 | 说明 |
|---|---|---|
初始公差 | ±10~30ppm | 规格书标称 |
负载电容失配 | ±10~20ppm | CL 差 1~2pF 就够 |
温度漂移 | ±20~30ppm | 工业级温区 |
老化(首年) | ±3~5ppm | 逐年累加 |
加起来的绝对值对 CAN、USB、以太网这些对时钟敏感的总线,必须核对协议余量,不能只看单个器件规格。
之前一个手持设备,现场反馈"时间越用越不准,一天能慢三四秒"。拿回来拆开查:
把电容换成 15pF 的 C0G,实测频偏回到 −8ppm,一天误差降到 0.7 秒以内。整个过程没改一行固件。
这个案例说明一件事:频偏问题优先查物料和容值,别急着怀疑代码。固件能做的是校准和温补,都是"事后补偿";硬件把 CL 配对到位,才是一开始就该做的事。
不是所有场合都该用"晶体 + 两颗电容"的方案。按精度和成本做一个简单取舍:
方案 | 典型精度 | 成本 | 起振 | 适用场景 |
|---|---|---|---|---|
无源晶振(XTAL) | ±20~50ppm | 最低 | 需外部电容,依赖 MCU 驱动 | 通用 MCU、消费电子 |
有源晶振(OSC) | ±20~50ppm | 中 | 上电即输出,无需匹配 | 需要独立时钟源、多芯片共享 |
TCXO | ±0.5~2ppm | 高 | 上电即输出 | 通信、GPS、计量 |
MCU 内部 RC | ±1~3%(未校准) | 零 | 无 | 对时序不敏感的场合 |
如果系统里有 USB、以太网、CAN FD 这类对时钟敏感的总线,别省这颗晶振;如果是纯本地控制、串口通信余量足够,内部 RC 校准后也能用——但要知道它的温漂是百分比级的,不是 ppm 级。
设计算得再准,产线上一颗助焊剂残留就能让整批产品低温不起振。
晶振本身是低电平信号,但它的高次谐波会顺着走线辐射出去。8MHz 时钟的 12 次谐波正好落在 96MHz,如果走线长、没有包地,很容易在辐射测试里变成一条窄带超标。
整改手段不是给晶振加屏蔽罩,而是:
现象 | 首查项 | 常见根因 |
|---|---|---|
完全不起振 | 负性阻抗、焊接 | ESR 偏大、电容选太大、虚焊、助焊剂残留漏电 |
起振慢(>5ms) | CL、驱动档位 | 32.768kHz 晶振 CL 偏大、驱动电流不足 |
频偏偏慢 | 负载电容 | C1/C2 大于计算值、用了 X7R |
频偏偏快 | 负载电容、杂散 | 电容偏小、探头电容影响未扣除 |
低温起不来 | 负性阻抗裕量 | 裕量不足 3 倍,低温 ESR 上升 |
高温停振 | 驱动电平、ESR | 过驱动导致晶振特性劣化 |
偶发死机、通信误码 | 时钟精度 | 频偏超总线容限 |
RTC 走时慢 | 温度补偿 | 未做温补,音叉晶振抛物线未校正 |
上板之前对着过一遍,能省掉后面一周的调试:
晶振电路的问题有个共同特点:设计阶段十分钟就能算清楚的事,调试阶段要花十天。 公式都不复杂,难的是愿意在画板子之前把 CL 和负性阻抗真的算一遍。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。