×
嵌入式 > 技术百科 > 详情

MC9S08MG64实时时钟的校准和补偿(一)

发布时间:2020-06-02 发布时间:
|

MC9S08MG64是飞思卡尔半导体针对国网单相电表推出的一款半SoC芯片,它集成了片上液晶驱动器和实时时钟模块,以及多种通讯接口。用于智能电表设计时,配合外部电能计量芯片,即可完成性价比良好的单相电表设计。此单片机内部集成的实时时钟模块(iRTC) 具有时间保持和日历功能。对由晶体本身的频偏及温度漂移引起的误差,可以利用实时时钟本身的补偿功能进行修正。本文讨论如何对实时时钟进行校准和补偿,以达到国网要求的标准(误差小于5ppm)。

晶体的特性

1.1 负载电容的影响

一般说来晶体的振荡频率是很稳定的,但我们也知道晶体的振荡频率受负载电容和温度变化的影响。如下图所示的例子为一个负载电容为12.5pF的晶体,当负载电容变化时其振荡频率偏差的随动特性

振荡电路匹配电容的离散性和温度漂移,电路板的分布电容都会对振荡频率造成影响。对于MC9S08MG64,使用32.768kHz晶体时其振荡器可以有两种配置。当使用低功耗模式(RANG = 0, HGO = 0)时,负载电容、反馈电阻、和串行电阻已经集成在单片机内部了,外面只需加晶体即可。这种配置的功耗比较低,且可以抵消上述误差因素的影响。当使用高增益模式(RANG = 0,HGO = 1)时,外部要加负载电容、反馈和串行电阻。这种配置的抗干扰能力比较强,但外部元器件对振荡频率的精确性存在影响。对于负载电容引起的频率漂移,我们可以通过选用温漂系数小的电容(如COG电容)来减小其影响。

1.2 温漂

上图是音叉型的晶体振荡频率随温度变化的曲线,它可以用抛物线方程描述为:

Fdev = B (T - TQ)2 + K

其中:

由以上分析可见,对于一个晶体振荡电路,影响其振荡频率误差的因素有:

负载电容

晶体在转折温度点的频率偏差K

温漂Fdev

因此,要使iRTC精确计时,必须消除以上因素带来的误差。负载电容可以通过振荡电路元器件的选择来保证。而后两项则必须通过软件的办法来校准和补偿。


2 实时时钟的补偿原理

实时时钟使用外部的32768Hz 振荡时钟经由32768分频产生秒脉冲。寄存器IRTC_COMPEN用来对补偿进行配置;这包括补偿的时间间隔(compensation interval) 和补偿值(compensation value) 。补偿电路根据配置在固定的时间间隔内(compensation interval)增加或减少振荡周期。

补偿间隔和补偿值寄存器

补偿间隔(compensation interval)是无符号整数,取值范围是1-255 秒;补偿值(compensation value)的取值范围是-128 to 127。增加或减少一个振荡周期将会产生±30.5ppm(1/32768)的频率偏移,所以此补偿电路具有0.119ppm(interval = 255,value = 1)到3906ppm(interval = 1, value = -128)的补偿能力。如果补偿间隔(compensation interval)或补偿值(compensation value)之一设置为0将禁止补偿功能。

实时时钟模块在补偿周期的第一秒进行补偿。根据补偿寄存器设置对第一秒钟增加或减少相应的振荡周期(compensation value),其它的秒脉冲输出保持不变。从而导致秒脉冲之间的时长不同,但从长时间来看时间精度因得到补偿而大为提高。

MG64的实时时钟模块(iRTC)可以配置为在引脚RTCCLKOUT输出补偿后的秒脉冲。图2-1说明了引脚RTCCLKOUT 输出秒脉冲的情况。秒脉冲的高电平时长为一个时钟振荡周期(1/32768 秒)。

在没有启动补偿的情况下,每个秒脉冲的周期都是T(包含32768个时钟振荡)。如果启动补偿并设置补偿间隔为M,补偿值为V,那么在每个补偿周期(M秒内),第一个秒脉冲周期会增加或减少V个时钟振荡,变为32768 ±V个时钟振荡。第一个秒脉冲的长度与其它秒脉冲长度不同。

在图2-1中,补偿间隔为M,补偿值为V。

T= 32768 个振荡周期

Tcomp+/- =(32768 ± |V|)个振荡周期

由补偿值决定,第一秒钟(Tcomp)被减少或增加|V| 个振荡周期。其它的秒脉冲时长仍然是32768 个振荡周期。

补偿间隔和补偿值的选择可以根据晶体的误差和需要的补偿精度来决定。

表1中的例子说明如何根据补偿误差最小化来选择补偿间隔和补偿值。

表2列出了当晶体的误差为-2ppm ,不同补偿间隔的补偿值及补偿后的误差。根据公式2为不同的补偿间隔计算补偿值;根据公式3可以计算出各补偿间隔和补偿值组合补偿之后的误差。最佳补偿间隔(61)和补偿值(-4)是根据补偿后误差最小而选取的。

公式1用来计算引入误差后的晶体振荡周期,它可以由晶体的误差定义CrystalError = Δf/f推导得出。晶体误差一般用ppm表示,注意量纲的换算。

在实际的应用中,我们可以根据需要的补偿精度来选择补偿间隔和补偿值。最大补偿间隔可以根据实际情况确定。例如如果每分钟都要高精度输出,那么补偿间隔可以设置为60。

下图为根据上述方法选取一些温度点做补偿的实验结果。Fdev为补偿之前的频率偏差, Fcalib为补偿之后的频率偏差。从实验数据可见,使用正确的补偿间隔和补偿值,MC9S08MG64的iRTC的精度完全可以控制在2ppm以内。

 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
分拣机器人的工作原理是什么