news 2026/10/14 1:15:50

MCU晶振电路设计实战:工作原理、选型布局与不起振排查

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MCU晶振电路设计实战:工作原理、选型布局与不起振排查

1. 为什么说晶振是MCU的心脏

搞嵌入式开发的人应该都有过这种经历:板子焊好了,代码烧进去了,结果程序就是不跑。查了一圈电源正常、复位正常、下载器连接正常,最后用示波器一量晶振引脚,发现压根没起振——那一刻的心情,就跟听到自己心跳停了一样。晶振对于MCU的重要性,用“心脏”来形容真不夸张:它是整个系统时序的基准,没有它,CPU无法取指、定时器无法计时、串口无法产生波特率、通信协议全部瘫痪。你写的所有逻辑,归根到底都是在“某个时钟沿”上推进的,而这个时钟沿的源头,就是那颗不起眼的晶体振荡器。

这篇内容主要面向正在做MCU项目开发的朋友,尤其是刚开始接触STM32、GD32、ESP32这类常用芯片的开发者。我打算把晶振从原理到实战从头到尾捋一遍:它怎么工作、怎么选型、电路怎么搭、PCB怎么布局、不起振怎么排查,以及我这些年踩过的一些坑。内容不是教科书式的理论堆砌,更多是实际项目中用得到的经验,看完你至少能少走几趟弯路。

2. 晶振的工作原理和选型基础

2.1 压电效应与振荡的本质

晶振的核心是一块经过精密切割的石英晶体片。石英有个特性叫“压电效应”:当你对它施加机械压力,它会在表面产生电荷;反过来,你给它施加交变电场,它会发生机械形变。这个特性意味着石英片本质上是一个“电能-机械能”互相转换的换能器。当你在晶体两端施加一个接近其固有谐振频率的交流信号时,晶体的机械振动幅度会急剧增大,同时通过压电效应在电路中呈现出强烈的阻抗变化。这个阻抗在谐振点附近变化极陡,正好可以用来构成一个高Q值的选频网络。

高Q值是个关键点。石英晶体的Q值通常有几万到几十万,而普通的LC谐振回路Q值顶天几百。Q值越高,频率选择性越好,受外界干扰的影响越小,所以晶振能提供比RC振荡器稳定得多的频率基准。MCU内部虽然有RC振荡器(如HSI),但精度一般在±1%到±2%之间,而外部晶振(HSE)通常能做到±10ppm到±30ppm,差了约三个数量级。这就是为什么涉及到通信、计时、电机控制等对时序敏感的场景,基本都要依赖外部晶振。

2.2 无源晶振与有源晶振的区别

很多新手容易把“晶振”和“振荡器”混为一谈,实际上它们是两种东西。无源晶振(英文常叫Crystal)只有两个引脚,内部就是一块石英晶体片,本身不产生信号,需要配合MCU内部的振荡电路一起工作。MCU芯片内部集成了反相放大器等振荡电路,你只需要在OSC_IN和OSC_OUT两个引脚之间接上晶体,再加上两个匹配电容,振荡器就能工作。这种方式成本低、外围简单,是绝大多数MCU应用的主流方案。

有源晶振(英文常叫Oscillator)则不同,它内部封装了石英晶体加完整的振荡电路,上电后直接输出一个稳定的方波或正弦波信号。它通常有四个引脚:电源、地、输出、使能(部分型号没有使能脚)。有源晶振输出的信号质量好、不需要MCU内部振荡电路参与,但价格贵、封装大,而且必须保证供电干净。实际项目中,无源晶振用得最多,所以后面重点讲无源方案;只有在需要极高频精度、或者MCU内部振荡电路不适合外部晶振的情况下,才会考虑有源方案。

2.3 频率范围与典型封装

MCU常用的外部晶振频率集中在4MHz到25MHz之间。STM32F1系列经典的8MHz外部晶振,配合PLL倍频可以跑到72MHz主频;STM32F4系列常用25MHz晶振,配合相应的PLL配置可以跑到168MHz或180MHz。也有一些低功耗应用选32.768kHz的时钟晶振,专门给RTC(实时时钟)用,这个频率的晶体音叉形切割之后,功耗极低,而且频率刚好是2的15次方,方便分频得到1秒的秒脉冲。

