首页 / 资讯中心 / 文章详情

MCU晶振电路设计:无源晶振匹配电容计算与PCB布局实战

MCU晶振电路设计:无源晶振匹配电容计算与PCB布局实战 ★ FEATURED ARTICLE
1. 从一块“罢工”的板子说起晶振电路到底难在哪画过MCU板子的人大概都经历过这种场景板子焊好上电程序烧不进去或者跑起来串口乱码、定时器飘得离谱。查电源、查复位、查下载线折腾一圈最后发现是晶振没起振或者起振了但频率偏得离谱。MCU的晶振电路看着就俩电容加一个晶体简单到很多人直接抄参考设计但真出问题的时候它又是最容易被忽略的那一环。这篇内容我想把MCU晶振电路设计这件事从头到尾捋一遍。核心关键词就几个MCU、晶振电路、无源晶振、匹配电容、振荡器。我会讲清楚无源晶振和有源晶振到底怎么选、匹配电容怎么算而不是瞎抄、PCB布局上哪些细节会让晶振直接罢工、以及实测中遇到不起振时该怎么一步步排查。适合正在画MCU最小系统的硬件新手也适合做了几年但一直“抄参考设计”没深究过原理的工程师——毕竟晶振这东西抄对了没事抄错了就是玄学。先说一个基本认知MCU内部其实已经有一个振荡器电路了你外接的无源晶振Crystal只是配合它工作的一个谐振元件真正让晶体振动起来的是MCU内部那个反相放大器。这一点很多人搞混以为无源晶振自己会振其实不是。而有源晶振Oscillator是自带振荡电路、直接输出方波的完整模块。这两者的设计思路完全不同选错了方向后面怎么调都是白费劲。我见过太多项目BOM上写个“8MHz晶振”采购随便买个贴片晶体回来电容按参考设计填两个22pF结果批量生产时良率只有七成剩下三成不起振。问题就出在“匹配电容”这四个字上——它不是固定值是要根据晶体负载电容、PCB寄生电容、MCU内部电容一起算出来的。下面我按实际设计的顺序一块一块拆开讲。2. 无源晶振还是有源晶振先把这个选择题做对2.1 两种振荡器的本质区别与选型逻辑无源晶振也就是常说的Crystal本质是一个石英谐振器两个引脚没有方向性其实有但对称它需要外部电路提供激励才能振荡。MCU的OSC_IN和OSC_OUT引脚内部集成了一个反相放大器配合外部晶体和两个负载电容构成一个皮尔斯振荡器Pierce Oscillator。这个结构成本极低一颗晶体几分钱到几毛钱两个电容几乎不要钱所以消费类、家电类MCU方案基本都用它。有源晶振也就是Oscillator内部集成了晶体和振荡电路四个引脚VCC、GND、OUT、有时还有OE输出使能。上电就输出方波直接喂给MCU的OSC_IN或者外部时钟输入引脚。它的优点是稳定、起振快、不挑负载电容、输出电平固定缺点是贵一颗几块钱到几十块钱而且占PCB面积大。选型的时候我一般按这几个维度判断维度无源晶振有源晶振成本极低几毛钱较高几块到几十块起振时间较慢ms级极快ns~us级频率精度取决于负载电容匹配出厂已校准精度高功耗低相对高PCB占用小大设计难度需要算匹配电容、注意布局基本即插即用适用场景消费电子、家电、普通工控通信、精密测量、高速ADC、多MCU同步我个人的经验是如果MCU只是跑跑逻辑、串口、普通定时无源晶振完全够用没必要上贵的。但如果涉及USB、以太网、高速ADC采样、射频或者多个MCU需要严格同步时钟那有源晶振或者专用时钟芯片更省心。特别是USB很多MCU内部PLL对时钟抖动敏感无源晶振匹配不好直接导致USB枚举失败这种坑我踩过不止一次。2.2 什么时候该考虑内部RC振荡器还有一种情况值得提有些MCU内部自带RC振荡器精度大概±1%~±5%成本为零连晶体都不用。如果你的应用对时钟精度要求不高比如只是做个延时、跑个低速串口、控制个继电器内部RC完全能用还能省掉晶体和两个电容。但要注意RC振荡器温漂大-40℃到85℃范围内频率可能飘几个百分点串口波特率误差超过3%就容易通信出错。所以我的建议是能用内部RC就用省成本省空间一旦涉及通信、计时、PWM精度要求高的场景老老实实上外部晶体。3. 匹配电容不是拍脑袋从负载电容公式讲起3.1 负载电容的计算公式与推导这是整篇内容最核心的部分也是最容易出错的地方。无源晶振的数据手册里一定会有一个参数叫负载电容Load CapacitanceCL常见值有8pF、10pF、12pF、20pF等。这个CL是晶体厂家在测试时规定的、晶体两端看到的总等效电容。你的电路必须让晶体实际看到的总电容等于这个CL晶体才会工作在标称频率上。电路上晶体两端各接一个电容到地分别记为C1和C2这两个电容是并联在晶体两端对地的。从晶体的角度看它看到的总负载电容是CL (C1 × C2) / (C1 C2) Cstray其中Cstray是PCB走线寄生电容、MCU引脚寄生电容、焊盘电容的总和典型值3pF~5pF。如果C1C2C那么公式简化为CL C/2 Cstray反推匹配电容C 2 × (CL - Cstray)举个例子晶体手册写CL12pF你估计Cstray约4pF那么C 2 × (12 - 4) 16pF。所以两个电容各用16pF而不是很多人习惯性填的22pF。如果你填22pF实际CL 22/2 4 15pF比标称12pF大了3pF频率会偏低偏差大概在几十ppm量级。对于串口通信可能还能忍对于USB或者射频就是灾难。3.2 Cstray到底怎么估一个实操方法Cstray这东西没有精确值只能估。我的做法是先按经验值4pF算一版打样回来后用频率计测实际输出频率如果偏了再微调电容。具体来说如果实测频率比标称高说明实际负载电容偏小需要加大C1/C2如果实测频率偏低说明负载电容偏大需要减小C1/C2。还有一个更直接的办法用可调电容或者电容箱在板子上预留两个焊盘先焊一个固定电容另一个位置用可调电容调调到频率最准的时候量出可调电容的值换成固定电容。这个方法在精密场合很实用我做一个GPS授时模块的时候就是这么干的最后把频率调到了±2ppm以内。另外要注意MCU内部OSC_IN和OSC_OUT引脚本身也有几pF的输入电容这个也算在Cstray里。不同MCU这个值不一样ST的某些型号手册里会标国产MCU很多不标只能按经验估。所以最终电容值往往要在理论计算基础上做±2pF的微调。3.3 匹配电容的选型细节材质、精度、温度系数电容不是随便买个就行。晶振电路里的匹配电容我一般选NP0/C0G材质的陶瓷电容原因有三一是温度系数极小±30ppm/℃不会因为温度变化导致频率漂移二是容值稳定不受直流偏压影响三是损耗小不会引入额外相移。千万不要用X7R或者Y5V材质的电容这两种电容容值随温度和电压变化大用在晶振电路里会导致频率随温度飘、随电压飘问题非常隐蔽。我见过一个案子客户为了省几分钱用了X7R结果产品在冬天户外频率偏低夏天偏高查了半个月才定位到电容材质。精度方面NP0电容一般选±5%或者±2%其实±5%够用了因为Cstray本身就有±1pF的不确定性电容精度再高也抵消不了这个误差。封装上0402或者0603都可以0402寄生电感小一点但手工焊接麻烦0603更好操作。4. PCB布局晶振电路成败的隐形战场4.1 走线长度与环路面积控制晶振电路的PCB布局核心原则就一句话让晶体和MCU之间的走线尽可能短环路面积尽可能小。为什么因为晶振电路是一个高阻抗、小信号的模拟电路走线长了容易引入寄生电容和寄生电感还会像天线一样拾取外部噪声。走线电感会和负载电容形成额外的谐振严重时直接导致不起振。我的实操标准是晶体到MCU的OSC_IN/OSC_OUT走线总长度控制在10mm以内最好5mm以内。两个匹配电容的地端要就近打过孔连接到完整的地平面不要走长线绕到远处接地。晶体下方不要走任何其他信号线尤其是高速信号线和电源线。环路面积指的是从MCU的OSC_OUT出来经过晶体再回到OSC_IN这个电流环路包围的面积。这个面积越小对外辐射和对外界噪声的敏感度都越低。所以晶体要尽量靠近MCU放置两个电容紧贴晶体和地。4.2 地平面处理与包地技巧晶振电路下方必须是完整的、没有分割的地平面。有些工程师喜欢在晶振下面挖空觉得可以减少寄生电容其实这是误区。挖空会导致地回流路径变长反而增加环路面积和噪声敏感度。正确做法是保持地平面完整让晶振电路有一个稳定的参考地。如果板子空间允许可以在晶振电路周围加一圈地过孔via fence形成类似屏蔽墙的效果把外部噪声挡在外面。这个技巧在多层板、高频板或者旁边有大功率开关电源的场合特别有用。我做一个电机控制板的时候晶振旁边就是MOSFET开关节点一开始晶振输出抖动很大后来加了地过孔围栏抖动明显改善。还有一点晶振电路的地要和MCU的模拟地或者时钟地就近连接不要跨过数字地和模拟地的分割缝。如果板子有地分割晶振的地要归到MCU的时钟地那一侧。4.3 远离干扰源哪些信号线要避开晶振电路要远离以下几类信号开关电源的SW节点这是最强的干扰源dv/dt极高辐射能力强至少保持10mm以上距离最好放在板子另一侧。高速数字信号线如SPI时钟、USB差分线、以太网差分线这些线翻转频繁容易耦合到晶振。大电流走线大电流走线周围磁场强会通过互感耦合到晶振环路。继电器、电机驱动线这些负载切换时会产生大幅度的电压尖峰和振铃。如果实在避不开可以在晶振电路和干扰源之间加一条接地走线作为隔离带或者用屏蔽罩把晶振罩起来。屏蔽罩成本不高在精密场合很值得。5. 不起振、频率偏、起振慢常见问题排查实录5.1 上电不起振的排查顺序晶振不起振是最常见的问题我一般按这个顺序排查先量电源和复位确认MCU供电正常、复位引脚电平正确。很多“不起振”其实是MCU根本没工作不是晶振的问题。用示波器看OSC_OUT注意要用高阻抗探头10MΩ以上探头电容要小10pF否则探头本身的电容会把晶振“压死”。如果探头一碰就停振说明电路本身余量不足。检查匹配电容电容值是否按公式算过材质是不是NP0有没有焊错、虚焊检查晶体本身换一颗晶体试试排除晶体损坏或者来料不良。我遇到过一批晶体厂商标称8MHz实际是7.99MHz偏差大到MCU的PLL锁不住。检查PCB走线是否过长地平面是否完整有没有干扰源靠近检查MCU配置有些MCU需要软件配置时钟源、使能外部晶振、设置驱动强度。驱动强度不够也会导致不起振尤其是大负载电容或者高ESR的晶体。5.2 频率偏差大的原因分析频率偏差大通常有这几个原因负载电容不匹配这是最常见的按第3节的公式重新算。Cstray估计错误实际寄生电容比估计的大或小需要实测微调。温度影响晶体本身的温度特性AT切晶体在-40~85℃范围内大概±10~30ppm如果要求更高精度要选TCXO或者带温度补偿的晶体。电源噪声MCU内部振荡器对电源噪声敏感电源纹波大会导致频率抖动。可以在MCU的VDD引脚就近加0.1uF和1uF电容必要时加LC滤波。晶体老化晶体用久了频率会慢慢偏移一般每年±3ppm左右高精度场合要考虑。5.3 起振时间慢与驱动能力问题有些应用对起振时间有要求比如低功耗设备需要快速唤醒。无源晶振的起振时间一般在1ms到10ms之间取决于晶体Q值、负载电容、驱动电流。如果起振太慢可以减小负载电容但会偏离标称频率要权衡增大MCU的驱动强度如果MCU支持配置选用ESR更低的晶体改用有源晶振起振时间可以做到微秒级还有一个隐蔽问题MCU内部的反相放大器有一个跨导gm如果gm不够大而晶体的ESR又偏高就会起振困难甚至不起振。选晶体的时候要看ESR参数一般MCU手册会给出推荐的最大ESR值超过这个值就可能起振不良。5.4 常见问题速查表现象可能原因排查方法解决措施完全不起振电容值错误、晶体损坏、走线过长示波器看OSC_OUT、换晶体、量电容重算电容、换晶体、缩短走线起振但频率偏负载电容不匹配、Cstray估计错频率计测输出、微调电容按公式重算、实测微调起振慢驱动能力不足、ESR高、电容大测起振时间、查晶体ESR减小电容、换低ESR晶体、增大驱动频率随温度飘电容材质差、晶体温度特性差高低温测试换NP0电容、换高精度晶体探头一碰就停电路余量不足、探头电容大换低电容探头优化布局、减小电容、增大驱动批量良率低电容精度差、晶体一致性差抽测多板频率换高精度电容、选一致性好的晶体6. 几个容易被忽略的实操细节与经验6.1 晶体的ESR和驱动电平要关注选晶体的时候除了频率和负载电容还有两个参数要看ESR等效串联电阻和驱动电平Drive Level。ESR决定了起振的难易程度ESR越低越容易起振。驱动电平是晶体能承受的最大激励功率超过这个值会加速晶体老化甚至损坏。一般MCU内部振荡器的驱动功率都很小不用担心超但如果用分立电路搭振荡器就要算一下驱动电流。6.2 预留调试焊盘很关键我在画板子的时候习惯在晶振的两个匹配电容位置各预留一个并联焊盘方便后期调试时并联电容微调频率。这个小小的预留在调试阶段能省下大量时间。如果没有预留调频率就得拆电容、换电容反复焊接容易把焊盘焊坏。6.3 低功耗场景下的晶振设计低功耗设备用32.768kHz晶振做RTC时钟这个频段的晶振ESR很高一般30kΩ~70kΩ驱动电流极小对PCB漏电流和噪声非常敏感。设计时要注意走线尽量短、地平面干净、避免助焊剂残留残留会导致漏电流影响起振。有些工程师会在32.768kHz晶振两端并联一个10MΩ~22MΩ的电阻帮助起振这个电阻在很多MCU手册里会推荐但也不是必须要看具体MCU内部是否已经集成。6.4 批量生产时的来料一致性实验室调好的板子批量生产时可能出问题很大原因是来料一致性。晶体和电容都要选正规厂家、一致性好的型号。我吃过一次亏实验室用的晶体是某大牌的批量时采购换了便宜牌子ESR偏高结果5%的板子起振不良。后来在来料检验里加了一项晶振起振测试每批抽10颗上板测才把问题堵住。7. 写在最后晶振电路没有玄学只有细节晶振电路这东西说简单也简单两个电容一颗晶体说难也难难在每一个细节都要抠。负载电容要算、Cstray要估、布局要短、地要完整、材质要选对、来料要一致。这些细节单独看都不起眼但任何一个出问题都可能让整块板子罢工。我个人的体会是不要迷信参考设计参考设计给的电容值是基于他们的PCB和他们的晶体换一个板子、换一颗晶体值就可能要变。每次新项目晶振电路我都会按公式重新算一遍打样后实测频率该微调就微调。多花这半小时比后面debug几天划算得多。如果你现在手上正好有一块晶振不起振的板子先别急着换MCU按第5节的顺序一步步查大概率问题就出在电容值或者布局上。晶振电路不玄它只是要求你把该做的功课做到位。
阅读完成 · 觉得有帮助?
咨询建站