ZLG嵌入式笔记 | RTC时钟偶发性延时或超时该怎么办?

news/2025/2/25 4:50:16/

嵌入式系统运行时,RTC 时钟受多种因素干扰致延时或超时,影响系统时间同步与功能稳定。本文将提出从硬件适配到软件算法优化的综合性方案,以解决此问题,保障 RTC 时钟的精确性与可靠性。

引起延时和超时的主要原因是计时系统使用的基准频率32.768Khz精度不够。MCU片内自带的RTC功能电路由于受到芯片集成工艺的影响一般计量精度都比较差而且功耗也比较大,一般在对时钟精度要求比较高的情况下建议直接使用外部RTC专用时钟芯片,比如PCF8563/PCF85063,下表列出了不同RTC芯片的时钟精度。

图1 不同RTC芯片的时钟精度

在选择高精度的RTC时钟芯片后,还需注意32.768Khz晶振的匹配电容选型是否符合晶振设计手册的要求。

图2 晶振的匹配电容

负载电容CL 的计算公式:

其中:CL1、CL2 :晶振匹配电容;Cstray:电路板杂散电容

图3 晶体的连接方式及器件参数

代入数值:CL = [ (15*15)/(15+15) ]+5=12.5pF以上是通过硬件电路设计的优化来提高时钟精度,但由于生产工艺、芯片差异等其它不可控因素的存在,实际的时钟精度会存在一定偏差,在时钟频偏稳定的情况下还可以通过软件方式进一步对时钟精度进行补偿,即通过设置RTC内部的补偿寄存器来补偿时间。补偿寄存器的基本原理是通过增加或者减少时钟的修正脉冲来补偿时间而不是改变晶振的频率,如图4所示,补偿寄存器的bit7设置补偿的模式,bit[6:0]设置补偿的值。

图4 补偿寄存器描述

1. 补偿值计算方法一

计算流程如图5所示。

图5 补偿值计算方法一

  1. 先用频率计或者高精度的示波器测量PCF8563芯片pin7脚CLKOUT的频率Fmeas(软件要先设置pin7输出才可测到波形);
  2. 转化成时间tmeas;
  3. 计算和理想时钟32.768KHz周期的偏差Dmeas;
  4. 根据测量值计算ppm的偏移量;
  5. 根据设置模式计算补偿寄存器的值,如图中32768.48Hz计算得到的ppm偏移量是14.648ppm,如果是模式0,则算出来的补偿值为3.375,四舍五入取值3。

根据补偿计算方式的算式整合简化,若测得实际频率F实测值,ppm的偏移量Eppm可以用以下公式快速计算:

如上补偿校准计算框架图32768.48Hz算出来的值也是14.648。由此可见,若F实测值≥32768Hz,则算出的补偿值≥0;若F实测值<32768Hz,则算出的补偿值<0。

2. 补偿值计算方法二

图6 补偿值计算方法二

如图6所示,±20ppm的晶振频率每1 ppm的偏差会导致每天偏差0.0864 s。在没有测试条件测频率的情况下,可以先测试24h下的时间偏差,时间走的快补偿正值,时间走的慢补偿负值,比如某个RTC 24小时下测得比北京时间快7s,那么先算出ppm的偏移量Eppm = 7/0.0864 = 81.0185 ppm,然后算出模式0下补偿寄存器的值为81.0185/4.34 = 18.67,取值19;算出模式1下补偿寄存器的值为81.0185/4.069 = 19.9119.91,取值20。再比如某个RTC 24小时下测得比北京时间慢7s,那么先算出ppm的偏移量Eppm = 7/0.0864 = 81.0185 ppm,然后算出模式0下补偿寄存器的值为81.0185/4.34 = 18.67,取值-19;算出模式1下补偿寄存器的值为81.0185/4.069 = 19.91,取值-20。

注意:0.0864 s的计算方式为:ppm的单位是百万分之一,20ppm一天的偏差描述为(24小时*60分*60秒*20)/106 = 1.728s,所以1ppm一天的偏差时间为1.728s/20 = 0.0864 s。其他精度的晶振也可以用此类方式推算。

如果产品对RTC精度要求较高,使用常规RTC通过以上校准/补偿仍达不到产品要求,就需要考虑选用高精度的RTC芯片,如RX8025T。


http://www.ppmy.cn/news/1574766.html

相关文章

win32汇编环境,对话框中使用菜单示例三

;运行效果 ;win32汇编环境,对话框中使用菜单示例三 ;鼠标点击右键时&#xff0c;弹出菜单的功能 ;直接抄进RadAsm可编译运行。重要部分加备注。 ;下面为asm文件 ;>>>>>>>>>>>>>>>>>>>>>>>>>>&g…

Redis数据结构总结-listPack

listPack 前言什么是listPack结构列表项元素的编码类型整数编码字符串编码 避免连锁更新的实现方式从左向右查询从右向左 总结 前言 quicklist 虽然通过控制 quicklistNode 结构里的压缩列表的大小或者元素个数&#xff0c;来减少连锁更新带来的性能影响&#xff0c;但是并没有…

ARM TCM(itcm和dtcm)

在嵌入式开发中&#xff0c;ITCM和DTCM是与内存相关的概念&#xff0c;主要用于提高处理器的数据访问速度和执行效率。下面我将逐步解释它们的含义和作用。 1. 基本概念 TCM&#xff1a;TCM代表“Tightly Coupled Memory”&#xff0c;即紧耦合内存。它是一种高速内存&#xf…

【Redis原理】底层数据结构 五种数据类型

文章目录 动态字符串SDS(simple dynamic string )SDS结构定义SDS动态扩容 IntSetIntSet 结构定义IntSet的升级 DictDict结构定义Dict的扩容Dict的收缩Dict 的rehash ZipListZipListEntryencoding 编码字符串整数 ZipList的连锁更新问题 QuickListQuickList源码 SkipListRedisOb…

JAVA-Exploit编写(13-15)--JAVAFX-GUI检测工具编写实现

目录 一,JAVAFX-GUI单个漏洞检测编写 1.1 绑定事件 1.2 Thinkphp5_Rce编写 1.3 编写利用类 1.4 Thinkphp2x_Rce编写 1.5 单个漏洞检测GUI工具完整代码 二,JAVAFX-GUI单个漏洞批量检测编写 2.1 编写利用反射类 2.2 批量检测漏洞完整GUI工具代码 三,JAVAFX-GUI…

【愚公系列】《Python网络爬虫从入门到精通》028-DataFrame对象

标题详情作者简介愚公搬代码头衔华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。近期荣誉2022年度…

servlet化学实验交流平台-计算机设计毕业源码13069

目录 摘要 Abstract 第一章 绪论 1.1 选题背景及意义 1.2 国内外研究现状 1.3 研究方法 第二章 相关技术介绍 2.1 Java编程语言 2.2 B/S模式 2.3 MySQL简介 2.4 Serrvlet框架 2.5 Vue介绍 第三章 化学实验交流平台分析 3.1 系统目标 3.2 可行性分析 3.2.1 技术可…

Docker教程(喂饭级!)

如果你有跨平台开发的需求&#xff0c;或者对每次在新机器上部署项目感到头疼&#xff0c;那么 Docker 是你的理想选择&#xff01;Docker 通过容器化技术将应用程序与其运行环境隔离&#xff0c;实现快速部署和跨平台支持&#xff0c;极大地简化了开发和部署流程。本文详细介绍…