封装方面,传统的HC-49S(圆柱或金属壳贴片)在工业产品中依然常见,尺寸较大但价格便宜、易于焊接。消费类小产品现在更倾向于贴片封装,常见的有5032、3215、2016,甚至还有更小的1612。封装越小,寄生参数越小,但对PCB布局和焊接工艺的要求也越高。晶振个头越小,越是娇气,这一点后面会详细说。

3. 必须搞懂的关键参数

3.1 负载电容CL:决定频率精度的第一要素

负载电容(CL)是晶振数据手册里最重要的一个参数,也是很多人最容易理解错的一个参数。CL不是晶振本身的电容,而是“从晶振两端看进去、电路应该呈现的等效电容”。晶振就是设计在某个特定负载电容下工作的,只有实际电路的等效电容接近CL,振荡频率才能落在标称值附近。如果实际匹配的电容偏差较大,频率就会偏移,偏移量可以通过公式近似估算:

Δf / f ≈ -CL / (2 × (C0 + CL)²) × ΔC

这里的C0是晶振内部静态电容,通常在1pF到7pF之间。看这个公式你可能觉得复杂,但其实只需要记住结论:晶振要求的CL越大,频率对电容变化的敏感度越低;CL越小,电路寄生电容的影响越明显。

实际设计时,外部两个电容C1、C2的取值需要满足一个近似关系:

CL = (C1 × C2) / (C1 + C2) + Cstray

Cstray是PCB走线、焊盘和MCU引脚引入的寄生电容,经验值在2pF到5pF之间。常用做法是C1和C2取相同值,公式简化为:

C = 2 × (CL - Cstray)

举个例子:如果你的晶振规格要求CL=12.5pF,假设Cstray取3pF,那么C = 2 × (12.5 - 3) = 19pF。市场上常见标称值有20pF,那就直接用20pF。如果晶振要求CL=8pF,同样按Cstray取3pF算,C = 2 × (8 - 3) = 10pF,就用10pF。如果你用的是8MHz/20pF晶振,但手头没有20pF,可以用两个22pF并联等效成11pF,但注意这会让等效CL略低于标称值,频率会轻微偏高——实际上问题不大,因为这些电容本身精度通常只有±5%。

3.2 频率稳定度与温度特性

频率稳定度一般用ppm(百万分之一)表示。普通消费级晶振的精度是±20ppm到±30ppm,意味着8MHz晶振的频率误差可能在±160Hz到±240Hz之间。这个误差对普通串口通信、PWM控制完全够用;但如果你在做高精度授时、电力测量、或者高速CAN通信,就得考虑更高精度的晶振,甚至用温补晶振(TCXO),它的精度能到±0.5ppm到±2ppm。

温度漂移是一个容易被忽视的问题。石英晶体的频率会随温度变化而偏移,不同切型的晶体温度特性差异很大。AT切型是目前高频晶振的主流切型,它在宽温度范围内频率-温度曲线接近三次函数,在常温附近相对平坦,适合工业级-40℃到+85℃的应用。而32.768kHz音叉晶体的温度特性呈现倒抛物线,在25℃附近最准,偏离越远偏差越大,在极端温度下可能偏差到上百ppm,这对RTC计时来说意味着每天可能差几秒到十几秒。如果产品需要在恶劣温度环境长时间工作,RTC走时误差的问题一定要提前评估。

3.3 等效串联电阻ESR与启动时间

ESR(Equivalent Series Resistance)是晶振在谐振时的等效串联电阻,它直接反映了晶振起振的难易程度。ESR越低,反馈环路损耗越小,越容易起振。普通8MHz贴片晶振的ESR通常在40Ω到80Ω之间,而32.768kHz音叉晶体的ESR可以到几十kΩ,这就是为什么时钟晶振的匹配电容和布局要求更苛刻。

