微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > STM32F101xx and STM32F103xx RTC 校准

STM32F101xx and STM32F103xx RTC 校准

时间:11-24 来源:互联网 点击:
AN2604
应用笔记
STM32F101xx and STM32F103xx RTC 校准
总体介绍
实时时钟在很多嵌入式应用中是必不可少的,但是由于外部环境温度的改变,驱动RTC的晶体频率会发生变化,因此RTC就没有预想的那么准确了!
STM32F101xx and STM32F103xx附带有数字时钟校准电路,因此可以适应与变化的环境,它主要是来补偿晶体由于环境的变化,这篇应用笔记主要讨论了RTC校准的基本原理以及解释了如何利用RTC校准来提高计时精度。
1 RTC校准基本原理
1.1 晶体的准确性
在很多计时领域,通常都是用“石英精确度”这么一个术语来描述的,石英晶体振荡器提供了一个远远优于其他类型振荡器的精确度,但是它并不是完美的,石英晶体振荡器对温度十分敏感, Figure 1 展示了一个32.768HZ晶体的频率精确度(acc)和温度(T)以及曲率(K)的关系,这个曲线可以用下面的公式给出:
注:曲率K由于不同的晶体而不同,这里是针对 STM3210B-EVAL开发板来说的,关于这部分可以参考相关晶体制造商提供的详细信息。
在很多应用领域需要一个高准确度的时钟,但是在实际中有好多综合因素限制着精度的提高,通常,典型的方法是通过调节晶体的负载电容来调节精度,这一方法,虽然十分有效,但是也存在这一些缺点:
1 它需要多加一个外部器件(可调电容)。
2 其增大了电流消耗(这在电池供电的场合尤为突出)。
取代这种传统的模拟的方法,STM32F10xxx系列提供了一个数字校准器,允许用户用软件控制的方法进行校准,非常的好用!
1.2 具体方法
STM32F10xxx 的RTC模块是用一个32768HZ的通常石英晶体驱动的,其实石英晶体是一种能够提供非常固定频率的,但是有以下两种情况导致了其频率的不稳定:
1 温度变化; 2 晶体本身的变化。前面讲述了一般通常的方法都是用一个麻烦的可调电容来补偿误差,这里STM32F10xxx 使用的是一个周期计数器来进行校正,这个数字校正器通过从220个时钟周期中减去0到127个周期的方法来校正的,如图所示:
究竟有多少个时钟节拍是空白的取决于最近一次向备份寄存区域RTC校准寄存器最后七位加载的值, 之所以这个校准寄存器放在备份区域是因为这个寄存器即使在系统掉电情况下仍然可以通过后备电池进行供电(译者注:如果后背电池也掉电,当然这个寄存器的值也会丢失的),注意:从上图中可以看出时钟输出引脚是在校准之前的频率,所以这个值是不会被校准所改变的,尽管已经进行了校准,但是这个输出是在校准之前的频率。
每一个校准节拍将会从220个时钟周期中减去一个周期,这意味着每一个校准节拍将会有0.954PPM的调整值(译者注:Ppm指的是每百万个赫兹会偏移多少赫兹,即真实频率值为标称频率值加上或者减去百万分之一的XXX,其中XXX指的是晶体厂商提供的频率稳定度),结果,振荡器将会减慢0到121个ppm,下面的一个表格显示了当校准寄存器变化一位是会变化多少个ppm或者说30天中会放慢多少秒:




