一种基于累积误差控制的RTC补偿算法及电路*
2014-12-10赵东艳周芝梅王于波张海峰
赵东艳,周芝梅,王于波,张海峰
(北京南瑞智芯微电子科技有限公司,北京 100192)
0 引言
高精度实时时钟是现代智能电表的关键技术,我国智能电表对时钟精度的要求为日计时误差必须小于等于0.5 s/天,这要求计时电路的时钟偏差控制在5.7 ppm以内。目前国内智能电表实时时钟的产生主要依靠高精度RTC芯片,此类RTC芯片目前90%以上依赖从国外进口,造成我国的电表生产严重依赖国外进口芯片。
近年来国内集成电路行业开始研究集成高精度RTC模块的微控制器(Micro Controller Unit,MCU)芯片。采用这种MCU芯片的电表方案,不再需要单独的RTC芯片,可以逐步摆脱对国外RTC芯片的进口依赖,也可以使表方案设计简单,成本降低。这类MCU设计面临的问题是,如何能对集成在MCU内的RTC模块进行全温区调教,使其计时精度满足国网对电表的精度要求。
本文首先介绍了晶体的温度频率误差特性,介绍了目前较常用的RTC温度补偿的方法,提出了基于累积误差控制的温度补偿算法,该算法能将累积计时误差控制在15.3 ppm以内,计时时间越长,计时精度越高。并在集成有RTC模块的MCU内完成了补偿电路的设计,开发了自动补偿电路,该MCU能很好地满足国网电表的计时精度要求。
1 补偿原理及算法
1.1 补偿原理及传统补偿方式
MCU中的实时时钟通常是用32 768 Hz晶振来产生,32 768 Hz石英晶振的振荡频率会随温度变化,称之为温度特性[1]。晶振的温度特性如图1所示,呈二次函数关系。
图1 晶振温度频率误差曲线
从图1的曲线可以看出,在横轴的两头即低温和高温区晶体的频率偏差很大。32 768 Hz晶振的这种特性决定了其本身无法达到国网对智能电表的计时精度要求,必须加入温度补偿电路以提高计时精度。通常的温度补偿系统中,首先通过温度传感器,获得当前的晶振温度,然后根据图1的曲线计算出晶体的振荡频率偏差,根据这个偏差值进行频率补偿。
目前常见的温度补偿方法,有改变振荡器的负载电容来调整振荡频率[2]。此方法的优势在于调整精细,可以实现步距±1 ppm的校准,实现精确微调,但为保证晶振起振和稳定运行,电容的大小有一定限制,电容补偿的偏差范围通常限定在±40 ppm以内。且电容占据较大的芯片面积,补偿成本比较大,还有就是电容本身随集成电路的工艺稳定性比较差。另外也可以通过对32 768 Hz振荡器的秒标输出进行数字调校[3]的方式来调整计时精度。由于32 768 Hz振荡器一个时钟周期能带来30.5 ppm的频率变化,所以该方法必须设定一个较长时间的校准周期才能达到较高的调教精度,比如参考文献[3]中的例子,校准周期假定为10 s。并且此方法,10 s校准完成那一刻,计时精度是最高的,在校准之前的时间内,计时误差是在累积增长的。
1.2 基于累积误差控制的补偿算法
利用32.768 kHz晶体振荡电路计数,计数周期满32 768时计为一个秒周期。所以计数器的一个计数周期,相当于秒周期改变量为:
如果简单的对秒脉冲进行数字补偿,能获得的计时精度是 30.5 ppm,对于小于30.5 ppm的频率偏差,无法得到补偿,且这些偏差会形成累积效应,随着计时时间的加长,计时偏差会越来越大。
经过研究,本文提出了基于累积误差控制的补偿算法。补偿算法公式如下:
式中,Xn为当前时刻根据晶振温度得到的需要补偿的频率误差(单位 ppm),Yn-1为上次补偿后遗留的剩余误差,N为当前秒需要数字补偿的整时钟周期数,Y为本次数字补偿后的剩余频率偏差。由于对补偿值N进行了四舍五入,所以 Y的值会小于15.3 ppm,且由于本次补偿的剩余误差会累积到下次需要补偿的误差值中,所以计时误差不会随着计时时间的变长累积变大。
2 补偿算法电路实现
2.1 补偿电路实现
根据补偿算法式(2)设计了新的全数字时钟补偿电路,结构示意图如图2所示。
图2中X对应新输入的频率偏差值,Y代表上次补偿后残余误差,N为运算后需要对秒标进行调整的计数周期数。该电路采用全数字电路实现,电路受集成电路工艺波动的影响小,且实现简单。
2.2 MCU的硬件自动补偿流程
图2 基于累积误差控制的时钟补偿电路
国网电表要求在无市电情况下,依靠1 200 mA电池能工作至少5年,这对智能电表主控芯片提出很高的功耗要求。为了节省功耗,该MCU中实现了硬件自动补偿电路,即对上面的补偿电路实现硬件自动定时触发调教。当MCU处在休眠状态时,CPU及除RTC外的电路都在断电模式下,以降低芯片功耗。当预设的调教时间到时,硬件自动打开温度传感器、ADC及调教电路的电源,并依次通过温度传感器获得温度值,通过ADC转化为数字数据,然后再用此数据从查找表获得此温度下需要校准的频率误差值,开启自动补偿电路完成频率误差的补偿,完成后重新设计相关电路进入休眠。整个补偿过程不需要CPU参与,通过RTC的定时报警功能自动打开相关电路开始补偿,完成后再自动关闭这些电路以节省功耗。工作流程如图3所示。
3 电路仿真及结果分析
对基于累积误差控制的时钟补偿电路的仿真结果如图4所示。
图3 硬件自动补偿流程
图4 电路仿真时序图
图4中对式(2)中的数据都乘以 10以实现整数运算,图中的变量分别为:trim_value,根据温度获得的新的ppm值;rtc_sum,累计误差;rtc_quo,累积误差除以 30.5以后的商值;rtc_remainder,累积除以30.5以后的余数;rtc_quo_new,对rtc_quo校正过的新商值;rtc_remainder_new,rtc_remainder校正过的新余数值;clk_second,秒脉冲输出。
图4中rtc_quo_new为每秒实际需要调整的计数周期数,负值代表计数个数减少,比如正常计数32 768个周期为1 s,当rtc_quo_new为-4表示计数只需要计数到32 764个时钟周期即可;rtc_remainder_new为本次补偿遗留的误差值,需要与下次需要补偿的误差值进行累积。
由式(2)和仿真结果都可以看出,该补偿电路能确保每次补偿后的累积误差都控制在15.3 ppm以内,累积误差不随时间变长而变大,所以当达到累积10 s时长时,平均误差达到1.53 ppm,时间越长精度越高,计时精度远高于国网电表的标准要求。
该新方法与负载电容调整方式相比,电路简单,面积小,成本低,受集成电路工艺波动影响小。与传统的数字补偿调校方式相比,在控制每秒误差同时,不会累积误差,有效保证了实时时钟在长期运行的情况下累积误差维持在15.3 ppm内,计时精度的补偿效果如图5所示。
本文新提出一种基于累积误差控制的RTC温度补偿算法,累积误差控制在15.3 ppm内。开发了硬件补偿电路,并在MCU中设计了硬件自动补偿流程,能很好地满足国网电表计时精度高、功耗低的应用需求。
图5 不同补偿方式计时精度效果图
[1]邹云.温度补偿晶体振荡器的研究[D].天津:南开大学,2010.
[2]张昭.一种温度补偿晶体振荡器芯片的设计[D].成都:四川大学,2006.
[3]邓乾中.自校准实时时钟 RTC的研究和设计[D].武汉:华中科技大学,2008.