MCU复位或唤醒后,振荡器电路开始放大噪声,通过晶振选频逐步建立起稳定的振荡,这个过程叫“起振”。启动时间取决于环路增益、ESR、负载电容和IC内部放大器的驱动能力。如果启动时间过长,MCU可能会在晶振还没稳定时就去配置时钟,导致系统跑飞或者偶发性死机。不少MCU的时钟安全系统(CSS)就是用来监控外部晶振失效的,一旦检测到振荡异常,会自动切换到内部RC振荡器,同时触发NMI中断,让你有机会做应急处理。

3.4 激励功率与使用寿命

激励功率(Drive Level)是指晶振在工作时消耗的功率。如果激励功率过大,晶体片的机械振动幅度会过大,长期工作可能会导致石英片微裂或者电极老化,甚至出现频率漂移和停振。数据手册上通常会标一个最大额定值,比如100μW,实际设计要尽量让晶振工作在较低的激励水平。

有些MCU允许通过寄存器配置振荡电路的驱动电流或增益,这在低功耗设计中很实用。比如在睡眠模式使用低功耗振荡器时,降低驱动强度可以减少功耗,同时避免过激励。不过调整驱动强度后,一定要实测波形确认振荡幅度足够、起振时间在可接受范围内,不要为了省电把电路调到“刚刚能振”的临界状态,那样可靠性会很差。

4. 晶振电路设计与PCB布局要点

4.1 电路连接方式

用无源晶振时,标准连接方式是这样的:晶振的两个引脚分别接MCU的OSC_IN和OSC_OUT,每个引脚对地接一个负载电容,C1在OSC_IN侧、C2在OSC_OUT侧。少数MCU内部已经集成了负载电容(比如某些低功耗MCU内部有可调电容阵列),外部就不需要再贴电容了,这种情况数据手册里会说清楚。

有些设计还会在晶体两端并联一个1MΩ到10MΩ的反馈电阻,帮助放大器建立直流工作点,并加速起振。很多现代MCU内部已经集成这个电阻,外部无需额外添加,硬件参考手册上会标注。另一个常见做法是在OSC_OUT串联一个几十Ω到几百Ω的电阻,用来限制激励功率、降低波形过冲,但这会影响振荡幅度,加不加要实测验证。我的建议是:严格按照MCU数据手册的推荐电路起步,不要自己随意增加或删减元件,等你有足够经验了再去“优化”。

4.2 PCB布局的几条铁律

晶振的PCB布局直接决定系统能不能稳定工作。我梳理一下这些年总结下来的几条硬性规则:

  • 晶振和负载电容必须放在MCU晶振引脚附近,走线越短越好。理想情况下,走线长度不要超过5mm,ASIC设计中甚至要求低于2mm。走线过长会增加寄生电容和电感,可能导致频率偏移、起振困难。
  • 晶振走线两侧用地线包络(Guard Ring),并在晶振下方铺地。地线包络可以有效隔离来自周围信号线的干扰,但注意不要形成大的地环路,否则反而会引入共模噪声。
  • 晶振区域下方不要走其他信号线,尤其是高频数字信号线和电源线。我有一次板子布不下,在晶振下方走了一根SPI时钟线,结果系统在温度高时偶发通信乱码,费了好大劲才定位到是SPI信号耦合干扰了晶振。
  • 负载电容的地端要就近打过孔连接到主地平面,不要绕远路接到别的地。电容和晶振之间的“地回路”长度对振荡稳定性影响很大。
  • 晶振远离板边和屏蔽罩等金属物体,保证震动自由。如果必须靠近板边,要注意外壳接地处理,避免人体或工具触碰时引起频率跳变。
  • 两个负载电容尽量等长对称布线,使得两个引脚到地的寄生电容一致,有利于频率精度。

4.3 低功耗与EMC场景的特殊处理

低功耗产品设计中,晶振的功耗和启动时间往往是矛盾点。内部振荡电路的驱动强度越低,功耗越低,但起振时间越长。比如某款低功耗MCU,内部振荡器驱动电流从100%降到20%,起振时间可能从1ms延长到10ms,而平均功耗反而因为长时间处于振荡建立状态而增加。所以低功耗设计不是简单地“把所有东西调低”,而是要平衡振荡启动开销和稳态功耗。

