尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

RTC时钟电路设计:内置晶振与外置晶振的选型与实战解析

RTC时钟电路设计:内置晶振与外置晶振的选型与实战解析 1. RTC时钟电路设计为什么选晶振这件事总被纠结做硬件这几年几乎每个带时间戳、定时唤醒、日志记录的产品都绕不开RTC——实时时钟。RTC本身就是一个低功耗计数器靠外部或者内部的精准时钟源来走时。设计时最纠结的一个点就是内置晶振和外置晶振到底怎么选。这个决定直接影响成本、PCB面积、走时精度还有后期产线的良率。先说清楚什么是内置晶振和外置晶振。所谓内置晶振通常指RTC芯片或者SoC内部已经集成了振荡电路甚至直接把32.768kHz的石英晶体封装在芯片内部用户不需要再接晶体只需要给芯片供电它就能产生时钟。外置晶振则是指芯片内部只有振荡电路需要外部接一颗32.768kHz的石英晶体再配上两个负载电容有时还需要一个反馈电阻才能形成完整的振荡回路。很多工程师觉得“能用就行”随便选一种结果在产品测试阶段发现时间不准、断电重开时间丢失、低温起振失败。这些问题往往不是RTC芯片本身的质量问题而是晶振选型和电路设计没有匹配好。这篇文章我会从原理、参数、PCB布局、调试经验几个角度把内置晶振和外置晶振的区别拆开讲清楚也会顺带聊一下类似全志H136这类主控上RTC电源切换电路的设计思路。2. 时钟电路的架构差异内部振荡器与外挂晶振的本质区别2.1 RTC为什么一定要有晶振RTC要看时间本质上是在数时钟脉冲。一个32.768kHz的晶振每秒产生32768个脉冲RTC内部通过15级分频器2的15次方等于32768就能得到1Hz的信号再去驱动秒计数器、分计数器等。为什么偏偏选32.768kHz因为2的15次方用二进制分频器最容易实现功耗也低。如果用其他频率比如100kHz分频逻辑就复杂得多功耗也会上来。晶振的作用是提供一个稳定且可预测的频率基准。RTC芯片内部的振荡电路负责激励晶振使其谐振在32.768kHz附近然后把机械振动转换成电信号。石英晶体的谐振频率受温度、老化、负载电容影响所以走时精度与否很大程度上取决于晶振本身和外围匹配电路而不是RTC芯片里的计数器。2.2 外置晶振方案的完整振荡回路外置晶振方案中RTC芯片内部一般集成了反相放大器这个放大器配合外部石英晶体和两个负载电容组成皮尔斯振荡器Pierce Oscillator。典型电路是这样的晶体两端分别接RTC芯片的OSCI输入和OSCO输出引脚。OSCI对地接一个电容C1OSCO对地接一个电容C2。芯片内部有一个偏置电阻从输出反馈到输入让反相放大器工作在线性区。有些芯片还会要求外部加一个1M到10M欧姆的反馈电阻尤其是低功耗MCU内部没集成反馈电阻时。这里关键是C1和C2的值。它们不是随意选的需要根据晶振的负载电容CL来计算。石英晶振规格书里会标一个负载电容比如12.5pF、9pF、6pF。实际电路中C1和C2串联后再与电路寄生电容并联最终要等于晶振要求的CL。公式是CL (C1 × C2) / (C1 C2) CsCs表示引脚寄生电容、PCB走线对地电容之和经验值通常在1到3pF之间。如果C1和C2都取20pF那么CL就是20×20/(2020)10pF再加上Cs约2pF总共12pF正好匹配常见的12.5pF晶振。如果取10pFCL就是527pF适合6pF到8pF晶振。2.3 内置晶振方案的本质把晶体和振荡电路封装在一起内置晶振方案则是在芯片内部把石英晶体和振荡放大器都做进去封装成一个完整的振荡器模块。用户看到的就是一个带时钟输出的器件或者直接集成在MCU内部连输出都不用引出来。这种方案最大的好处是免设计、免匹配PCB上不用放晶体和电容抗干扰能力也强。但内置晶振也有弱点。因为晶体和振荡电路封装在一起受到芯片自身发热影响频率温度特性会比外置晶振更难控制。另外内置晶振的可选频率很少基本就是32.768kHz或者一些固定的MHz频率。如果产品对走时精度有要求比如一天误差不能超过0.5秒那内置晶振一般达不到必须用外置的高精度晶振甚至带温度补偿的TCXO。2.4 全志H136的RTC电源切换电路给我的启发热词里提到“全志H136 RTC电源切换电路”这其实是很多SoC的典型设计。RTC要持续走时就必须保证在整个系统断电后RTC模块还有电。常见做法是VCC_RTC引脚通过一个二极管或者PMOS管连接到主电源VCC_SYS同时再并联一个纽扣电池或者超级电容。当主电源存在时由主电源给RTC供电并为电池充电当主电源断电时自动切换到电池供电。设计切换电路时要特别注意两个问题一是切换电压阈值不能让RTC的供电电压突然掉到RTC的最低工作电压以下否则RTC内部寄存器会复位二是防止两个电源之间互相倒灌一般需要加肖特基二极管或PMOS管做隔离。全志的参考设计里常用一个PMOS和一个二极管组合PMOS的栅极连接到主电源当主电源掉到某个电压以下PMOS导通电池通过PMOS给RTC供电。这个电路简单但一定要实测切换点避免临界状态下的抖动。3. 内置晶振与外置晶振的选型对比精度、功耗与成本的真实权衡3.1 精度和温漂差距外置晶振的精度可以做到很高。普通32.768kHz晶振的频偏一般是±20ppm也就是每天误差约1.7秒20ppm×86400秒/10000001.728秒。如果要更准可以用±10ppm、±5ppm的晶振甚至TCXO温补晶振能做到±2ppm以内。内置晶振因为封装在芯片内部受到芯片温升影响频偏往往在±30ppm到±100ppm之间甚至更差。不同批次的一致性也不如外置晶振。温度特性上石英晶振的频率-温度曲线是一个抛物线在25℃附近最准温度偏离越大频偏越明显。外置晶振因为可以选用不同切型的石英晶体温度特性比较可预测。内置晶振受制于封装和工艺温度补偿不太容易实现。如果产品要在-20℃到70℃范围内工作外置晶振明显更有优势。3.2 功耗差异RTC电路通常常年在电池供电下工作耗电电流非常敏感。外置晶振方案的振荡电路要驱动外部晶体晶体本身的动态电容大起振电流也大所以总功耗会稍微高一些。内置晶振因为晶体和放大器距离近寄生参数小驱动电流可以做得更低所以很多超低功耗MCU的内置RTC整体电流可以做到3μA以下而外置晶振加LDO至少5μA以上。但是功耗差距其实没那么大。对一颗200mAh的纽扣电池来说3μA和5μA的差别能用两年和三年的区别具体要看产品定位。如果追求极致待机比如智能手表、水表、燃气表那内置晶振的低功耗优势很关键。3.3 成本与PCB面积外置晶振成本很低一颗32.768kHz无源晶振批量采购价格在几分钱到一两毛钱再加上两个电容总BOM成本不超过三毛钱。但PCB面积会增加约3mm×5mm。内置晶振则把成本算进了芯片里一般芯片价格会比不带晶振的版本贵一些。从功耗和面积角度内置晶振更优从BOM灵活性和成本角度外置晶振更有优势。这个取舍还要看芯片供货情况。有些MCU分成内置晶振版本和外置晶振版本内置版本价格可能贵0.5到1元但省下的PCB面积和贴片费用也许能抵消。产品做小体积的比如TWS耳机充电仓里的MCU内置晶振版本就很好用。3.4 时钟门控电路与false path的关联热词里提到“由分立Latch和AND构成的时钟门控电路的false path”这其实和RTC不直接相关但很多做RTC时钟电路验证的工程师会遇到类似问题。RTC的32.768kHz时钟通常作为慢速时钟域经常被门控——比如唤醒功能需要计数时开启不需要时关闭。如果门控电路用Latch和AND搭就容易产生毛刺也就是时钟在关断或开启瞬间出现多余的脉冲。在静态时序分析STA里这类跨时钟域或门控时钟路径经常会被标记为false path。因为设计者知道这些路径不需要满足严格的建立/保持时间约束或者它们只是用于控制时钟有效沿的使能而不是用于传递数据。但如果不加约束综合工具会试图去优化这些路径导致时序报告里出现大量违例误报太多真正的问题反而被淹没。实际排查时我建议在SDC文件里明确设置set_false_path把RTC慢速时钟域中已知的异步路径排除掉同时用时钟门控检查工具验证Latch和AND的组合是否会产生毛刺。对于分立器件搭的时钟门控一定要在silicon上实测不能只信仿真因为Latch的传输延迟和逻辑阈值可能和仿真模型有偏差。4. 外置晶振电路的设计实操从负载电容计算到PCB布局细节4.1 确定负载电容的计算方法假设你选了一颗32.768kHz晶振规格书标注负载电容CL12.5pF寄生电容Cs估算为2pF。那么外部电容C1和C2串联后的等效电容应该是C1×C2/(C1C2) CL - Cs 12.5 - 2 10.5pF如果C1C2C则C/2 10.5C 21pF。考虑到实际电容有误差以及PCB寄生电容不完全准确通常取C1C220pF这样等效约10pF加上Cs约12pF接近12.5pF。如果选CL6pF的晶振则C/2Cs6C约8pF取8pF或10pF都可以。有一个容易被忽略的参数是晶振的牵引灵敏度。负载电容偏差会导致频率偏移但不同晶振的牵引灵敏度不同。一般来说负载电容增大频率会降低负载电容减小频率会升高。如果晶振标称频率是32.768kHz实际负载电容与规格偏差较大频率偏差可能达到几个ppm。因此如果发现RTC走时偏差大先检查负载电容是否匹配。4.2 PCB布局布线的关键规则外置晶振在PCB布局上极度敏感以下几个规则必须遵守晶振尽量靠近RTC芯片的OSCI和OSCO引脚走线长度控制在5mm以内。两条走线尽量等长且不要平行走太长避免彼此耦合。晶振下方不要走其他信号线尤其是数字信号线最好在晶振下方铺地铜形成隔离。负载电容的地端要直接接到芯片的地引脚或者就近的地过孔不要通过长长走线绕到远处。晶振旁边不要放高频开关节点比如DC-DC电感也不要靠近功率MOS管。如果晶体离芯片远寄生电容和寄生电感都会增加可能导致起振困难甚至不起振。我曾经遇到过一块板子晶体放在板边走线绕了2cm结果低温下起振失败后来移动到芯片旁边问题消失。4.3 起振功耗与负阻检查设计外置晶振电路时还要检查振荡电路的负阻Negative Resistance也就是RTC芯片能提供多大的增益来驱动晶振。芯片手册通常会给出一个最小负阻值比如-40kΩ。用示波器或阻抗分析仪可以测实际负阻但更简单的做法是好的芯片厂商会在EVK上给出匹配结果直接参考EVK的外围参数复制。如果起振很慢或者不启振可能是负阻不足。解决办法是减小C1和C2的容值增加反馈电阻或者换用动态电容ESR更小的晶振。但减小负载电容会导致频率偏高需要重新计算。4.4 电源和去耦的处理RTC芯片的VDD引脚需要非常干净的电源。很多RTC芯片都要求VDD上的纹波小于几十毫伏否则时钟输出会抖动。供电线上建议加一个RC滤波器常见取值是几十欧姆电阻串联再并一个0.1μF电容。注意这个滤波器不能太强否则压降太大电池电压低时RTC可能复位。如果RTC电源直接来自纽扣电池那电池的内阻和接触电阻也要考虑。电池接触不良会导致RTC频繁复位时间丢失。这种情况下可以在RTC的VDD引脚加一个100nF电容抵抗瞬时电流波动。5. 内置晶振方案的使用心得与校准技巧5.1 内置晶振的误差来源内置晶振虽然方便但误差来源比外置晶振更多。首先是晶振本身的制造误差其次是芯片内部温升造成的频偏还有一点是芯片从待机模式到唤醒模式瞬间电源电压跌落可能会影响振荡频率。我实测过某款MCU的内置RTC在25℃时一天误差大约3秒这相当于频偏约35ppm对普通计时器可以接受但对需要精准定时唤醒的NB-IoT设备就有点不够。NB-IoT模块要求网络同步精度很高如果本地RTC不准会导致设备频繁同步增加功耗。5.2 软件校准的方法既然内置晶振精度不够那就只能通过软件校准。最常用的方法是利用一个高精度时间源如GPS、基站时间、NTP每隔一段时间测量RTC的误差然后调整一个补偿值。RTC芯片一般有一个数字时钟校准寄存器可以以ppm为单位调整。例如DS3231也有类似的寄存器设置一个值每秒会多或少几个时钟周期来补偿。软件校准的流程是获取一段时间的实际误差值比如运行3600秒实际RTC计数多了3秒则频偏为3/3600833ppm这在石英晶振中是不可能的说明补偿方向反了或者单位理解错了。更常见的是误差在几十ppm级别可以通过设置校准寄存器来修正。5.3 内置晶振与外置晶振的场景选择根据我实际做过产品的经验可以给一个粗略的选型建议电子表、玩具、低精度计时钟内置晶振够用省成本省面积。路由器、网关、打印机的定时任务要看精度需求一般外置晶振。车载电子、电力采集终端必须外置晶振最好带温度补偿。超级低功耗的穿戴设备内置晶振可以降低睡眠电流但要有校准机制。需要高精度时间的设备直接选带温补的RTC模块比如DS3231、RX8900。5.4 内置晶振方案如何提高精度如果你的产品已经选定了内置晶振又想要更高精度有几个办法在固件中做温度补偿根据芯片内部温度传感器的读数查表修正频偏。定期用外部参考信号校准RTC比如设备联网时用网络时间对时。延长RTC的计时周期减少唤醒次数让软件校准在后台慢慢修正。实测下来带温度补偿的内置RTC可以把日误差从3秒改善到0.5秒左右前提是温度传感器精度足够且校准算法仔细调过。6. RTC典型故障排查与维修实录6.1 现象RTC读到错误时间这类问题最多见。设备开机后RTC时间乱掉或者每过一段时间就跳到1970年。排查步骤检查复位引脚是否有毛刺。很多RTC芯片有RST引脚如果RST一直被干扰就会复位。检查供电电压。如果VDD电压低于最低工作电压可能触发欠压复位寄存器清零。检查晶振是否起振。用示波器探头点OSCI引脚如果看到32.768kHz正弦波说明振荡正常如果不振说明晶体或电容出了问题。检查电池电压。电池没电会导致掉电后RTC不工作。6.2 现象RTC connectionstate failed热词里还有“RTC connectionstate failed”这个更像是网络通信里的RTC和时钟芯片无关。但在物联网领域这个词有时也指设备因为本地时间错误导致网络认证失败。很多协议如TLS证书依赖时间校验如果RTC电池没电设备重启后时间回到1970年会导致证书验证失败从而出现“connection state failed”类型的错误。解决思路是设备增加启动时间源优先级优先用RTC时间如果RTC时间不合理比如小于编译时间就等待网络时间同步后再进行TLS连接。同时RTC电池电路要保证长期供电如果电池失效要有标志位提示上层软件。6.3 现象低温停振外置晶振在低温下不起振是经典问题。主要原因有晶振本身在低温下ESR增大振荡余量不足。负载电容过小负阻不足。PCB受潮或存在漏电流。排查方法在低温箱里测试用示波器高压探头直接测OSCI引脚信号看是否起振。如果不起振减小负载电容如从20pF改成10pF并检查PCB表面清洁度。6.4 现象掉电后时间丢失但电池电压正常如果电池有电但掉电后时间丢失可能是电源切换电路的问题。比如主电源和电池之间用了两个二极管并联电池会向主电源漏电导致电池电压在掉电后快速下降。解决方法是改用MOS管隔离或用理想二极管电路。另一个常见原因是RTC的备份电源引脚和主电源引脚共用一个电容掉电时电容上的电被其他电路放光RTC没有足够电力维持走时。正确的做法是RTC的VDD引脚单独接一个电容且这个电容不要并联到其他耗电电路上。6.5 现象时间走快或走慢走时不准首先检查晶振频率用频率计测OSCO输出如果频率偏了调整负载电容。其次检查RTC的校准寄存器是否被修改。有些芯片上电后寄存器默认值不是零需要显式清除。此外电源纹波会导致振荡器分频不稳定从而产生抖动但不会造成长期频率偏差。如果走时偏差很大比如一天几分钟那基本可以确定晶振频率差太多或者负载电容完全错配。人为用一个可调电容试凑找到最接近32.768kHz的容值再换成固定电容。6.6 常见问题速查表故障现象可能原因排查/解决建议RTC时间频繁复位供电电压跌落、复位引脚毛刺检查电源滤波、复位电路上拉掉电后时间丢失电池耗尽、电源切换电路漏电测电池电压检查MOS管/二极管走时明显偏快/偏慢晶振频偏、负载电容不匹配频率计测频调整C1/C2低温不起振负载电容过大、晶振ESR过大减小负载电容换低ESR晶振晶体附近信号干扰高频信号耦合铺地隔离远离DCDC内置晶振误差大温漂、制造偏差软件校准必要时换外置晶振7. 最后聊点我的实际体会做RTC电路设计这些年我最大的感受是别小看这颗小小的32.768kHz晶体。它看起来很简单但它的起振、匹配、PCB布局、电源隔离每一项都是深坑。内置晶振和外置晶振没有绝对的好坏只有适合不适合你的产品场景。我的习惯是画原理图之前先想清楚这几个问题产品工作温度范围是多少每天允许的走时误差多少电池能撑多久PCB面积紧张吗如果这些想清楚了选内置还是外置基本不会犹豫。还有一个小技巧主机厂做产品验证时最好在高温、低温、高湿、振动这几个条件下各测RTC的走时误差因为温度影响最大振动可能导致晶振短暂停振。把这些测试都通过了RTC方案才算真正稳定。
返回列表