1. 先把晶振电路这件事想明白
晶振电路看着是原理图上最简单的一坨东西——一个晶体加两个电容,很多人画板子的时候顺手就抄了参考设计,连值都不换。但等到打样回来上电,发现MCU根本跑不起来,或者跑起来了频偏十几ppm,通信误码率一塌糊涂,才发现这块是最难查的。我自己就吃过这个亏:一块工业采集板,量产两百台里有七八台在低温下起振慢,上电要等两秒才跑起来,最后查出来是匹配电容用了参考设计的18pF,而晶体本身要的是12.5pF,负性阻抗裕量卡在临界点上。
这篇东西我打算把晶振从选型到画板的整个过程捋一遍,包括晶体本身读哪几个参数、匹配电容到底怎么算、PCB上那两根线为什么不能随便走、以及焊完之后怎么判断它到底稳不稳。如果你正在做MCU最小系统、通信模块、RTC或者任何带时钟的板子,这些内容基本都能直接用。哪怕你刚入门画第一块板,看完也能明白那几个电容为什么不能"随便放一个"。
1.1 无源晶振和有源晶振的区别
先把概念理清楚,不然后面所有讨论都是空的。我们平时说的"晶振",严格讲分两类:
无源晶体(Crystal,也叫石英晶体谐振器)本质是一个压电谐振元件,它自己不会振荡,必须配合芯片内部的皮尔斯振荡器电路,再加上外部的两个负载电容,才能起振。它没有方向性要求,两个脚可以互换,体积小、成本低,常见封装是 3225、2016 或者直插的 HC-49S。MCU 主时钟、32.768kHz 的 RTC 时钟,绝大多数用的都是这种。
有源晶振(Oscillator,SPXO/TCXO/VCXO/OCXO 这些)内部已经集成了一个完整的振荡电路,你给它供电,它就在输出脚上给你一个方波。四脚封装是最常见的:VCC、GND、OUT、OE(或者 NC)。它不需要外部匹配电容,输出是低阻抗的,可以直接驱动芯片的时钟输入脚,抗干扰能力强,但价格是无源的好几倍,功耗也高。
| 对比项 | 无源晶体 | 有源晶振 |
|---|---|---|
| 是否需要外部电容 | 需要,通常2个 | 不需要,内部已集成 |
| 输出形态 | 正弦波,幅度由芯片决定 | 方波,CMOS/LVDS等 |
| 精度范围 | ±10 ~ ±50 ppm(普通) | ±0.5 ~ ±50 ppm |
| 起振时间 | 1ms ~ 1s(音叉很慢) | 通常 < 10ms |
| 成本(万元级用量) | 几毛到两块钱 | 几块到几十块 |
| 抗电源噪声能力 | 弱 | 强 |
| 典型场景 | MCU主时钟、RTC | 通信PHY、ADC采样时钟、FPGA |
选哪个不是看哪个"高级",而是看需求。MCU 主时钟用无源完全够,因为芯片内部的振荡器就是为它设计的;但如果你要给一颗高速ADC提供采样时钟,抖动要求到皮秒级,那无源方案基本不用考虑,直接上有源,甚至要上TCXO。
1.2 皮尔斯振荡器到底长什么样
绝大多数MCU用的是皮尔斯(Pierce)振荡器结构。它的核心是一个反相放大器(芯片内部的那个反相器),输入端和输出端之间接一个很大的反馈电阻 Rf(通常几百kΩ到几MΩ,很多芯片已内置),然后晶体跨接在反相器的输入和输出之间,两端各有一个电容 C1、C2 接地。
它为什么能振荡?通俗讲:反相器把输入信号反了180度,晶体和电容构成的网络再产生180度相移,总共360度,形成正反馈,满足巴克豪森条件就振起来了。晶体在这里扮演的是一个极高Q值的选频元件,Q值能到几万甚至几十万,所以它的频率非常稳定,外围的杂散参数都改变不了它太多。
这里要记住一个关键概念:负性阻抗。振荡器能不能起振,取决于振荡电路呈现的负阻 -R 的大小,必须大于晶体本身的等效串联电阻 ESR,而且要有足够裕量。经验做法是 -R ≥ 5 × ESR,严格一点的场合要求 10 倍。后面实测部分会讲怎么测这个值。
1.3 什么时候必须放弃无源方案
有三种情况我建议直接上有源晶振,别在无源上折腾:
第一种是对频率精度要求超过 ±20ppm 的场合。普通无源晶体的初始容差就有 ±10ppm,再加上负载电容偏差、温漂、老化,一年下来跑偏几十ppm很正常。通信协议的频偏容限通常是 ±20ppm 到 ±30ppm,卡在边缘上非常危险。
第二种是对起振时间有要求的。32.768kHz 的音叉晶体起振时间在几百毫秒到一秒量级,如果你要做低功耗快速唤醒的设备,这个时间是硬伤。有源晶振上电几毫秒就稳定了。
第三种是环境振动、温度变化大的场合。无源晶体对机械振动和温度都比较敏感,工业现场或者车载环境,直接上有源会省掉很多售后麻烦。
我个人经验是:主时钟能上无源就上无源省钱,但通信和采样的时钟源,宁可多花几块钱上有源。这不是抠出来的成本,是省下来的返工和调试时间。
2. 元件选型:几个参数决定电路能不能稳
2.1 频率容差、负载电容和温度特性怎么读
打开一份晶体的规格书,第一眼要看的是这几个参数,它们直接决定了外围电路怎么设计:
标称频率:就是你想让芯片跑多快。注意别买错,比如 8.000MHz 和 8.192MHz 是两个完全不同的东西,后者是给串口波特率分频用的。
频率容差(Frequency Tolerance):在 25℃、标称负载电容下的初始偏差,常见 ±10ppm、±20ppm、±30ppm。这个参数说的是出厂时的分散度。
频率温度特性:在工作温度范围内的频率变化量。注意这个值和上面是分开给的,很多便宜晶体这两个数是相加关系,不是包含关系。比如 ±20ppm 的容差加 ±30ppm 的温漂,最坏情况就是 ±50ppm,很容易超标。
负载电容 CL(Load Capacitance):这是整个设计里最关键的一个参数。晶体只有接上正确的负载电容,才会振荡在标称频率上。常见的有 6pF、8pF、10pF、12.5pF、16pF、20pF。这个值不是你想改就能改的,必须按晶体的规格来配。
等效串联电阻 ESR:晶体在谐振时的等效电阻,反映振荡的难易程度。32.768kHz 音叉晶体通常 30kΩ 到 70kΩ,8MHz 的一般 60~100Ω,16MHz 大概 40~80Ω,25MHz 在 30~50Ω 左右。ESR 越大,越难起振,对芯片内部驱动能力要求越高。
驱动电平(Drive Level):允许加在晶体上的最大功率,常见 100µW 到 500µW,音叉晶体常常只有 1µW 甚至 0.1µW。超过这个值晶体会加速老化甚至直接损坏,这是新手最容易踩的坑。
老化率:一般 ±3ppm/年或者 ±5ppm/年,做长寿命产品要考虑进去。
读取顺序我建议是:频率 → 负载电容 → ESR → 驱动电平 → 精度和温漂。前四个决定电路能不能工作,后两个决定工作得好不好。
2.2 ESR 和驱动电平:两个最容易被忽略的隐形杀手
ESR 这个参数,规格书上给的是最大值,实际批次可能差异很大。有些厂家在数据手册里写 8MHz 晶体 ESR ≤ 80Ω,但你拿到实际批次可能是 45Ω,也可能是 78Ω。如果你按最坏情况设计,没问题;如果按典型值设计,量产就会翻车。
ESR 偏大的直接后果是起振困难。芯片内部反相器的跨导 gm 是固定的,它能提供的负阻是有限的,负阻和 ESR 的比值不够,就会出现"上电半天不起振"或者"温度一低就停振"的现象。这也就是为什么同一套电路,换个厂家的晶体就不工作了。
驱动电平的计算,很多资料讲得很复杂,实测里我用的是简化思路:先把电路跑起来,用示波器测晶体两端的峰峰值 Vpp。
注意:直接拿普通无源探头去测晶体的引脚,探头的输入电容(典型 10~15pF)会并到负载电容上,直接把频率拉偏,甚至把振荡拉停。测量方法在第四节详细讲。
测出 Vpp 之后,流过晶体的电流近似是 I ≈ 2π·f·C_total·Vpp,其中 C_total 是电路的实际总负载电容。有了电流,驱动电平就能用 P ≈ ESR × I² 估算出来(严格讲是 I_rms² 乘 ESR,简化计算用峰值再乘个系数就行)。
举个数:假设 8MHz 晶体,ESR 取 80Ω,Vpp 测得 1.0V,C_total 按 12pF 算,那 I_peak ≈ 2×3.14×8e6×12e-12×1.0 ≈ 6.03e-4 A,也就是 0.6mA。I_rms = 0.6/√2 ≈ 0.42mA,P = 80 × (0.42e-3)² ≈ 14µW。这个值远低于 100µW 的上限,是安全的。
如果算出来接近甚至超过上限,就得在输出端串一个限流电阻,把驱动电平压下来。音叉晶体驱动电平上限只有 1µW 的情况很常见,这时候不串电阻基本必烧。
2.3 匹配电容不是拍脑袋,算给你看
匹配电容的计算公式很简洁,但用起来坑很多:
$$C_L = \frac{C_1 \times C_2}{C_1 + C_2} + C_{stray}$$
其中 Cstray 是PCB走线的寄生电容和芯片引脚的输入电容,一般在 3~5pF 之间。如果 C1 = C2 = C,那么:
$$C = 2 \times (C_L - C_{stray})$$
举个最常见的例子:晶体 CL = 12.5pF,猜 Cstray = 4pF,那 C = 2 × (12.5 - 4) = 17pF,选最接近的标准值就是 18pF。这就是为什么参考设计里总看到 18pF 或者 20pF。
如果晶体 CL = 6pF,那 C = 2 × (6 - 4) = 4pF,选 4.7pF 或者 5pF。这时候寄生电容占了很大比重,实际值会非常敏感,走线稍微长一点频率就偏了。
我写了个小脚本方便批量算:
def match_cap(cl, c_stray=4.0): """根据负载电容和寄生电容计算匹配电容""" c = 2 * (cl - c_stray) std_values = [2.2, 3.3, 3.9, 4.7, 5.6, 6.8, 8.2, 10, 12, 15, 18, 20, 22, 27, 33] nearest = min(std_values, key=lambda x: abs(x - c)) print(f"CL={cl}pF, Cstray={c_stray}pF -> 计算值 {c:.1f}pF, 推荐 {nearest}pF") return nearest match_cap(12.5) # 17.0 -> 18pF match_cap(6) # 4.0 -> 3.9pF match_cap(10) # 12.0 -> 12pF有三个经验点必须说一下:
第一,Cstray 不是固定值,它跟你的PCB布局强相关。走线越长、越宽、越靠近地平面,寄生电容越大。同样一块板子,晶振离芯片 5mm 和离 20mm,寄生电容能差 2~3pF。所以先布局,再定电容值,或者干脆留两个焊盘,实测之后再调。
第二,C1 和 C2 不等也能用。从公式看,只要乘积除以和等于目标值就行。不对称的配置会影响起振的相位余量,一般不推荐,但如果你手里只有几个固定值的电容,可以用不对称的方式凑出接近的等效值。比如 CL=12.5pF、Cstray=4pF 时,需要 17pF,用 15pF 和 22pF 也能凑:15×22/(15+22) = 8.9pF,加 4pF 等于 12.9pF,差 0.4pF 大概对应 5ppm 的频偏,很多场合是能接受的。
第三,很多现代MCU支持内部可编程电容。STM32 的某些系列、ESP32 这些都内置了可调的负载电容阵列。这种情况下外部电容可以不焊或者焊很小的值,通过寄存器配置就行。好处是省料、可调,坏处是精度和温漂不如外部NP0电容。如果精度要求高,我还是建议用外部电容,NP0/C0G材质,容差 ±5% 甚至 ±2%,别用 X7R。
2.4 串联电阻和反馈电阻什么时候必须加
反馈电阻 Rf:跨接在反相器的输入输出之间,作用是给反相器提供直流偏置,让它工作在放大区。很多MCU内部已经集成了这个电阻,规格书里会写"内部反馈电阻典型值 XXX kΩ"。如果芯片没说,那就要外置,一般 1MΩ 到 10MΩ,太大了噪声敏感,太小了会降低环路增益。
串联电阻 Rext:串在晶体和输出脚之间,作用是限制驱动电平。要不要加、加多大,看你的驱动电平测量结果。
| 晶体类型 | 典型 ESR | 驱动电平上限 | Rext 常用范围 |
|---|---|---|---|
| 32.768kHz 音叉 | 30~70kΩ | 0.1~1µW | 100kΩ ~ 470kΩ(部分芯片不需要) |
| 8MHz 陶瓷封装 | 60~100Ω | 100~500µW | 0Ω ~ 470Ω |
| 16MHz SMD | 40~80Ω | 100~200µW | 0Ω ~ 220Ω |
| 25MHz SMD | 30~50Ω | 100µW | 0Ω ~ 100Ω |
有一点要特别提醒:这个电阻是串在输出脚和晶体之间,不是串在两个晶体脚之间。位置放错了会改变环路特性。至于串在哪一端(输入侧还是输出侧),大多数设计方案是串在输出侧,因为输出侧是驱动端,能量大。但具体哪个位置对起振影响更小,我实测过几个方案,差异不明显,按参考设计来就行。
音叉晶体的那个串联电阻经常被忽略。32.768kHz 的晶体驱动电平上限只有 1µW,如果不限流,很多芯片的输出摆幅足以把它推到 5µW 以上,短期看不出问题,跑个一两年频率就漂了。这是我见过最隐蔽的"慢性病"。
3. PCB 落地:布局布线才是成败关键
3.1 走线到底要短到什么程度
晶振走线的核心原则就一句话:越短越好,越粗越好,不穿别的信号。
为什么短?因为走线本身就是一根寄生参数的载体。一根 10mm、8mil 宽的走线,对地寄生电容大概 0.5~1pF,电感大概十几 nH。虽然听起来很小,但对 12.5pF 这种负载电容来说,1pF 就是 8% 的偏差,换算成频率大概十几ppm。
为什么粗?粗走线的寄生电感小、机械强度好、抗耦合能力强。我一般用 8~10mil,如果空间允许放到 12mil。不用太在意阻抗,晶振频率低,50Ω 匹配没必要,走线的阻抗失配影响远小于寄生电容的影响。
具体尺寸建议:
- 晶体到芯片的距离控制在 10mm 以内,能到 5mm 最好
- C1、C2 的地端要接到同一个完整的地,中间不要用细线连接
- 走线上不要打孔,尤其是过孔;如果必须换层,尽量在晶体附近就近打,而且要在晶体和过孔之间把参考地跟着换层
- 晶体两脚走线互相之间不要平行走太远,避免耦合被破坏相位
我见过最典型的一个错误设计:工程师把 32.768kHz 晶体放在板子最边上,离芯片 25mm,走线还绕了个弯避开了按键区域。结果板子做出来 RTC 走时每天快 3 秒。改板把晶体挪到芯片旁边 4mm 处,一天误差降到 1 秒以内。这个差距不是晶体质量问题,纯粹是布局。
3.2 包地和地过孔:给晶振建个独立小房间
晶振区域我一般会做一个"包地"处理:在晶体的四周和两根走线的两侧,用地线围一圈,然后在这圈地线上每隔 3~5mm 打一个地过孔,接到完整的参考地上。
为什么要包地?因为晶振的走线上跑的是微弱的小信号,很容易被旁边的开关电源、时钟信号、数字总线耦合到噪声。包地相当于给它建了一堵墙,同时这堵墙上的地过孔提供了低阻抗的回流路径,把耦合进来的噪声就近泄放掉。
至于晶振正下方要不要挖铜,这个是有争议的:
方案A:下方铺完整地。优点是屏蔽效果好,寄生电容稳定、可预测。缺点是增加了走线对地的寄生电容(一般在 0.5~1.5pF),需要在计算匹配电容时考虑进去。绝大多数无源晶振的设计我都推荐这种。
方案B:下方挖空。优点是把寄生电容降到最低,适合 CL 只有 6pF 这种对寄生极其敏感的场合。缺点是失去了下方屏蔽,如果有信号线从底层的另一面穿过(比如四层板的第二层),耦合会直接穿过晶振区域。
如果要挖空,挖空的范围应该覆盖晶体本体和两侧走线的正下方,边界留出 1~2mm 的余量,同时挖空区内绝对不能有其它信号走线。ADI 官方的 ADC 时钟布局指南里就是这么建议的——时钟区域下方挖空,参考地平面上开槽,避免时钟噪声注入地平面。
对于有源晶振,情况又不一样:它输出的是方波,能量大,反而是要重点防止它的噪声往外辐射。这时候更推荐铺完整地,同时输出线上串一个 22~33Ω 的源端匹配电阻,把上升沿压缓一点。
3.3 电源去耦和禁布线区
有源晶振的供电脚旁边必放一个 100nF 加一个 1µF 的电容,越近越好,最好在同一个焊盘旁边。晶振对电源噪声非常敏感,尤其是 TCXO 和 OCXO,电源上的纹波会直接调制到输出频率上,形成杂散。
如果系统里有开关电源(DC-DC),晶振的供电路径要跟电源的开关节点、电感、二极管这些拉开距离。我见过一块板子,一个 24MHz 的晶振输出上总有 100kHz 左右的边带,查了半天发现是旁边 3mm 处的 DC-DC 电感的磁场耦合过来的。把那颗电感转 90 度、再把晶振的接地区域用一排地过孔隔开,杂散下去了 20dB。
禁布线区(Keep-out)的要求:
- 晶体的正下方和上方(如果是双面板,另一面)不要走任何信号线
- 晶振区域不要走电源线,尤其是大电流的
- 不要走差分对、时钟线、复位线
- 晶振输出线如果比较长,要用地线陪着走,做类似微带线的包地处理
提示:如果实在绕不开,必须在底层穿过晶振区域,那至少保证穿过的线是低速、低摆幅的信号,而且要跟晶振区域的平面做割地隔离,把交叠面积压到最小。
3.4 晶振与MCU之间那个电阻放哪里
这是个很容易被忽略的问题。前面提到输出侧的限流电阻 Rext,它的位置要尽量靠近晶体的输出脚。原因是:如果电阻靠近芯片,电阻到晶体之间那段走线就变成了一个高阻抗节点,非常容易被耦合噪声;如果电阻靠近晶体,那高阻抗节点就被压缩到了很小的范围。
反馈电阻 Rf 是个高阻节点,它对噪声最敏感,走线要尽量短,而且不能在它旁边走任何数字信号。这也是为什么很多芯片选择把 Rf 内置——外置的暴露风险太高。
还有一点:如果板上同时有 32.768kHz 和 8MHz 两个晶振,它们的布局要分开,不要共用一块包地区域。两个振荡器之间会互相牵引,尤其是频率接近或者存在谐波关系的时候。我个人的做法是两者间距至少 15mm,并且各自独立包地。
4. 实测与调试:怎么判断电路真的起振了
4.1 探头一碰就停振的测量陷阱
新手最容易犯的错误,就是拿一根普通的无源探头(输入电容 10~15pF)去点晶体引脚。结果通常是两种:要么频率计显示的数字比标称值低了好几百赫兹,要么波形直接消失,探头一松开又恢复了。
这不是电路有问题,是探头把负载电容改变了。举个量化的例子:电路设计 CL=12.5pF,用了 18pF 的匹配电容,实际等效电容是 18/2 + 4 = 13pF,接近标称。探头并上去 10pF 之后,输出脚对地的电容变成 18pF 并 10pF = 6.4pF,加上另一侧 18pF,CL 变成了 18×6.4/(18+6.4) + 4 ≈ 8.7pF,比设计值低了 4.3pF,频率自然偏高几十ppm,而且负阻裕量下降,可能直接停振。
正确的测量方法有几种:
方法一:用 MCU 自带的时钟输出功能。STM32 的 MCO 引脚、ESP32 的 CLK_OUT,都可以把内部时钟分频输出到一个 GPIO 上。这个输出的驱动能力很强,可以直接接探头,测到的频率就是芯片实际使用的频率。这是最方便也最准确的方法,我强烈推荐优先用。
方法二:用低电容探头。高端的 1:10 无源探头输入电容可以做到 9~10pF,有源探头能到 1pF 以下。但即使 10pF,对 6pF 负载电容的设计来说也太大了。
方法三:串联一个隔离电阻再测。在探头尖端串一个 1kΩ 到 10kΩ 的电阻,可以降低探头的负载效应,代价是幅度会被分压影响。这个方法测频率还行,测幅度就不准了。
方法四:用非接触式的方法。有些示波器配有电流探头或者近场探头,可以隔空感应到振荡信号,完全不影响电路。成本高,但最干净。
注意:无论用哪种方法,测出的频率都只能作为参考。真正的判定标准是产品工作是否正常,以及在温度极限、电压极限下是否稳定。频率计上差几十ppm不一定有问题,但功能跑不起来一定有问题。
4.2 负性阻抗测试:判断振荡裕量的靠谱方法
判断一个振荡电路"稳不稳",最直接的方法就是测负性阻抗。思路是:在晶体的一端串一个可变电阻,逐渐加大阻值,直到电路停振,记下这个临界电阻值 Rx。那么振荡电路的负性阻抗就是 -R = Rx + ESR。
具体操作步骤:
- 把晶体的一只脚从焊盘上翘起来,串入一个可调电阻箱(或者用 0Ω 到 1kΩ 的电阻逐个试)
- 给板子上电,让电路正常振荡
- 从 0Ω 开始慢慢加大电阻,同时用 MCU 的输出功能监视时钟是否还在
- 记录时钟消失时的临界阻值 Rx
- 计算 -R = Rx + ESR(晶体规格书查 ESR)
判定标准:-R ≥ 5 × ESR 是基本要求,能做到 10 倍最好。如果算出来只有 2~3 倍,说明裕量不足,量产会有起振失败的批次。
提高负性阻抗的办法有:减小匹配电容(但会影响频率)、降低 Rext、选用 ESR 更小的晶体、换跨导更大的芯片。注意匹配电容越小,负阻越大,这也是为什么小负载电容的晶体反而更容易起振。
这个测试做了之后,你就能量化地知道你的电路有多"稳",而不是靠"上电试十次都起来了"这种定性判断。我现在的习惯是每一版新设计的时钟电路都要做一次负性阻抗测试,并且记录在案,做量产时的基线。
4.3 频偏、起振慢、停振的排查顺序
现象:频率偏离标称值较多(超过 50ppm)。
排查顺序:先看匹配电容算得对不对,实际焊接的是不是标称值(贴片电容经常拿错),再测实际负载电容是不是被走线寄生拉偏了。如果这些都正常,那大概率是晶体本身的问题,换一颗同型号的试试。还有一个隐蔽原因是芯片内部的负载电容配置寄存器没写对,很多MCU的默认值是最大档,实测下来频率自然偏。
现象:上电后起振慢,几十毫秒甚至几秒才稳定。
这通常是驱动能力不足的表现。检查电流是否被限得太狠(Rext 太大)、匹配电容是否过大、晶体 ESR 是否偏大。低温下起振慢是常见现象,因为 ESR 会随着温度降低而上升。如果产品要在 -40℃ 工作,一定要在低温箱里实测起振时间。
现象:起振后运行一段时间停振。
这个最麻烦,通常是间歇性问题。常见原因有:驱动电平过高导致晶体老化加速、晶体本身有裂纹、PCB上有虚焊、供电电压波动导致振荡器偏置点漂移。用热风枪给晶体区域加热,观察是否恢复,能帮助定位是不是温度相关的问题。
现象:通信误码率高但时钟似乎在跑。
大概率是频偏或者抖动超标。用频率计长时间测量,看频率是否在缓慢漂移(温度引起的),或者用频谱分析仪看相位噪声。这种情况往往需要换更高精度的晶振,比如从普通无源换成 TCXO。
5. 常见问题速查与踩坑记录
5.1 问题速查表
| 现象 | 最可能的原因 | 快速验证方法 | 处理方式 |
|---|---|---|---|
| 完全不起振 | 匹配电容值严重不匹配 / 芯片配置错 | 换不同容值试,查寄存器 | 重新按 CL 计算电容 |
| 起振慢(>50ms) | 驱动能力不足 / ESR 偏大 | 测负性阻抗 | 减小电容、降低 Rext、换晶体 |
| 频率偏高 | 实际负载电容偏小 | 测 C1/C2 实际值 | 加大匹配电容 |
| 频率偏低 | 实际负载电容偏大 / 探头负载 | 去掉探头用 MCO 测 | 减小匹配电容 |
| 温度升高后停振 | 负性阻抗裕量不足 | 高低温箱测试 | 换低 ESR 晶体或改电容 |
| 随机停振 | 虚焊 / 晶体有裂纹 | 补焊 / 换料 | 重焊或换料 |
| 通信误码高 | 频偏或相位噪声大 | 频谱仪看相噪 | 换有源晶振 |
| 电流异常大 | 驱动电平过高 | 测 Vpp 算功率 | 串限流电阻 |
| RTC 走时不准 | 负载电容偏差 / 晶振老化 | 对比两个批次 | 校准或换料 |
5.2 几个真实的踩坑记录
坑一:参考设计不是万能药。我最早做项目时,看到参考设计上写 22pF,就直接抄了,晶体是从另一个项目拿的。结果那个晶体要的 CL 是 10pF,配 22pF 之后实际负载电容是 22/2 + 4 = 15pF,比标称高了 5pF,频率低了大概 30ppm。板子能跑,串口也通,但做无线通信的时候距离比对手短了一大截,查了一个星期才发现是时钟偏了。教训是:参考设计只保证"能跑",不保证"跑得准",电容值必须按自己选的晶体算。
坑二:探头测出来的"频偏"是假的。有一次客户投诉说我们的板子时钟偏了 200ppm,我拿探头一测确实是偏的。后来用 MCO 输出到频率计上,偏了不到 5ppm。探头的 15pF 电容把频率拉下来了。教训是测量方法本身会引入误差,先确定测量链路是干净的再谈结论。
坑三:音叉晶体被"烧"了。一批 32.768kHz 的 RTC,用了半年之后走时开始变慢,一年下来慢了十几分钟。拆开量驱动电平,发现是 3µW,超过了规格书 1µW 的上限。晶体没有立刻坏,但老化速率被加速了。教训是驱动电平这个参数必须实测,尤其是音叉晶体,加上限流电阻的成本几乎是零,但是不加的代价是整批退货。
坑四:包地的地过孔被忘了打。一次改板,包地做了,但是忘了打接地过孔,那圈地线成了一段悬空的"天线",反而把噪声耦合进去了。板子上电后时钟抖动明显变差。加了 6 个地过孔之后恢复正常。教训是包地必须有地过孔,不然就是画蛇添足。
坑五:有源晶振的输出线太长。一块板子用了一颗 25MHz 的有源晶振,输出线走了 40mm 给两个芯片共享,中间还经过了电源区域。结果 EMC 测试辐射超标。把输出线缩短、串 33Ω 源端匹配、包地处理之后,通过测试。教训是有源晶振的输出是方波,上升沿很陡,走线长了就是一根辐射天线。
5.3 焊接与来料环节的额外提醒
晶振这个东西,焊接环节也有讲究。无源晶体的封装里,石英片是悬空固定的,如果回流焊的升温曲线太陡,或者板子在传送带上受到撞击,晶体内部可能产生微裂纹。这种损伤在常温下不一定表现,但温度一变就出问题。
我的做法是:晶振放在第二面焊接,或者至少在回流焊后避免板子有大的机械冲击。如果做的是高可靠性产品,来料最好抽检一批做温度循环测试(-40℃ 到 +85℃,100 个循环),观察频率漂移是否在规格范围内。
还有一点关于清洗:有些贴片晶体的封装不是完全密封的,超声波清洗可能会让内部结构受影响。如果一定要清洗,用低功率、短时间,清洗后做烘烤。
选料方面,同频率的晶体价格从几毛到几块不等,差价主要在精度、温度范围和一致性上。便宜的晶体最大的问题不是单颗性能差,而是批次一致性差。我见过一批 8MHz 晶体,抽了 20 颗,ESR 从 38Ω 到 79Ω,翻了一倍。这种料用在量产上,参数就没法统一设计,只能按最坏情况留裕量,结果就是设计保守、成本浪费。
如果要给一个可执行的建议,我会说:时钟是整个系统的基准,在这上面多花一毛钱的物料成本,可能省掉的是几百块钱的返工和几天的时间。宁可少选一颗电源芯片的备选型号,也要给晶振选一个参数明确的供应商,把 ESR、驱动电平、负载电容这三个值写死在规格书里。
最后再提一个我常用的验证流程,新板子上电后按这个顺序走一遍:
- 万用表测晶体两脚是否有直流偏置(反相器偏置点,一般在 VCC/2 附近)
- 用 MCO 或类似功能测实际输出频率,跟标称值比对,记录偏差
- 测晶体两端的 Vpp,估算驱动电平是否在规格范围内
- 串电阻测负性阻抗,确认裕量 ≥ 5 倍 ESR
- 高低温箱里跑起振时间和频率漂移
- 长时间老化(72小时)观测频率变化率
这套流程走下来,基本能覆盖 95% 以上的晶振问题。剩下的那 5%,往往是芯片本身的振荡器有坑,那就只能换芯片了。