EMC方面,晶振走线是板上最容易辐射干扰的地方之一。如果产品要过认证,可以在晶振引脚串一个几十Ω的电阻来抑制高频振铃,或者用RC低通滤波。但一定要知道,加电阻会降低振荡幅度,极端情况下会导致不起振。每个方案的改动都要用示波器实测,不要拍脑袋。

5. 实战:从原理图到起振验证的完整流程

5.1 选型与原理图设计

假设我要设计一个基于STM32F103的板子,主频目标72MHz。那么选晶振要考虑:STM32F103的外部高速振荡器(HSE)支持4MHz到16MHz,内部PLL最高倍频到72MHz。经典方案是用8MHz晶振,然后PLL倍频9倍得到72MHz。为什么选8MHz而不是别的?因为8MHz是一个非常常见的频率,货源充足、价格便宜,而且9倍频正好是72MHz,PLL配置简单,相位噪声特性也好。

看原理图设计,MCU的OSC_IN(PD0/OSC_IN引脚,不同封装引脚编号不同)和OSC_OUT(PD1/OSC_OUT引脚)之间接Y1,两端分别对地接C1和C2。晶振本身不需要电源,所以没有电源走线问题。如果选用的晶振型号标注CL=20pF,那么C1=C2按照之前公式计算取20pF。有些产品为了节省BOM物料种类,会统一用一种容值,比如所有去耦电容都用100nF,那么两个负载电容也用100nF行不行?绝对不行。晶振负载电容是一个匹配参数,不是随便一个电容就行,这一点务必留意。

5.2 时钟树配置

硬件设计完成后,软件配置是下一步。以STM32为例,配置HSE时钟源的流程大致是:

  1. 调用时钟初始化函数,设置HSEON位使能外部高速振荡器。
  2. 等待HSERDY位置1,确认晶振起振成功。如果长时间没有置位,说明晶振电路可能有问题,代码要具备超时处理逻辑,不能死等。
  3. 配置PLL的倍频系数和分频系数。8MHz晶振配9倍频得到72MHz的PLL输出。
  4. 将系统时钟切换到PLL输出,并等待SWSC位确认切换完成。
  5. 配置AHB、APB1、APB2的分频器,确保各总线时钟不超过规格上限。APB1最高36MHz,APB2最高72MHz,这是STM32F103的硬性限制。

如果你用的是STM32CubeMX,图形化配置会相对简单,但在生成的代码里也要理解这几步的逻辑。有一个常见的坑:修改了外部晶振的频率(比如从8MHz换成12MHz),但忘了改PLL配置参数,结果系统时钟跑到了108MHz——超频了不会报错,但程序可能在某些温度下死机,或者USB、串口时序全乱。所以换晶振一定连时钟配置一起改,并且用示波器确认最终系统时钟频率。

5.3 用示波器验证晶振波形

晶振起振后,正确的验证方法是测OSC_OUT引脚波形。正常情况下应该看到一个正弦波,频率等于晶振标称频率,幅度在几百mV到VDD之间,没有明显的削顶或平顶。需要特别注意的是,用示波器探头直接测晶振引脚会引入探头电容(大约10pF到15pF),这个电容会让振荡频率偏移,严重时甚至会导致停振。因此测量时务必用10×档探头(输入电容小一些),有源探头更好。不要用1×档去测晶振,那基本是“一碰就停”。

我见过不少人把示波器测不到晶振波形当成“晶振坏了”,实际上只是探头影响了振荡。正确的测量手段是:如果一定要测,测OSC_OUT且用10×档,同时观察起振过程和稳定波形;如果板子空间允许,可以在晶振输出串联一个缓冲器再引出测试点,这样完全不影响振荡电路。另外一个实用的办法是通过MCU的MCO引脚(时钟输出引脚)把内部时钟输出到某个GPIO上,然后用示波器测那个引脚——这样可以绕开直接触碰晶振的问题。

5.4 频率精度验证

