RTC-RTC软件校准思路

首先想实现RTC校准,必须要借助上面的寄存器。通过上面的寄存器可以实现的校准误差对应为0-121ppm,相当于每30天跑快的秒数是0-314秒。

但是这里需要注意的一个关键问题是,根据上面寄存器的描述,这个寄存器的值表示再每2的20次方个时钟脉冲中有多少个被跳过,用来减慢RTC时钟。所以通过这个寄存器只能对跑快的时钟进行校准,不能对跑慢的时钟进行校准。

如果时钟跑慢怎么办呢?这里介绍一个小tips,如果外接晶振的标称频率是32768HZ,假设其可能的误差范围是±2HZ,则实际频率会在32766HZ-32770HZ之间。如果设定频率就是32768HZ,那么32768HZ-32770HZ是可以通过软件校准的频率,但是32766-32768HZ的跑慢频率则无法实现校准。为此,可以设定外接时钟频率为32766,那么32766HZ是不需要校准的频率,32766-32770HZ是可以校准的频率范围。

那么如何测量误差并得到校准值呢?一般来说有两种方法:

1、通过Tamper引脚输出秒脉冲,计算描述秒脉冲的PPM误差;

2、实际运行一定的天数,再与标准时钟做对比,先得到每30天跑快的秒数,然后计算ppm误差。

 如使用第一种方法需要使用高精度的频率计来计算,也可以通过MCU来捕获,不过这个会依赖8M主时钟的精度,最好的校准效果也不会达到比8M主时钟精度更高的精度。

第一种方法也好,第二种方法也罢,核心都是计算时钟ppm误差。我们先看一下第一种方法是如何计算ppm误差的。由于使用了32766作为分频系数,因此32766Hz是不需要校准的基准频率,可将32766Hz看成新的标称频率。TamperPin的频率应为32766Hz/64=511.968HZ。若实测TamperPin的频率为511.982Hz则误差为27.35ppm。计算过程为(511.982Hz-511968Hz) /511968Hz*106=27.35ppm。因为RTC校准时,每2的20次方时钟跳过1个时钟脉冲,这相当于0.954ppm(1/2^20*10^6=0.954)。所以需要填入的校准值就是28或者29(27.35ppm/0.954ppm)。调用的库函数如下图:

 

posted @   WCH_CH32  阅读(1182)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示