首先想实现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)。调用的库函数如下图:
标签:误差,RTC,校准,ppm,频率,软件,时钟 From: https://www.cnblogs.com/wchmcu/p/17404090.html