如果做的是对频率精度有要求的项目,单纯看波形还不够,用频率计或者示波器测量频率偏差。普通示波器测频率的精度有限(±1%左右),对ppm级别的偏差无能为力。这种情况下可以用MCU自带的定时器去做“自测”:比如用内部RC振荡器作为定时器时钟,对外部晶振分频后的秒脉冲计数,算出偏差。更简单的方法是借用串口:配置一个已知波特率,用逻辑分析仪或另一台标准设备去测实际波特率,偏差反映了时钟精度。

顺便说一个我实际用过的办法:用MCU驱动一个PWM输出,频率设置为一个“整数”值(比如1MHz),然后用高精度频率计或者带有频率测量功能的台式万用表去测量,偏差换算成ppm。这个方法不用额外硬件,特别适合品控或者验证一批晶振的一致性。

6. 常见问题与排查技巧实录

6.1 完全不起振

晶振完全不起振,是新手遇到最多的故障。排查思路按以下顺序来:

第一,确认代码里是否真的使能了外部晶振,而不是还在用内部RC振荡器。很多人一上来就怀疑硬件问题,结果看了半天代码发现HSEON位压根没置位,这个软件故障排除最省时间。

第二,检查负载电容是否焊接正确。我遇到过电容用错位号的情况:PCB上C1、C2两个位置分别标了不同容值,焊接时贴反了或者用了错误的值,导致等效负载电容偏差过大,晶振无法进入谐振状态。用万用表测量电容前先放电,避免读数不准。

第三,观察MCU复位电路和电源是否正常。如果复位引脚一直被拉低,芯片根本没运行,晶振当然不起振。这时候量一下复位引脚电平就知道了。

第四,检查晶振本身是否损坏。可以用一个简单的测试电路单独验证晶振的好坏,或者直接换一颗新晶振对比。晶振是玻璃密封的,耐冲击性差,掉在地上或者焊接应力过大都可能损坏。

第五,确认晶振引脚与MCU引脚连接是否正确。OSC_IN和OSC_OUT接反了或者其中一个悬空,都不会起振。这个在手工焊接的板子上特别常见,焊完最好用万用表蜂鸣档逐一对原理图检查连通性。

6.2 偶发不起振或启动时间过长

这是比较棘手的问题,因为它不是100%复现,往往在温度变化、电压波动、或者快速上电断电时出现。常见原因有几个:

  • 负载电容偏大,导致环路增益不足,起振变得很慢。如果产品在低温环境下上电,晶振的ESR会升高(尤其音叉型晶体),本来临界起振的电路就更难起振了。解决办法:适当减小负载电容,或者选用ESR更低的晶振型号。
  • 晶振下方走线长了,寄生电容过大,等效CL离标称值越来越远。这种情况下重新调整布局,缩短走线,是最根本的解决方案。
  • MCU振荡电路驱动能力不足,低频晶振需要更大的放大倍数。可以看芯片手册里振荡器“transconductance”参数,确保晶振的“负性阻抗”裕量足够。工程上常用“负性阻抗法”测裕量:在谐振回路中串入一个可变电阻,逐步增大直到停振,停振前的电阻值如果大于晶振ESR的3-5倍,裕量才合格。
  • 电源纹波太大,影响了振荡电路的工作点。给MCU的电源加去耦电容、确保电源走线够粗,可以改善这个问题。

偶发不起振的问题,最有效的排查工具是“让时间来暴露问题”:大批量老化测试、温度循环测试、高低压上下电测试。这类问题如果只靠台子上几十次测试,很难暴露。

6.3 频率偏移

频率偏移是指晶振能起振,但频率偏差超出预期。排查看看这几个可能的原因:

  • 负载电容不匹配。用前面的公式算一下,如果实际等效CL偏离标称值较多,频率会偏移。比如8MHz晶振标称CL=12.5pF,实际外接电容20pF,等效CL可能到了13pF左右,偏移量可能有几ppm,对一般应用问题不大,但对高精度应用就不可忽略了。
  • 杂散电容过大。PCB走线长、铺地太近、晶振周围有其他金属件等都会增大杂散电容,尤其是小CL晶振(如8pF),影响会更明显。
  • 晶振本身精度不足。普通晶振±30ppm的精度,换算到8MHz就是±240Hz的偏差。如果产品要求比如USB的±0.25%总带宽范围,30ppm完全够用;但如果做高精度测量仪表,这个精度就不够了,得换TCXO或者OCXO。
  • 焊接应力。晶振外壳和引脚的焊接应力可能影响频率,所以有些生产工序要求在焊后做频率微调。这点对高精度应用很重要。

