微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 模拟电路设计 > MC9S08MG64实时时钟的校准和补偿(二)

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

时间:10-15 来源:互联网 点击:
3 实时时钟的温度补偿

上面讨论了在一个固定的温度下如何做时钟的补偿及其原理,现在我们讨论在温度变化的情况下如何做时钟的自动补偿。如前所述,晶体的频率偏差可以用抛物线方程来描述,如果我们确定出抛物线,那么就可以通过温度(温度的测量可以用集成温度传感器或NTC电阻来完成)来确定出频率偏差从而对其进行补偿。比较常用的一种方法就是测出一些点然后用最小二乘法拟合。简要描述如下:

由一些已知点拟合抛物线方程:

已知点:(X1,Y1), (X2,Y2), (X3,Y3) … (Xn,Yn)。

确定抛物线方程y=ax2 + bx + c 的系数。

最小二乘法:

至少需要三个点来确定此抛物线。

晶振典型温漂曲线形式如下:

y = a(x-t)2 + k = ax2 - 2atx + at2 + k

对于同一个型号的晶体,假定抛物线二次系数不变,可由公式(2)(3)求得b c,然后得出t, k。从而实现两点校正。由于抛物线越远离顶点变化率越大,所以在抛物线的两端进行校正可以得到更好的补偿精度。

t = -b/2a

k = c - b2/4a

如果晶体的一致性比较好,系数a和t偏差不大,可以只对系数k进行标定。即单点校正。

4 使用FTM 模块产生秒脉冲

在一些应用中,实时时钟输出的秒脉冲需要用光耦隔离。过窄的时钟脉冲难以通过低速光耦。在这一节中,将讨论一种使用FTM 模块来校正实时时钟iRTC输出的秒脉冲的方法。校正后的秒脉冲将具有:

更高的精度(每个秒脉冲)

50% 的占空比

4.1 以RTCCLKOUT做时钟源产生秒脉冲

在上述讨论的实时时钟(iRTC)的校准方法中,RTCCLKOUT时钟在长的时间内精度得到了保证。在图2-1中可以看到,由于补偿间隔是M(M》1)秒,补偿间隔内的第一秒长度和其它秒长度是不一样的,因为第一秒包含了补偿时间。如果我们能把此补偿时间平均分配到补偿间隔内的每一秒钟,使每一秒的长度相等(每一秒都得到补偿),那么我们将得到均匀的高精度秒脉冲输出。

单片机中的程序计算补偿间隔 内每一秒的补偿时间并对每一秒进行补偿。如果补偿间隔是M,补偿值是N,那么每一秒钟的补偿值就是N/(32768 ×M)秒。N/(32768×M)可能是一个很小的值,因此我们需要一个高精度的时钟来得到高分辨率(精度)。

在此方案中我们使用总线时钟(bus clock),该总线时钟由外部的32768Hz 晶体(XOSC1)组成的振荡器产生参考频率,然后经由片内倍频电路锁频环(FLL)倍频获得。锁频环(FLL) 和实时时钟(iRTC)共用同一外部振荡源。锁频环(FLL)的倍频系数设置为512,所以总线频率最大为16.78MHz(512×32768)。每一秒的补偿时间为(512×N)/M 总线时钟周期,它消除掉了温度和晶体老化的影响。

从图2-1(补偿后的实时时钟秒脉冲输出)中我们可以看出,当前补偿周期的最后一个时钟沿就是下一个补偿周期的第一个时钟沿。用第一个时钟沿做对齐,实时时钟的补偿精度得到继承(上升沿和下降沿都可以用来做对齐;由软件来设定)。

MC9S08GW64 的FTM模块的每个通道可以单独工作在输入捕捉或者输出比较模式。我们可以使用一个FTM模块的两个通道,其中的一个通道来捕捉iRTC输出的窄脉冲,另一个通道输出50%占空比的秒脉冲。

当 FTM模块的通道1捕捉IRTCCLKOUT的上升沿(或下降沿)时使用总线时钟,在FTMCH1中断触发后保存FTM计数器的捕获值到FTMCH1V。在FTMCH1中断程序中,FTMCH0被设置为输出比较模式,输出比较值设置为FTMCH1V加一个偏移Ф。Ф为一个常量加每一个脉冲周期的调整值。表3列出了IRTCCLKOUT和FTM输出边沿的上升时刻,以及两者的脉冲宽度。

表3 IRTCCLKOUT 和FTM 输出时序

TAVG = V ÷ M(晶体振荡周期)

= 512 × V ÷ M(总线时钟周期)

从表3可以看出,RTCCLKOUT先右移了σ。每一个秒脉冲用平均的补偿值进行补偿。

图4-1和图4-2对这种补偿方法做了详细地说明。图4-1演示了加入一些振荡周期的情形。

在图4-1中:

图4-2 说明了减少一些振荡周期的情形。

图4-2:

偏移量 σ(延迟)有两个作用:

对实时时钟iRTC 输出进行移相;每个秒脉冲的补偿都基于这个值

有足够的时间处理FTMCH1中断

每一个秒脉冲的补偿时间都被加上σ,在例程中σ 被设置为0x8000,在总线时钟为32768 ×512Hz时这相当于1.9ms。σ值的大小取决于补偿间隔(compensation period)和补偿值(compensation value)。

0 《 σ - (M-1)(512 × V/M) 《 0xFFFF

-128 《 V 《 127

一般来讲,当温度变化时晶体的误差总是负的,所以σ 可以设置为一个比较小的值,比如0x2000,0x1000,补偿的范围得以增大。

FTMCH0设置为输出比较模式(匹配时设置输出为高),当FTM 计数器的值和FTMCH0V 寄

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

网站地图

Top