拓冰建站拓冰建站
首页 / 资讯中心 / 正文

几毛钱的晶振如何驱动CPU?从压电效应到调板实战

一颗最普通的无源晶振批发价只要两三毛钱零售也不到一块钱但无论是几块钱的单片机还是几万块的服务器CPU都离不开它。CPU能开机、跑系统、处理指令全靠这颗不起眼的小东西在背后提供一个稳定的“心跳”。晶振的工作原理说白了就是石英晶体的压电效应但真正把原理落到电路上牵扯到起振条件、负载电容匹配、有源和无源晶振的选型、PCB布线等一堆细节。这篇文章我打算把晶振从物理原理讲到实际调板经验重点拆解它是怎么起振的、有源和无源到底差在哪、以及我在项目里踩过的那些不起振和走时不准的坑。1. 一颗几毛钱的晶振凭什么让CPU乖乖听它的1.1 数字系统的时间基准没有时钟CPU就是一堆沙子很多人刚接触嵌入式时会有个疑惑CPU内部不是有主频吗比如3.6GHz怎么还需要外部晶振这里必须分清一个概念——CPU内部那个3.6GHz是PLL锁相环倍频之后的结果PLL本身需要一个低频率、高精度的参考时钟。这个参考时钟的来源绝大多数情况就是一颗外部晶振。数字电路本质上是一个状态机所有寄存器的翻转、状态跳转、总线读写都必须由一个统一的时间节拍来驱动。这个节拍就是时钟信号。你可以把CPU想象成一个庞大工厂时钟信号就是工厂的上下班铃铃声一响所有工位开始同时动作。铃响的时间间隔如果不稳定今天8点响明天8点半响整个工厂的协同就全乱了。那能不能用电阻电容搭一个RC振荡器当节拍能很多单片机内部确实有RC振荡器比如STM32的HSI、LSI还有AVR的内部RC。但RC振荡器的精度通常在±1%~±3%温漂还大今天25度时跑得准明天85度就偏了几个百分点。这种精度让串口通信偶尔乱码、USB枚举失败、CAN通信直接报错更别说PCIe、DDR、Ethernet这种需要严格时序的总线了。晶振的精度可以做到±10ppm甚至±0.1ppm比RC振荡器高两到三个数量级。ppm是百万分之一±10ppm的晶振一年累积误差也才几分钟这是数字系统能稳定运行的地基。1.2 从32768Hz到上百MHz晶振家族里的“性价比之王”晶振的频率跨度非常大从手表里那颗32.768kHz的小音叉晶体到网卡PHY上的25MHz无源晶振再到服务器主板上的100MHz差分有源晶振全是石英晶体的天下。32.768kHz这个频率特殊因为2的15次方就是32768用15级分频器正好可以得到1Hz的秒脉冲所以所有的RTC实时时钟电路都用它。普通消费级无源晶振的价格确实便宜到可以忽略一两毛钱一颗不到一块钱很常见。但便宜不代表可以随便用它工作在振荡环路里外围匹配电路没做好照样不干活。我在实际项目里见过太多次“换上进口晶振就好了”的说法其实往往不是晶振本身的问题而是负载电容没匹配对、反馈电阻不合适或者PCB布线引入的寄生电容超标。晶振就像一把精度极高的尺子只有放在正确的电路里量出来的时间才准。2. 石英晶体的压电效应与等效电路起振的物理根基2.1 压电效应晶体是怎么把“电”变成“力”的晶振的核心是一小片石英晶体成分是二氧化硅。石英晶体有个非常特殊的性质——压电效应。你在晶体两端施加机械压力晶体表面会产生电荷反过来你在晶体两端施加交变电场晶体会发生机械形变。这个效应在19世纪就被皮埃尔·居里兄弟发现了但真正应用在频率控制上是在20世纪20年代。如果把晶体切成一个薄片给它一个电脉冲它就会开始机械振动。由于石英晶体的机械弹性非常好振动一旦开始就会以极高的一致性持续下去而且频率极其稳定。这个振动会反过来在晶体表面感应出电荷在外部电路里形成周期性的电流信号。这就是晶振能产生固定频率正弦波的物理根源。为什么石英晶体能做到这么稳因为它本质上是一个高Q值的机械谐振器Q值代表谐振系统的能量损耗程度。普通LC振荡器的Q值做到几十上百就很不错了而石英晶体的Q值可以做到几万到几十万。这意味着晶体一旦起振频率几乎不会被外部负载拉扯纯粹由晶体本身的切割角度和厚度决定。CPU的参考时钟需要这种“倔脾气”的频率源——不管电压怎么波动、温度怎么变频率都稳稳钉在一个点上。2.2 等效电路一个晶体等于RLC串联再并上一个电容很多教程直接甩出晶振的等效电路图一条RLC串联支路动态支路再并联一个电容C0静态电容。理解这个等效电路是看懂后面所有问题的关键。动态支路里的Lm动态电感和Cm动态电容是由晶体的机械振动特性等效出来的Rm是振动过程中的等效损耗电阻。石英晶体的Cm数值极小通常在fF量级10的负15次方法拉对应的Lm值则很大从几mH到几百mH。C0是晶体两片电极之间形成的静态电容一般在1~7pF之间它不参与谐振只是作为一个并联电容搭在两条引线之间。这个等效电路决定了晶振有两个重要频率点串联谐振频率Fs和并联谐振频率Fa。在Fs附近动态支路的Lm和Cm发生串联谐振此时Lm和Cm的阻抗相互抵消只剩下损耗电阻Rm整个晶体呈现一个很小的纯电阻阻抗最低。在Fa附近整个电路发生并联谐振阻抗升至最高。工程上更常用的是晶振标称频率附近的负载谐振频率它会随着外部负载电容的大小发生微小的偏移这就是后面要讲的频率牵引现象。搞清楚等效电路你就能理解为什么晶振要配电容、为什么串联一个电阻就能测负阻、为什么负载电容不匹配会导致频率偏差。3. 无源晶振裸晶体怎么在外部电路里“起振”3.1 皮尔斯振荡电路反相器、反馈电阻和两只电容“无源晶振”这个叫法其实容易让人误解它并不是不需要电源而是晶振本身不含振荡电路需要靠芯片内部自带的振荡器配合外部元件才能工作。芯片内部那个振荡器最常见的是皮尔斯振荡器结构包括一个反相器放大器、一个反馈电阻RF、以及两颗外接的负载电容Cg和Cd。起振过程可以这么理解反相器把输入信号的相位反相后放大输出经过晶振和电容组成的相移网络再送回输入端。如果环路的总相移是360度的整数倍、环路增益大于1振荡就能建立起来。晶振在其中扮演一个高选择性的选频网络它只让谐振频率附近的信号以最低损耗通过其他频率成分被强烈衰减。于是整个环路被锁定在晶振的固有频率上输出一个稳定的振荡信号。反相器在振荡起振时工作在放大区需要偏置到合适的工作点。皮尔斯电路里的反馈电阻RF通常由芯片内部集成目的是给反相器提供直流偏置让静态工作点等于反相器的翻转阈值这样放大器才处于高增益的线性区。外部那两颗负载电容的作用是和晶体一起构成相移网络同时微调振荡频率。3.2 起振的工程判定负阻余量与不起振的根因判断一个晶振电路能不能稳稳起振工程师圈子里最常用的方法叫“负阻法”。晶振在串联谐振点附近等效成一个阻值很小的电阻Rm典型值是几十欧姆比如32.768kHz晶振的Rm常见在30kΩ到60kΩ之间高频MHz级别晶振的Rm通常在几欧到几十欧。振荡器电路要给晶振提供一个等效负阻-R用来抵消晶振内部的损耗负阻绝对值必须大于晶振的等效电阻工程上一般要求3~5倍的余量。如果负阻余量不足晶振可能起振很慢或者温度一变化就停振甚至干脆就起不来。我调板时怎么测负阻在晶振位置上串一个可调电阻从0开始慢慢加大直到电路停振记下停振时的串联电阻值R。这个R加上晶振本身的等效电阻就是实际负阻的大致值。如果这个值除以Rm不到3倍就要想办法提高电路驱动能力比如换输入电容更大一点的芯片、调整负载电容、或者换Rm更小的晶振。这个方法不需要什么高级仪器一个电位器加示波器就能完成我强烈建议硬件工程师都掌握它。3.3 负载电容计算与频率牵引无源晶振的两颗外部电容并不是随便选的它们和晶振的标称负载电容CL有直接关系。负载电容指从晶振两脚看进去的等效电容公式是CL (Cg × Cd) / (Cg Cd) CsCs是引线、焊盘和PCB走线引入的杂散电容一般取3~5pF。当选择的CL和晶振规格书上标注的负载电容一致时晶振的频率最接近标称值。如果实际负载电容偏大晶振会被“拉”到低于标称频率偏小则高于标称频率。这个现象叫频率牵引。举个例子STM32F103的HSE常用8MHz晶振规格书标称负载电容20pF如果取CgCd20pF、杂散电容Cs约3pF实际CL大约是13pF明显偏低频率会偏高。所以很多人推荐外部电容取33pF这样算下来CL约19.5pF才真正匹配20pF的标称负载。很多初学者焊上20pF电容后发现串口波特率老有偏差多半就是没算杂散电容。当然芯片内部有的会带可调负载电容比如STM32的LSE引脚就支持内部电容调节但HSE一般不带。选电容时务必先看晶振规格书上的CL再按公式倒推外部电容值。4. 有源晶振把整套振荡器封装进一个小盒子里4.1 有源晶振里到底装了些什么有源晶振和无源晶振最大的区别在于有源晶振把石英晶体、振荡IC、匹配电容、甚至稳压器全部封装在一个小金属盒子里用户接上电源就能在输出脚拿到一个规整的时钟信号不需要任何外围振荡电路。从内部结构看有源晶振就是一个完整的振荡器模块。晶体负责产生谐振振荡IC负责起振、放大和整形最后通过输出缓冲级输出方波或差分信号。因为内部集成了完整的负阻电路有源晶振的起振可靠性比无源晶振高得多不依赖芯片内部的振荡器也不受PCB寄生参数影响。有源晶振通常有四个脚VCC电源脚、GND地、输出脚剩下一个脚可能是空脚也可能是使能脚。使能脚可以控制输出开启或关闭这在系统休眠时降低功耗很有用。千万别把使能脚当空脚直接悬空处理我见过有人刚好把输出脚和使能脚接反结果时钟死活不出来查了半天才发现是脚位搞错了。4.2 输出电平选择CMOS还是差分有源晶振的输出类型非常多选错类型往往导致信号质量不达标。单片机平台上最常见的是CMOS输出输出幅度是轨到轨比如3.3V供电就输出0到3.3V的方波直接接芯片时钟输入脚完全没问题。CMOS有源晶振的频率一般到几百兆再高就吃力了。高速系统里需要更低的抖动和更小的电磁干扰于是有了LVDS、LVPECL、HCSL这类差分输出晶振。LVDS差分输出用两根线传输信号抗干扰能力强抖动低适合作为FPGA、SerDes、ADC的参考时钟。LVPECL的输出电平摆幅大偏置电路复杂消耗功率也大但抖动很低常见于通信设备。HCSL则是PCIe总线的老朋友PCIe参考时钟用的100MHz差分晶振基本都是HCSL或兼容HCSL的输出因为HCSL的输出摆幅小、转换速度快非常适合100Ω差分环境。对于普通MCU项目CMOS有源晶振性价比最高外围只需要一个电源去耦电容。对于高速接口必须根据接口电平标准选对应的差分晶振还要注意端接电阻。比如LVDS输出一般需要100Ω差分阻抗匹配HCSL输出虽然本身不需要端接但接收端要按芯片手册处理。4.3 有源晶振的“贵”体现在哪有源晶振的价格比无源晶振贵一个数量级最便宜的CMOS有源晶振可能两三块钱高端的差分晶振、温补晶振TCXO动辄几十上百元。这个钱贵在封装集成、测试成本和频率稳定性上。无源晶振出厂只是一个裸晶体频率是否准确很大程度取决于使用者匹配的外围电路。有源晶振出厂前已经把整套振荡器调试好输出频率和电平都测过用户拿到就往板子上焊频率准确度和抗干扰能力都有保障。在很多产品里一颗有源晶振能省掉调试晶振带来的大量时间成本换来的是“一次点亮”的确定性这个确定性在研发周期紧张时比什么都值。当然有源晶振也有代价除了价格还有体积和功耗。低功耗的RTC电路如果全程开着一颗有源晶振电流可能差几十微安对纽扣电池供电的设备来说压力不小。所以手表、功耗敏感型的物联网节点依然更喜欢无源32.768kHz晶体加芯片内部低功耗振荡器的方案。5. 从STM32到CPU主板晶振选型与布线实战5.1 STM32的两路晶振HSE与LSE怎么配玩STM32的人几乎每天都要和晶振打交道。STM32芯片上通常有两路晶振引脚一路是HSE连接高速外部晶体频率一般是8MHz到25MHz给系统提供高精度主时钟基准另一路是LSE连接32.768kHz低速晶体专门给RTC实时时钟用。用STM32CubeMX配置时RCC选项卡里要分别使能HSE和LSE然后选择时钟源为外部晶振PLL源选HSE再通过倍频得到系统主频。我经常遇到有人直接在CubeMX里选了HSE但PCB上晶振没焊或者负载电容焊错结果程序死在HSE等待超时上。如果用的是内部HSI启动程序还能跑但连USART等需要精确时序的外设就会出问题。LSE那颗32.768kHz晶振更是反常识的重灾区。很多人觉得它频率低随便买一颗配上两个20pF电容就行结果做出来的产品RTC一个月能差出几十秒到几分钟。LSE晶振对负载电容和C0电容非常敏感常见规格有6pF、7pF、9pF、12.5pF几种负载选电容前必须先看规格书。STM32的LSE引脚本身有内部可调电容CubeMX和代码里都可以配置范围优先用内部电容外部就不用额外挂电容这样少一个变量。5.2 CPU主板与千兆网口的时钟树说回标题里的“性能再高的CPU都需要它”。现代CPU主板上的频率体系比单片机复杂得多但源头往往也是一颗几十MHz的无源晶振。以常见的PC平台为例主板上会有一颗25MHz左右的晶振接到时钟发生器Clock GeneratorClock Generator再通过锁相环和分频产出CPU外频BCLK、DMI总线、PCIe参考时钟、USB、SATA、网络接口等各路时钟。CPU内部PLL以这个BCLK为参考比如外频100MHzPLL倍频36倍就得到3.6GHz核心频率。如果外部参考时钟漂了CPU核心频率也会跟着飘频率过高可能死机过低性能下降。所以主板厂商对BCLK用的晶振或时钟发生器要求很高通常配高精度低抖动晶振。千兆网口也是一个典型场景。以太网PHY芯片需要一个25MHz参考时钟常用方案是外接一颗25MHz无源晶振或者由旁边的时钟芯片供25MHz时钟。如果这颗晶振频率偏了或者抖动大网口会出现大量CRC错误、协商失败甚至完全不通。特别是PCB布局不好、晶振离PHY芯片太远、走线穿越了其他高速信号哪怕晶振本身是好的信号质量也会崩。5.3 四角晶振的PCB布局走线里的隐蔽雷区贴片晶振最常见的是四脚封装其中两个脚是晶振的信号引脚另外两个脚通常是外壳接地脚。很多人以为四脚就是两个信号脚两个地走线时随便拉线这是大坑。四角晶振的信号脚在对角线上不是相邻脚必须严格对照规格书的脚位定义。走线方面晶振的走线要尽量短而且要等长对称。晶振两脚的信号线和负载电容之间的环路面积越小越好环路面积大等同于一根天线容易辐射出干扰也容易被外部信号耦合。晶振下面不要走任何其他信号线最好在晶振正下方的第二层铺一块完整的接地铜皮这个接地铜皮可以屏蔽来自底层的噪声。晶振周围还要打一圈地孔把它“圈”起来。另外晶振要远离功率电感、MOS管、开关电源Diâ等热源和强磁场源。我自己调过一块板子晶振放得离DC-DC电感只有不到5毫米输出时钟频率一直在跳后来把晶振挪远、铺地隔开后问题才消失。这类问题示波器不仔细看根本发现不了因为幅度变化不大但用频率计测就会发现抖动明显增大。6. 实测翻车现场不起振、停振和时间不准的排查6.1 32.768kHz瓷片电容到底该选多大网上很多人问“晶振32.768的瓷片电容用22pF半个月快1分钟是电容过大吗”。这个问题得分情况讨论不能一刀切。先说理论方向。32.768kHz晶振的负载电容通常是6~12.5pF拿12.5pF负载的晶振配22pF外部电容实际负载电容会比标称值偏高晶振频率会偏低时间应该走慢才对。如果产品实际是“快”了第一反应不应该是电容而是晶振本身的初始频偏。普通32.768kHz晶振的精度常见±20ppm每天最大误差约1.7秒一个月累积下来就是50多秒。所以“快1分钟”很可能是这颗晶振本身就偏快而不是电容问题。如果确实是“慢”了那就要测频率。把LSE时钟引出来用频率计测一下和32.768kHz比对偏差大就要调整负载电容。负载电容偏大频率偏低偏小频率偏高。有的STM32可以用内部可调电容调几皮法外部电容配合着微调慢慢逼近准确频率。但更省事的做法是改设计时直接用TCXO温补有源晶振走时精度可以做到几个ppm以内一个月误差几秒。RTC产品如果对时间精度有硬指标别在负载电容上死磕换温补晶振是正路。6.2 示波器探头一碰就不起振的秘密新手调试晶振时最无语的现象是示波器探头一搭到晶振脚上原本正常的波形瞬间消失拿开探头又恢复。这不是晶振坏了而是探头的寄生电容把振荡器负载拉跑了。普通示波器无源探头即使打到x10档输入电容也有10~15pF左右x1档更是高达几十皮法这对MHz级晶振来说是不可忽略的负载变化。晶振振荡电路本来只设计了十几皮法的负载电容探头再并上去十几皮法总负载电容翻倍频率被大幅拉偏更严重时环路增益不足直接停振。所以测晶振波形时有几个技巧一是探头必须打到x10档x1档基本一碰就死二是尽量用有源差分探头或专用低容无源探头缺点是贵三是不要直接测芯片引脚而是从晶振输出经过缓冲器或测试点引出信号测。如果手头只有普通探头最简单的方法是观察是否停振来判断电路余量——探头一碰就停振说明负阻余量不足这样的板子未来在低温或老化工况下也容易出问题。6.3 焊盘残留与器件选型引发的间歇性故障晶振电路还有个很隐蔽的坑是PCB清洗不干净。助焊剂残留在晶振焊盘之间会引入额外的漏电流和寄生电容。高频晶振可能因此频率偏移低频的32.768kHz晶振可能直接不起振或者时振时不振。曾经处理过一个批量问题RTC在出厂测试全过但客户使用一段时间后时钟停止。返修发现晶振焊盘附近有助焊剂残留吸潮后漏电流变大导致低功耗振荡器无法维持振动。另外晶振选型也要注意C0电容和耐温等级。低功耗RTC振荡器对晶振的C0很敏感C0太大会耗掉过多振荡能量导致起振困难。有的芯片规格书会要求C0不超过某个上限选购时就要按这个参数找料。晶振的工作温度范围也要覆盖产品使用环境工业级和消费级的温度特性差很多室外设备用了只保0~70度的商业级晶振冬天冷启动起振慢甚至停振都是可能的。我想说的最后一件事是晶振看起来是一个又小又便宜的被动器件但它在整个电子系统里的地位相当于人的心脏起搏器。CPU再强、芯片再先进时钟不稳全盘皆输。排查晶振问题时别急着怀疑“晶振质量差”先从外围匹配、PCB布线和焊接工艺这些最容易被忽略的地方下手往往一找一个准。这些经验都是我在项目里交学费换来的写出来希望能帮你少走几步弯路。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门