6.4 波形异常:振铃、削顶、幅度不稳

晶振波形不是干净的正弦波,可能的原因有:

  • 激励功率过大,或者反馈电阻/串联电阻缺失,波形幅度过大、产生削顶,长期工作会老化晶振。此时在OSC_OUT串联一个电阻限制电流,适当降低幅度。
  • 波形上叠加了高频振铃,很可能是走线过长引起的反射,或者是PCB布局耦合了数字噪声。改善布局,缩短走线,或者增加缓冲器隔离。
  • 波形幅度忽大忽小,类似“呼吸”现象,这其实可能是示波器触发问题,先排除测量因素;如果真是振荡不稳定,多数和环路增益裕量不足或电源噪声有关。

6.5 32.768kHz时钟晶振的特殊坑点

低功耗产品里的32.768kHz晶振,坑比高频晶振多得多。这类晶振ESR很高,对负载电容极其敏感,而且很多MCU的内部振荡电路驱动能力很弱。常见问题包括:

  • 不起振或起振时间长达数秒。32.768kHz晶振本来起振就慢,如果负载电容选太大或者MCU驱动电流设置太低,可能几十秒都起不来,直接导致RTC功能挂掉。解决办法:使用标称CL小的晶振型号(如6pF或7pF),调高驱动电流,必要时在OSC_OUT加一个100kΩ到1MΩ的电阻加速放电。
  • 走线耦合干扰导致频率抖动。32.768kHz虽然是低频,但对干扰很敏感,因为它的信号幅度非常小。晶振周围要特别干净,不要有开关电源的走线靠近。
  • 温度漂移导致时钟不准。前面提到过,32.768kHz音叉晶体的温度特性是倒抛物线。在对走时精度有要求的场景,考虑用带温度补偿的RTC芯片,或者在产品内部加温度校正算法。
  • 半导体测试时的“探针接触”干扰。有时候不是你的板子问题,而是测试系统引入的,这种情况需要增加缓冲输出或者改用测试夹具设计。

6.6 静电损伤与焊接损坏

晶振是很脆弱的元件,静电放电(ESD)可能导致内部石英片或者电极损坏。焊接时烙铁温度过高、时间过长,也可能通过引脚把热传导到晶体内部,导致频率偏移甚至永久损伤。生产线上建议使用恒温烙铁,温度设定在300℃-350℃,单点焊接时间控制在3秒以内;波峰焊和回流焊要遵循元件厂商推荐的温度曲线,不要为了赶进度乱调炉温。

仓储方面,晶振建议存放在防静电袋内,操作人员佩戴静电手环。如果一批晶振上机后出现不明原因的批量不良,先查一把生产线的ESD防护,这个环节经常被忽略但杀伤力很大。

7. 晶振选型与替代方案的思考逻辑

7.1 怎么选一颗合适的晶振

选晶振不是看频率对就完事了,我把选型检查清单列一下:

  • 频率是否在MCU外部晶振支持范围内。看数据手册的HSE频率范围,别把16MHz晶振接到只支持4MHz-16MHz的芯片上还要超频到极限。
  • 负载电容CL是否和MCU电路方便匹配。尽量选CL不是特别小的型号,因为小CL对寄生电容敏感,导致PCB布局难度增加;也不要选太大的CL,因为那需要较大的外部电容,成本和面积都会增加。
  • 精度等级是否满足应用需求。参考前面说的约定,普通消费电子±20ppm到±30ppm即可;通信主控、需要精确时间同步的选±10ppm或±5ppm;高精度测量、精密授时的选TCXO甚至OCXO。
  • 工作温度范围是否覆盖产品应用场景。工业级选-40℃到+85℃,汽车级可能要求-40℃到+125℃,消费级-20℃到+70℃通常够用。
  • 封装尺寸和供货稳定性。小封装虽然省面积,但贴片精度和焊接难度高,而且某些超小尺寸晶振在市场上供货不太稳定,做产品要提前评估双源供货。
  • 品牌和质量。晶振这块,日系和台系厂商品质比较稳,国产厂商性价比高,但一定要试样验证。我见过某批次晶振频率批量偏出规格的情况,幸好出厂前做了全检,才没有流向客户。

