高准确度时钟程序算法
发布时间:2008/5/27 0:00:00 访问次数:1467
     黄沛芳 来源:《电子技术应用》
     摘要:通过对引起实时时钟计时误差因数的分析,给出了一种提高实时时钟长期计时准确度的实用而有效的软件方法。该方法具有成本低、易实现、通用性强、彻底校正等优点。
    
    
     关键词:实时时钟
     准确度 定时器 软件校正
     电子计时器通常以石英晶振为时钟源。时钟源的频率通常为几十khz乃至几十mhz,而学用时钟的最小计单位一般在0.01s~1s。高频的时钟源脉冲通过分频器后产生基本定时脉冲。电子计时器的计时部分就是对基本定时脉冲进行累加,产生秒、分、时等时间信息乃至日、月、年等日期信息。
     1 引起计时误差的因数
     一个常规电子计时器的计时准确度,取决于晶振标称频率(fs)与实际频率(fo)的频率偏差和晶振频率的时漂、温漂等离散参数。普通晶振的实际频率与标称频率有较大的偏差,可达万分之五(万分之5),折算到一天计时误差就是43.2s。一般室内气温变化在每天10℃左右,对应晶振频率温漂<10
     -5,若以一段较长的时间取温漂的平均值则更小。因此电子计时器的误差主要取决于晶振实际频率与标称频率的偏差。
     2 减少计时误差的方法
     2.1 纯硬件方法
     对于纯硬件计时电路,因分频系数n固定不变,要提高计时准确度只能调整fo,使得已尽可能接近于fs。常规减少计时误差的方法是:微调元件l、c、r的参数,调节硬件频率,使得时钟源的频率误差减小。但此方法操作复杂,没有一定的电子技术知识和专用仪器很难校准,而且会降低晶振频率稳定度。
     2.2 纯软件方法
     由微控制器控制的实时时钟,可以采用软件的方法消除晶振实际频率与标称频率间误差引起的计时误差。
     令晶振标频率为fs,而实际频率为fo,则fs=k×fo。
     若fs=fo则k=1,否则k≠1。
     tns=ns×(1/fs)=ns×(1/k)×(1/fo),ns是在标称频率fs下定时tns的分频系数。
     由微控制器控制的实时时钟,可以用软件模拟,将1/k归入总的计时程序中,从而消除fs和fo间偏差引来的计时误差。对于专用硬件时钟电路如:ds1320、pcf8583等,可以采用每小时或每10分钟读出时间,然后乘上1/k再写回芯片的方法校正。对于采用可编程分频定时器,由软件模拟时钟功能的软件实时时钟,则有更好的提高计时准确度的方法。因为定时器的分频系数是可以动态改变的,如89c52内置的16位计数器,分频系数可以在1~2
     16内任意选取。令n=(1/k)ns作为分频系数写入计数器,这样每个基本计时周期tn=tns,从而实现软件校正定时周期。
     在(1/k)×ns刚好为整数时,可以使得计时误差为0。大部分的情况(1/k)×ns并不是整数,若将四舍五入后的值作为ns,就会带来的量化误差,最大可达(1/2n),这是一个不容忽视的问题。以12mhz的89c52t2定时器定时10ms为例,每天最大量化误差累加是:24×3600÷(2×10000)=4.32s。若在片内ram中定义1个字节发尾数,令它的满码值为1/n,则最大量化误差就从原来的1/2n下降到1/(2×n×256)。对应于上述的10ms定时程序,其最大量化误差的累加值由原来的4.32秒/天减少到0.016875秒/天,这是很大的改进。根据精度要求,可以在片内ram中定义2个字节,令它的满码值为1/n,这样最大量化误差就可降为1/(2×n×65536)。
     减少量化误差的具体算法是:对于使用89c52的t2决定器,若标称为12mhz的晶振实际长期平均振荡频率fo=12.0006mhz,量化精度取1字节,取tns=10ms,则分频系数为:
     n0=fo/(12×tns)=12.0006/(12×10 6×10
     -2)=10000.5
     令n=int(n0)=10000
     nt=int[(n0-n)×256+0.5]=128
  &nb
     黄沛芳 来源:《电子技术应用》
     摘要:通过对引起实时时钟计时误差因数的分析,给出了一种提高实时时钟长期计时准确度的实用而有效的软件方法。该方法具有成本低、易实现、通用性强、彻底校正等优点。
    
    
     关键词:实时时钟
     准确度 定时器 软件校正
     电子计时器通常以石英晶振为时钟源。时钟源的频率通常为几十khz乃至几十mhz,而学用时钟的最小计单位一般在0.01s~1s。高频的时钟源脉冲通过分频器后产生基本定时脉冲。电子计时器的计时部分就是对基本定时脉冲进行累加,产生秒、分、时等时间信息乃至日、月、年等日期信息。
     1 引起计时误差的因数
     一个常规电子计时器的计时准确度,取决于晶振标称频率(fs)与实际频率(fo)的频率偏差和晶振频率的时漂、温漂等离散参数。普通晶振的实际频率与标称频率有较大的偏差,可达万分之五(万分之5),折算到一天计时误差就是43.2s。一般室内气温变化在每天10℃左右,对应晶振频率温漂<10
     -5,若以一段较长的时间取温漂的平均值则更小。因此电子计时器的误差主要取决于晶振实际频率与标称频率的偏差。
     2 减少计时误差的方法
     2.1 纯硬件方法
     对于纯硬件计时电路,因分频系数n固定不变,要提高计时准确度只能调整fo,使得已尽可能接近于fs。常规减少计时误差的方法是:微调元件l、c、r的参数,调节硬件频率,使得时钟源的频率误差减小。但此方法操作复杂,没有一定的电子技术知识和专用仪器很难校准,而且会降低晶振频率稳定度。
     2.2 纯软件方法
     由微控制器控制的实时时钟,可以采用软件的方法消除晶振实际频率与标称频率间误差引起的计时误差。
     令晶振标频率为fs,而实际频率为fo,则fs=k×fo。
     若fs=fo则k=1,否则k≠1。
     tns=ns×(1/fs)=ns×(1/k)×(1/fo),ns是在标称频率fs下定时tns的分频系数。
     由微控制器控制的实时时钟,可以用软件模拟,将1/k归入总的计时程序中,从而消除fs和fo间偏差引来的计时误差。对于专用硬件时钟电路如:ds1320、pcf8583等,可以采用每小时或每10分钟读出时间,然后乘上1/k再写回芯片的方法校正。对于采用可编程分频定时器,由软件模拟时钟功能的软件实时时钟,则有更好的提高计时准确度的方法。因为定时器的分频系数是可以动态改变的,如89c52内置的16位计数器,分频系数可以在1~2
     16内任意选取。令n=(1/k)ns作为分频系数写入计数器,这样每个基本计时周期tn=tns,从而实现软件校正定时周期。
     在(1/k)×ns刚好为整数时,可以使得计时误差为0。大部分的情况(1/k)×ns并不是整数,若将四舍五入后的值作为ns,就会带来的量化误差,最大可达(1/2n),这是一个不容忽视的问题。以12mhz的89c52t2定时器定时10ms为例,每天最大量化误差累加是:24×3600÷(2×10000)=4.32s。若在片内ram中定义1个字节发尾数,令它的满码值为1/n,则最大量化误差就从原来的1/2n下降到1/(2×n×256)。对应于上述的10ms定时程序,其最大量化误差的累加值由原来的4.32秒/天减少到0.016875秒/天,这是很大的改进。根据精度要求,可以在片内ram中定义2个字节,令它的满码值为1/n,这样最大量化误差就可降为1/(2×n×65536)。
     减少量化误差的具体算法是:对于使用89c52的t2决定器,若标称为12mhz的晶振实际长期平均振荡频率fo=12.0006mhz,量化精度取1字节,取tns=10ms,则分频系数为:
     n0=fo/(12×tns)=12.0006/(12×10 6×10
     -2)=10000.5
     令n=int(n0)=10000
     nt=int[(n0-n)×256+0.5]=128
  &nb
上一篇:一种在线式漏电保护器测试仪的研制