上面所描述的都是基于一下条件的:
STM32F10xxx RTC的数字校准电路只是从晶体时钟周期里减去了若干个周期,而且RTC的预分频器假定设置为32768,所以说时钟快于32868HZ的晶体可以被校准,而慢于32768HZ的晶体不能被校准,因此校准范围是32772HZ 到32768HZ(译者注:为什么是32772呢,因为最大的校准PPM是121,121的意思是一百万HZ时候会变化(调整)121HZ,所以32768HZ时候便可以调整{32768*(121/10 00000)}即:3.964HZ,将近4HZ,而且这个校准只是调慢的,所以能够从32772HZ校准到32768HZ,所以是32772)。
前面我们所讲的都是以预分频为32768,但是晶体频率范围是变化的,所以当晶体频率快于32768HZ是可以被校准的(可以放慢),但是当晶体频率慢于32768HZ呢?虽然不能被校准,但是并不是无能为力,我们可以把校准预分频器改为32766,这样只要晶体频率不低于32766HZ就可以校准了,这样总的可以校准(放慢){32766*(121/10 00000)}即3.96HZ,也将近4HZ,于是调整范围就变成了(32766HZ到32770HZ)。
注:在这篇应用笔记中,默认都是预分频位32766。
2 计算校准偏差量
对于一个给定的应用,如何确定我们所需要的校准值呢?这里有一个很好的方法就是利用到了RTC的时钟输出模式,就是如上图2所示的器件提供了一个RTC时钟经过一个64分屏器输出的的信号,这个信号可以用来精确的测量晶体产生的频率,如果是准32768HZ时,输出正好是512HZ。
   这个方法我们可以分一下几步来做:
第一步:使能LSE,并且将LSE作为RTC时钟,然后使能RTC;
第二步:使能RTC时钟经过64分频输出,然后在器件的ANTI_TAMP 管脚就可以测得频率输出,不过这需要设置一下
BKP_RTCCR寄存器的CCO位,让其置一使能输出。
第三步:算出晶体频率偏差多少个ppm,怎么算呢?因为我们前面说过,校准值是32766,因而理论上64分频后输出为511.968HZ,所以我们将实际测量出来的频率作出与理论值的差值,然后将这个差值转化为ppm,如何转化成ppm,知道ppm定义之后就可以知道,ppm是每一百万赫兹所偏差的赫兹数,那现在相对511.96875的偏差值的ppm就可以计算出来了:△f(HZ)*10 00000.
第四步:到表中去找同计算结果最相近的ppm数所对应的校准值写入寄存器就可以了!
注意:让RTC分频32766,它的分频寄存器里面要写32765的,因为它计数到0.
举个例子:我们现在从ANTI_TAMP管脚测得频率为: 511.982HZ,那么算出来同511.968HZ的偏差位0.14HZ,用上面公式换算出来为 27.35 ppm,在表中找到最近的为28ppm,得出的值写入校准寄存器,当然,这里还有误差0.65个ppm,由于表中给出了27个ppm的话每个月会误差69秒,那么现在27.35大约误差71秒左右,那么0.65ppm的话每个月只会误差1.7秒左右了,所以说我们将27.35个ppm误差降到0.65个ppm的结果是把每个月误差69秒降到每个月误差1.7秒左右了,已经非常可观。
注意:本方法由于是基于时钟周期削去的方法校准的,因此是针对长期进行补偿,在有限时间内补偿未必发生作用。
3 在温度变化范围上校准
现在我们讲在温度变化方面如何计算校准值,这一部分提供了这样一个步骤来最大限度的降低在最大温度变化范围内的频率变化,这包括调整温度曲线以至于让它在0ppm边缘有等量的误差点,下图3演示了如何将温度变化带来的频率误差减小到最小:
这个校准公式为: ,式中变量如下:
acc:温度转变时的偏差,单位是ppm
K:曲率常量,值为-0.14ppm/℃
T0:温度转变时的摄氏度
T:工作环境的摄氏度
例如:一个器件在室温时体现出来的是27ppm的偏差,但是应用在40摄氏度的环境中,那么用这个等式就可以计算出来温度转变时的偏差为
因为精度偏移是18ppm,那么依然从上表中可以找出校准值为19。
4 结论
STM32F10xxx 的RTC数字时钟校准特性允许用户以最低微的成本来调整时钟的精度,这个特性也提供了一种方法和思路:那就是为什么温度漂移也可以被校正或者说被预先估计出来,当然啦,这一系列的数据和结论都是建立在分频为32766(而不是32768)之上的(分频寄存器里面写32765).

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top