7.2 什么时候可以不用外部晶振

不是所有产品都必须外接晶振。现在很多MCU的内部RC振荡器精度已经做到±1%甚至更好,配合芯片出厂校准,可以满足UART通信、LED驱动、普通传感器读取等很多常规需求。省掉晶振能降低BOM成本、缩小PCB面积、减少一个故障点,对消费类小批量产品很有吸引力。

但有几类场景我建议还是老老实实用外部晶振:一切需要USB通信的场合(USB协议对时钟精度要求很高,内部RC一般扛不住);CAN通信总线;需要长期精确定时的RTC应用;以及工作环境温度变化很大的工业控制场合。内部RC振荡器受温度和电压影响明显,你无法在软件里自动校准每个温度点的频率。

7.3 用一个外部晶振还是多个?

有些系统同时需要MCU主时钟和RTC时钟,比如MCU用8MHz晶振,RTC用32.768kHz晶振,板子上就会出现两颗晶振。能不能合用一颗?要看具体方案:如果MCU内部RTC可以通过外部高频晶振分频得到,那就只用一颗高频晶振,省掉了低频音叉晶振;如果MCU内部RTC只能吃32.768kHz的信号,那就只能再加一颗。还有一些低功耗方案,RTC芯片外接32.768kHz,MCU用内部RC就够了。整体原则是:能用一颗解决的就不用两颗,能省就省,但前提是性能满足需求。

8. 最后分享一点实际项目中的体会

做嵌入式这些年,我对晶振的感觉从“不就是个震荡源吗”到“这玩意儿真是系统的命根子”,中间踩的坑不算少。印象最深的是一个量产项目,板子发出去几百片,有大约千分之三的比例出现偶发不开机。查来查去,最后发现是晶振负载电容的贴片位置和原理图不一致,一部分板子的电容被贴到了旁边位号上,导致等效CL偏差,低温下起振困难。从那以后,我每次BOM核对都会把晶振的两个负载电容单独列出来,多次确认容值和位号。

另一个体会是,晶振相关的故障,往往是多重因素叠加的结果。你单独看每个参数似乎都在规格范围内,但组合在一起就出了问题。这时候不要急着改电路,先系统地测量:电源质量、复位信号、时钟配置、晶振波形、实际频率,把数据都拿齐了再判断。盲目换电容、换晶振,十有八九会把问题搞得更复杂。

如果你现在正在调一块晶振不起振的板子,别急,静下心来按上面这几个章节顺一遍,大部分问题都能找到根因。晶振这个东西,摸清楚它的脾气之后,你会发现它其实很守规矩——你给它匹配的电路合乎要求,它就会稳定地给你一个精确的时钟节拍;你做了一些“差不多就行”的设计,它就在某个温度、某个电压点给你脸色看。多花点时间把晶振电路做好,是嵌入式项目里性价比极高的投资。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/14 1:15:35

推荐系统相似度计算全解析:从余弦到Jaccard的工程选型指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/14 1:15:14

Pandas多时间序列写入Excel指定列的完整指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/14 1:15:12

Java模拟磁盘调度算法:FCFS、SSTF、SCAN、CSCAN、LOOK、CLOOK详解

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/14 1:15:12

LaTeX语法入门:从命令环境到文档排版的核心逻辑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/14 1:14:54

PyTorch入门实战:从张量、自动求导到完整训练循环

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/14 1:14:44

小程序数据导入云端数据库:从设计到实操的完整避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华