ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

无源晶振不起振?负阻、ESR与驱动电平实测调试指南

无源晶振不起振?负阻、ESR与驱动电平实测调试指南 1. 先从现象说起晶振不起振问题到底出在哪做硬件这一行只要跟MCU打交道的板子几乎绕不开无源晶振。很多工程师都经历过这种折磨板子贴回来程序死活跑不起来示波器表笔往晶振引脚上一碰没波形或者波形幅度小得可怜芯片就是不给面子。我有一块板子主控用的是常规8MHz无源晶振原理图照着参考设计抄的PCB布局也按推荐来结果样品十片里有三片起振困难剩下的能跑但波形毛刺多让人非常头疼。后来逐项排查发现问题不是单一原因负阻余量不够、负载电容匹配偏差、驱动电平过高这三个坑全占齐了。从那以后我给自己定了个规矩每做一块带晶振的板子都要把负阻、ESR、驱动电平这三个参数实测一遍。宁可设计阶段多花十分钟也不愿意事后在产线上被反复折磨。今天就把这些经验全部写出来给正被晶振电路折磨的朋友们一个参考。这篇内容面向正在做硬件电路设计的工程师尤其是刚从单片机软件开发转向硬件设计的初学者。我会从原理讲起把这三个关键参数拆开揉碎再给出一套可以直接照做的测量方法和调试流程。所有测量方法我都实测验证过工具也只需要示波器、信号发生器和一台普通的LCR电桥门槛不高。1.1 无源晶振是什么为什么它比有源晶振难伺候无源晶振本质上是一块石英晶体利用石英的压电效应产生振荡。它只有两个引脚没有内置振荡电路需要借助外部芯片内部的振荡器放大器来工作。你可以把它理解成机械结构里的弹簧和质量块晶振的等效模型就是一个RLC串联谐振回路再加上一个并联电容。有源晶振把振荡电路全部封装在内部通电就能输出方波或者正弦波外部只需要供电和接地。而无源晶振必须依赖芯片内部的反馈放大器、外部负载电容、反馈电阻等元件共同构成完整的振荡回路任何一个环节不合适振荡器就可能不工作。这也是无源晶振比有源晶振“难伺候”的根本原因。很多人设计无源晶振电路时习惯直接照搬芯片手册里的典型应用图觉得参数都给你标好了照着抄总没错。但问题恰恰出在这芯片手册里的参数是基于理想情况和特定PCB寄生参数给出实际板子上的走线长度、过孔数量、引脚分布电容、温度范围、晶振本身的批次差异都会让最佳参数发生偏移。参考设计只能保证“大多数情况下能跑”不能保证“所有条件下都好”。1.2 不起振问题的常见表现和影响范围不起振的问题表现为几种典型场景。第一种是冷启动起不来上电后程序完全没有响应示波器测晶振引脚只有直流电平没有交流振荡第二种是偶发不起振十片里有两三片上电正常反复断电上电几次后有一片不工作第三种是起振但波形幅度异常比如主控芯片供电稍低或者环境温度变化时波形幅度跟着变导致时钟质量不稳定系统出现随机死机或者通信误码。这些问题的实际影响范围远超想象。晶振输出是整个系统的时钟源它一旦不正常CPU主频就乱串口波特率、USB时序、PWM频率全都会受影响。我在实际项目里遇到过最隐蔽的情况晶振本身在工作但波形上升沿变缓导致SPI外设偶尔通信失败排查了两天才定位到晶振驱动电平过高、晶振被过激励导致频率出现微小抖动。这种问题不会让你完全不能跑但会制造一堆莫名其妙的隐性故障最耗人力。2. 三个关键参数负阻、ESR、驱动电平在调晶振电路的时候我最关心的参数就是这三个负阻、ESR、驱动电平。很多人只见过ESR对负阻和驱动电平完全没概念。我先用一个公式把三者的关系串起来后面再逐个展开。振荡器起振的条件很简单就是环路增益大于1。晶振等效为一个RLC串联谐振回路在谐振频率附近呈现很低的阻抗整个回路的损耗可以用ESR来表示。为了补偿这个损耗芯片内部的放大器必须提供一个“负阻”即从晶振两端看进去呈现的等效负电阻。起振条件严格写出来是参数满足条件说明负阻负阻绝对值 ESR这是起振的基本条件负阻余量裕量系数≥5倍工程上推荐的可靠余量驱动电平不超过晶振最大激励功率防止频率漂移和老化实际设计时只满足负阻绝对值大于ESR还不够因为温度变化、晶振老化、PCB湿度变化都会让ESR变大或负阻变小。工程上一般要求负阻至少是ESR的五倍以上也就是负阻余量要有余量。这个五倍不是凭空来的是行业里多年实践总结出的安全经验能覆盖大部分工作条件变化。2.1 负阻放大电路给晶振的“推力”负阻这个概念第一次接触时很容易绕晕。正常电阻是消耗能量的负阻在交流等效模型里反而是提供能量。芯片内部的反相器放大器在晶振两端形成一个等效负阻用来抵消晶振本身的ESR损耗维持振荡不衰减。测量负阻的经典方法叫“串联电阻法”。在晶振回路里串联一颗可变电阻从0开始慢慢加大直到振荡器停振记下临界停振时的电阻值R。此时负阻的绝对值就等于ESR加上R也就是负阻 ESR R。测试时要注意晶振在回路中的位置不同测出来的负阻也会有差异。工程上很多工程师会忽略负阻测试觉得晶振能振就行。但我见过不少案例常温下一切正常到了高温环境或者低温冷启动时就死机最后排查发现就是负阻余量只有两三倍温度一变化ESR升高直接突破起振条件。所以哪怕你的电路参考设计说没问题我也建议至少测一次负阻确认余量充足。提高负阻的方法不算复杂。芯片内部的振荡器放大器增益通常是固定的我们能调整的外围参数其实有限。比较有效的方式是选用跨导更高的MCU型号或者在软件里配置振荡器为高速模式部分芯片允许通过寄存器选择不同的振荡器驱动强度。另外减小外部负载电容也能让放大器更容易起振因为等效负载变轻但这需要平衡频率精度和起振条件。2.2 ESR晶振本身的“内阻”越低调越好ESR等效串联电阻是晶振在谐振频率附近表现出来的交流电阻。它等于晶振内部石英片振动时因为摩擦、支架损耗、封装损耗产生的能量消耗。ESR越低晶振自身损耗越小起振就越容易振荡幅度也越稳定。选晶振的时候ESR是必须看的参数。常见贴片晶振的ESR在20Ω到100Ω之间频率越低ESR通常越大。比如32.768kHz的晶振ESR可能高达50kΩ以上而8MHz贴片晶振的ESR一般在40Ω到80Ω左右。如果你的设计对低功耗和快速启动有要求优先选ESR小的晶振。这里要注意一个概念区分ESR和直流电阻不是一回事。用万用表电阻档去量晶振的两个引脚你会量出几十兆欧甚至无穷大因为晶振在直流下开路。ESR必须用交流信号在谐振频率附近测量普通万用表测不出来。真正准确的测量要用LCR电桥设置频率为晶振的标称频率选择等效电路模式为串联读取R值。我之前在一个温控项目里就因为ESR吃过亏。方案选了一颗便宜的MHz级晶振手册上标ESR典型值60Ω但是批次一致性差实际ESR有的高达120Ω。配合低增益的MCU在低温时起振非常慢系统开机要等两三秒才有响应。后来换成ESR标称30Ω以内的晶振问题立刻消失。所以如果你的产品工作温度范围大ESR的批次一致性比单个标称值更重要。2.3 驱动电平给晶振的“功率”不能太大也不能太小驱动电平是晶振在工作时实际消耗的功率单位是微瓦。晶振有一个关键参数叫最大驱动电平常见的小型贴片晶振通常在100μW到500μW之间。如果实际驱动电平超过最大值晶振内部的石英片会因为振动幅度过大而出现频率漂移长期超限还会加速老化甚至导致频率永久性偏移。驱动电平太小也不行。驱动电平太小意味着振荡幅度低反馈信号弱噪声容易淹没信号起振时间变长时钟抖动变大。所以在设计时要让驱动电平落在合理区间内既不超过晶振最大额定值又不能小到影响稳定性。驱动电平的大小主要由三个因素决定芯片内部放大器的驱动能力、外部串联电阻、负载电容。其中最容易操作的就是调整串联电阻。在晶振的输出引脚通常是OSCO或XTALO与晶振之间串联一颗电阻可以限制流入晶振的电流从而降低驱动电平。这颗电阻一般取值在0到几kΩ之间具体怎么选要看示波器实测波形。我用示波器测驱动电平时会在晶振两端跨接一个高阻抗探头测量振荡波形的峰峰值。然后根据波形幅度和负载电容估算驱动功率。如果波形幅度过大比如超过供电电压那就说明晶振被过激励了需要增大串联电阻如果波形幅度太小起振慢那就减小串联电阻。3. 电路设计的关键步骤和元件选型看完参数原理再回到实际设计层面。一个完整的无源晶振电路外围元件并不多通常就是两个负载电容、一个反馈电阻有时再加一个串联限流电阻。元件数量少不代表简单每个元件的取值都直接影响振荡器的工作状态。3.1 负载电容怎么选串联匹配和并联匹配的区别负载电容是晶振电路里最容易被误解的参数。晶振有一个标称负载电容值比如8MHz晶振配套12pF负载电容这里的12pF不是让你直接往引脚上焊一个12pF电容而是指从晶振两端看出去的总负载电容。实际电路里这个总负载电容由两个外部电容串联再加上PCB寄生电容等组成。主流的接法是两个负载电容串联晶振两端各接一个到地。这时候外部电容的串联值等于两脚电容的串联等效值即C1×C2/(C1C2)。如果C1和C2都是12pF串联等效就是6pF再加上芯片引脚的寄生电容和PCB走线寄生电容一般估算在2pF到5pF合计8到11pF。要想让晶振看到12pF的总负载外部电容往往要选大一些。计算负载电容的公式是CL C1×C2/(C1C2) Cstray其中Cstray是待测电路里的寄生电容总和。很多工程师设计时直接把两个电容都取为晶振规格书标称的负载电容值比如标称12pF就焊两个12pF这个做法大多时候能工作但频率精度并不理想。正确的方式是把寄生电容估算进去比如你估计寄生电容4pF想让总负载12pF那外部串联等效部分应该是8pF两个电容就各取16pF比较合适。实际设计里还分串联谐振和并联谐振两种工作模式。无源晶振配合芯片内部放大器通常工作在并联谐振模式晶振表现的频率会略高于串联谐振频率这跟负载电容直接相关。负载电容越大振荡频率越低负载电容越小振荡频率越高。如果你的产品对时钟精度有要求比如USB或者以太网负载电容的匹配一定要认真算不能拍脑袋。3.2 反馈电阻和限流电阻的作用反馈电阻通常并联在晶振两端也就是接在芯片的XTALI和XTALO之间。它的作用是给内部反相放大器提供直流工作点偏置让放大器稳定工作在线性区。没有这颗电阻放大器输出端的直流电压会漂移振荡器可能无法可靠启动。反馈电阻的取值一般在1MΩ到10MΩ之间。MHz级晶振常用1MΩ32.768kHz晶振常用10MΩ。部分芯片内部已经集成了反馈电阻外部就不需要再加。怎么判断芯片是否内置看数据手册的系统框图如果XTALI和XTALO之间画着阻值标号说明内部已经有。不确定的话加一颗外部反馈电阻也不会有坏处只是要注意电阻本身的高频特性颗粒电阻在高频下可能引入额外寄生。限流电阻就是前面提到的串联电阻接在晶振和芯片的振荡输出引脚之间用于限制驱动电流。它的主要作用是保护晶振不被过激励同时也能改善波形质量。限流电阻不是必须的很多低成本设计直接省略但对于那些驱动能力强的芯片或者频率较低的晶振加一颗限流电阻能显著提高可靠性。限流电阻的取值经验是从几十欧到几k欧不等。我一般先不焊限流电阻用示波器测波形如果波形幅度偏大或者顶部有明显畸变再从100Ω开始逐步增大直到波形平滑无削波为止。需要注意的是增大限流电阻会同时降低负阻余量所以不能为了压波形而无底线加大要结合负阻测试综合判断。一般控制在1kΩ以内比较稳妥。3.3 PCB布局的注意事项PCB布局对晶振电路的影响很多人低估了。晶振附近有高频数字信号或者开关电源的走线会通过寄生电容耦合噪声到振荡回路导致时钟抖动加大极端情况下会干扰起振。我见过一块板子晶振旁边走了I2C总线I2C每次通信时系统时钟都会被拉偏原因是I2C信号通过寄生电容耦合进了晶振回路。正确的布局原则是晶振尽量靠近主控芯片的XTAL引脚走线短而直两个负载电容尽量靠近晶振放置且电容的地端要独自过孔到主地平面不要跟旁边的信号地共用一个过孔。晶振下方不要铺地铜或者至少不要大面积铺地因为铺地会增加寄生电容改变谐振频率。晶振外壳接地问题也需要留意。有些金属封装晶振有一个外露的可焊端这其实是外壳的接地端。如果这个接地端悬空外壳就可能成为一个天线把干扰辐射进振荡回路如果接地但接地走线绕了很远又会增加回路面积引入感应噪声。最好的做法是外壳直接就近接地走线越短越好。晶振区域最好用一圈地过孔围住形成局部屏蔽。这在射频板或者高密度数字板里尤其重要。但要注意地过孔不要离晶振本体太近以免改变晶振引脚间的寄生电容。我通常把地过孔布置在晶振封装边缘以外1mm左右既起到屏蔽作用又不至于过度影响电气特性。4. 实测方法和设备参数都懂设计也做了最终还是要靠实测验证。晶振电路设计得好不好不能靠“感觉”要用数据说话。下面我详细讲负阻、ESR、驱动电平的测量方法每一步都用最普通的实验室设备。4.1 负阻的测量方法测负阻最常用的方法是串联可变电阻法。在晶振的任意一个引脚与电路之间串联一个可变电阻从小阻值开始逐步增大直到振荡器停止振荡。这时候记录可变电阻的阻值R那么负阻的绝对值大约等于晶振ESR加上R。算出负阻后再除以晶振标称ESR就是负阻余量系数。实际操作时我会找一个10kΩ多圈电位器串联在晶振和MCU的XTALO引脚之间。示波器探头夹在XTALI端一边调电位器一边看波形。当波形幅度突然掉到几乎没有时停止调节用万用表量电位器当前阻值然后算出负阻。这个过程很快但要注意测量时不要用手碰电路人体电容会干扰起振状态。一个容易忽略的细节是测量负阻时要把所有原设计的负载电容保留在原位因为我测的是整个实际电路的负阻而不是晶振单独的参数。如果拆掉负载电容测量测出的负阻会比实际偏大导致你高估电路余量。我一般至少测三遍每次调节电位器的方向和速度不同取最小值作为参考。因为晶振起振存在迟滞现象从起振状态慢慢调大电阻到停振的临界值和从停振状态慢慢调小电阻到起振的临界值两个值会有差异这主要是由于晶振的非线性特性。工程上更关心“起振到停振”的那个临界值因为那是能保证持续振荡的最大允许损耗。4.2 ESR的测量方法ESR用LCR电桥测最方便。把LCR电桥设置为串联等效模式测试频率设置为晶振标称频率比如8MHz就设8MHz然后测量R值。这个R值就是ESR。注意测试信号电平要合适LCR电桥一般默认1Vrms但对于小体积晶振这个电平可能偏大建议有条件的话把测试电平调到0.1Vrms或0.5Vrms更接近实际工作状态。如果你手头没有LCR电桥也可以用网络分析仪测谐振曲线然后从阻抗曲线上读取谐振频率处的实部阻抗。但大多数人没有网分所以LCR电桥是更实际的方案。这里提醒一下很多手持式LCR电桥最高测试频率只有100kHz这是不够的MHz级晶振的ESR没法用100kHz测出来必须选能覆盖晶振频率的型号或者用频谱仪加反射电桥的方式间接测量。我设计验证ESR的时候一般会拿同一批次的五颗晶振分别测量记录最大值、最小值和平均值。如果同批次离散度很大比如最小值30Ω、最大值90Ω那这个供应商的品控就有问题建议换货或换品牌。ESR离散度大的晶振哪怕负阻余量够了批量生产时也会有一部分板子因为ESR偏大而起振困难。4.3 驱动电平的测量方法驱动电平的测量和计算有固定的套路。驱动电平P等于振荡器反馈回路中的功率损耗实际工程上可以通过测量晶振两端电压和流过的电流来估算。更简单的做法是用示波器测量晶振两端的峰峰值电压Vpp再根据负载电容和频率估算驱动功率。驱动电平P ≈ (Vpp/2)² × 2πf × CL_effective其中f是振荡频率CL_effective是从晶振两端看进去的有效负载电容。这个公式是工程近似但足够判断是否超限。需要注意的是示波器探头本身有电容一般是10pF到20pF直接夹在晶振引脚会改变振荡频率和幅度。所以测量时要用高阻抗低电容探头或者使用有源差分探头要不就通过一个1kΩ的隔离电阻去测量减少探头负载影响。示波器探头对晶振的影响我实测过很夸张普通10pF探头夹上去8MHz晶振的频率直接偏了200多Hz。所以测量驱动电平时更靠谱的做法是直接测量MCU的时钟输出引脚比如有些芯片有CLKOUT引脚把内部时钟分频后输出。这样探头对晶振本身没有影响测到的波形虽然经过了缓冲器但幅度信息能间接反映振荡幅度的强弱。如果没有CLKOUT引脚也可以选择间接法用示波器同时看XTALI和XTALO两端波形算出差分电压Vpp然后用上面公式估算驱动功率。这时候探头的电容误差依然存在但你可以在估算公式里把探头电容造成的额外负载算进去让结果更接近真实值。5. 常见问题与排查技巧实录设计做完测量做完接下来就是战场上最常见的排查环节了。我把自己踩过的一些坑和排查思路整理在下面希望能帮你节省几天调试时间。5.1 不起振先查元件还是先查布局遇到不起振我建议先按“元件—布局—芯片”的顺序排查。先确认晶振是不是好的用替换法换一颗已知正常的晶振试再确认负载电容的容值和封装是否焊错贴片电容颜色相近很容易贴错然后检查反馈电阻是否漏焊有些芯片内部没集成反馈电阻外部又没焊直流工作点不对自然振荡不起来。PCB布局方面重点看晶振引脚到芯片引脚的走线是否过长。晶振走线超过10mm时寄生电容和寄生电感都会明显变大振荡条件变差。如果板子空间确实紧张无法缩短走线可以适当增大负阻余量甚至换用驱动能力更强的芯片版本。芯片配置也要检查。现在很多MCU的振荡器可以分频、旁路、选择增益等级如果寄存器配置里把振荡器设成了低功耗模式可能起振困难。这类问题最折腾因为原理图看起来完全正常晶振也是好的就是不振荡。排查时一定要仔细看芯片手册中时钟初始化部分的说明确认外部高速晶振模式被正确使能。5.2 起振慢和偶发不启动多半是负阻余量不足如果你的板子不是完全不起振而是上电后有几百毫秒甚至几秒的延迟才开始工作或者温度变化时偶发不启动十有八九是负阻余量不足。这种情况下用串联电阻法测一下负阻和ESR的比值我保证大多数会低于五倍。负阻余量不足的补救措施有几个。第一换ESR更低的晶振这是最直接的办法第二减小负载电容能同时提高负阻和起振速度第三如果芯片有驱动强度配置把振荡器驱动强度调高一档。调驱动强度时要注意驱动太强会引发过激励问题需要配合驱动电平测量一起验证。另外一个容易忽略的原因是外部电容的ESR偏高。有些廉价陶瓷电容损耗角太大在振荡回路里引入了额外损耗等效增加了回路总损耗导致起振困难。这类问题很难从外观上判断只能用相同容值、品质更好的电容替换测试。我通常在晶振电路里用C0G材质的电容性能稳定损耗低。5.3 波形畸形和频率偏移先怀疑驱动电平过激励晶振波形不应该是一个完美的正弦波因为经过芯片内部放大器后会有一定程度的限幅但正常情况下波形应该是圆滑的没有明显毛刺和平台。如果你在XTALO引脚看到类似方波的平顶波形而且幅度接近芯片供电电压说明振荡器被过激励了晶振正在承受过大的驱动功率。过激励的后果很严重频率会轻微偏移且随着时间推移晶振内部石英片可能产生微裂纹导致频率永久性漂移早晚出问题。处理方式就是增大限流电阻。先从100Ω开始逐步加大到330Ω、510Ω、1kΩ每换一个值都测一下驱动电平直到波形平滑、驱动功率降到晶振额定值以下。频率偏差如果很大比如8MHz晶振实测频率偏差超过500Hz除了驱动电平问题还要检查负载电容。可以试试增减两个负载电容的值来微调频率。增加电容会降低频率减小电容会提升频率。但调整范围有限如果偏差太大问题大概率在晶振本身或PCB寄生参数异常。5.4 问题速查表现象可能原因排查方向完全不起振反馈电阻缺失、晶振损坏、配置错误检查反馈电阻、替换晶振、核对芯片寄存器起振慢负阻余量不足、负载电容过大测负阻、减小负载电容、换低ESR晶振偶发不启动ESR批次离散、温度影响统计ESR离散度、测全温范围负阻波形平顶/削波驱动电平过高加限流电阻、调低驱动强度频率偏移大负载电容不匹配、过激励调整负载电容、测驱动功率波形毛刺多PCB布局干扰、探头接触不良检查晶振区域走线、用低电容探头复测6. 最后几点调试心得做晶振电路调试做多了我形成了一套自己的固定动作。板子拿回来后先不着急写程序直接用示波器看晶振引脚波形。如果波形正常我把手按在晶振旁边的PCB区域模拟人体干扰再看波形是否稳定。这一步能快速判断负阻余量是否足够如果手一靠近波形就开始乱跳说明余量不足必须整改。测负阻和驱动电平时我习惯把测试结果记录到设计文档里包括温度、湿度、供电电压等条件。因为这两个参数受外部环境影响很大当下测出的数值只能代表当前状态。批量产品要控制好晶振来料质量同一批次的ESR离散度太大时宁愿多加几毛钱换好一点的品牌也不要赌产线不踩雷。还有一个容易被忽视的小技巧晶振电路元件值不要照搬同一个项目里的“默认值”因为不同芯片的振荡器放大器跨导不同同样的负载电容和限流电阻在不同芯片上表现差异很大。每换一个主控平台晶振外围参数都应该重新验证一次。做了这么多年硬件我的体会是晶振电路设计没有一劳永逸的公式只有认真测量、记录数据、根据数据调整这一条路。把这些方法执行到位不起振的坑基本都能避开。希望这篇文章能让你少走一些弯路。
返回列表