可提高实时时钟长期计时准确度时钟程序算法

发布者:MysticGlow最新更新时间:2009-01-02 来源: 电子技术应用关键字:实时时钟  准确度  定时器  软件校正 手机看文章 扫描二维码
随时随地手机看文章
摘  要: 通过对引起实时时钟计时误差因数的分析,给出了一种提高实时时钟长期计时准确度的实用而有效的软件方法。该方法具有成本低、易实现、通用性强、彻底校正等优点。

  电子计时器通常以石英晶振为时钟源。时钟源的频率通常为几十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间偏差引来的计时误差。对于专用硬件时钟电路如:DS1320、PCF8583等,可以采用每小时或每10分钟读出时间,然后乘上再写回芯片的方法校正。对于采用可编程分频定时器,由软件模拟时钟功能的软件实时时钟,则有更好的提高计时准确度的方法。因为定时器的分频系数是可以动态改变的,如89C52内置的16位计数器,分频系数可以在1~216内任意选取。令N=Ns作为分频系数写入计数器,这样每个基本计时周期TN=TNS,从而实现软件校正定时周期。

  在×Ns刚好为整数时,可以使得计时误差为0。大部分的情况×Ns并不是整数,若将四舍五入后的值作为Ns,就会带来量化误差,最大可达,这是一个不容忽视的问题。以12MHz的89C52 T2定时器定时10ms为例,每天最大量化误差累加是:24×3600÷(2×10000)=4.32s。若在片内RAM中定义1个字节尾数,令它的满码值为,则最大量化误差就从原来的下降到。对应于上述的10ms定时程序,其最大量化误差的累加值由原来的4.32秒/天减少到0.016875秒/天,这是很大的改进。根据精度要求,可以在片内RAM中定义2个字节,令它的满码值为,这样最大量化误差就可降为。减少量化误差的具体算法是:对于使用89C52的T2定时器,若标称为12MHz的晶振实际长期平均振荡频率fo=12.0006MHz,量化精度取1字节,取TNS=10ms,则分频系数为:

  

  Ni为第i次定时值,可能是10000或10001,这取决于NTi的进位;NTi为第i次尾数暂存值。 

  每次定时中断服务程序均执行(1)式,取得第i 次的定时计数值,然后实时时钟增加10ms,完成时钟功能。值得注意的是,Ni是实际的计数值,至于实际写入特定定时器的数值,则须根据具体定时器的递减、递加计时性质分别写入Ni或Ni的补码,同时定时器 在溢出到新的定时值装入并开始新定时周期这段时间,将TLOAD考虑在内。例如89C52 T2工作于自动重装定时初值、递加定时方式时,实际写入定时器T2的捕获/自动重装载寄存器(Rcap2H,Rcap2L)的值是Ni的补码,即65536-Ni;而对于89C52 T0和T1定时器则实际写入的定时初值是:Ni的补码+TLOAD对应的机器周期数。

3  测量晶振实际长期振荡频率

  没有专用仪器,怎样测得晶振实际长期振荡频率?有一个很简单的方法。以标称频率下的定时计数值Ns作为实际计数值,在电台报时时将时间设置正确,然后让它运行一段较长的时间,再与电台的报时比较求出误差的秒数,即可算出实际频率。例如晶振标称频率是12MHz,时钟运行了10天,快了432s,则

  

  若将上述算法编成程序,让用户直接输入N和NT的值;或输入运行了多少天、时、分、秒,快或慢了多少秒,让系统自动算出N和NT,将会为从根本上校准时钟带来极大方便。任何人都可以轻松地提高时钟准确度而无需专业知识和专用仪器。

  现在微控制器已广泛应用于人们日常生活的各个方面,电子时钟也随着它融入到各种电器和设备中,如专门时钟功能的石英表和各种附带电子计时器的电器如手机、普通液晶显示电话、VCD机、DVD机、电视及高档音响、空调遥控器、电力系统微机自动化设备等。高档专用计时器如高档石英表,因为计时是它的主功能,须保证计时准确度而对计时时钟源准确度要求严格,每天误差在1s以下。以上提到的其它电器,其时钟只是它的一个附带功能,出厂时一般不严格校正,甚至根本不做任何校正。所以误差通常在1秒/天以上,有些达10秒/天以上,每天都需校正,否则运行几天就会因误差太大而变得不可信,令用户不胜烦恼。

  在电力系统中,无人值班变电站须安装无功自动控制设备。它根据一天中的不同时间段和电网无功情况自动投退电容器组,使得电网的功率因数尽可能接近于1,以利于经济运行。但有些设备内部时钟每天误差>5分钟。若将本文算法编入计时程序中,让用户自己校正定时参数,将大大提高各种附带时钟的计时准确度。

  将基于软件提高实时时钟准确度的算法应用于普通石英晶振,利用89C52 T2定时器的软实时时钟,未作校正前每天快11s;进行软件计时校正后,每10天的计时误差<1s。本文提出的基于软件提高时钟准确度的算法,具有极高的实用价值。

 

参考文献

1 何立民.单片机应用技术选编(1).北京:北京航空航天大学出版社,1994

2 罗 娟.计算机时间校准方法.微计算机信息,1999;(4)
关键字:实时时钟  准确度  定时器  软件校正 引用地址:可提高实时时钟长期计时准确度时钟程序算法

上一篇:如何在高速加工中正确使用CAM软件技术
下一篇:高性能矢量网络分析仪VectorStar系列

推荐阅读最新更新时间:2024-03-30 21:27

定时器0控制LED的闪烁时间;计数器1来控制数码管的显示
/* 定时器0控制LED的闪烁时间;计数器1来控制数码管的显示 */ #include reg52.h #define uint unsigned int #define uchar unsigned char sbit DULA = P2^6; sbit WELA = P2^7; sbit LED1 = P1^0; void display(uint i); void delay(uint z); uchar code arry = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; void delay(uint z) {
[单片机]
MEGA16单片机定时器(16位)源代码
/* 程序名: mega16a 芯片16位定时计数器; 概括: 学会了控制8位定时器,16位定时器和它如出一辙,It's a piece of cake! 在芯片开发板上实现精确一秒闪烁... 心得 : 电子技术和音乐一样 ,都是一门艺术,令人回味... finish time: 2014年3月8日19:33:10; 作者 : 肖邦; */ #include avr/io.h //头文件; typedef unsigned char uint8 ; //在程序中用 uint8 相当于写 unsigned cha
[单片机]
STM32F0 定时器触发ADC,多通道采样、DMA传输数据的配置
本块代码实现了定时器定时触发ADC,多通道采样,并通过DMA进行数据传输到内存的操作。 #include adc.h #define DMA_BUFFER_SIZE 6 uint8 sample_finish = 0; int16 adc_dma_tab = { 0 }; uint8 sample_index = 0; //采样点数据 int16 sample_1 = { 0 }; int16 sample_2 = { 0 }; int16 sample_3 = { 0 }; int16 sample_4 = { 0 }; int16 sample_5 = { 0 }; int16 sample
[单片机]
PIC看门狗定时器WDT的理解
简介:pic单片机看门狗计时器(Watch Dog Timer)是一个片内自振式的RC振荡计时器,无需任何的外接元件。这意味着即使芯片OSC1/OSC2上振荡停止了(例如执行指令SLEEP后),WDT照样保持计时。WDT计时溢出将产生RESET。在PIC16C5X 芯片内有一个特殊的谓之 定义EPROM (Configuration EPROM)的单元,其中的一个位是用于定义WDT的。 pic单片机看门狗计时器(Watch Dog Timer)是一个片内自振式的RC振荡计时器,无需任何的外接元件。这意味着即使芯片OSC1/OSC2上振荡停止了(例如执行指令SLEEP后),WDT照样保持计时。WDT计时溢出将产生RESET。在P
[单片机]
构建一个基于555定时器的简单ESR测量装置
  电容器似乎一切都很好,直到您到达电源出现故障或拒绝以最佳方式运行的地步。如果问题是噪音,有一个简单的解决方法,你只需添加更多的电容器。但这并不能解决问题。有什么问题?   问题源于一个天真的假设,即电容器(在很大程度上)是“理想的”设备,而事实上,它们不是。这些不良影响是由于称为内部电阻或等效串联电阻 (ESR)的东西。由于其构造中使用的材料,电容器具有有限的内阻。   不同类型的电容器具有不同的 ESR 范围。例如,电解电容器通常比陶瓷电容器具有更高的 ESR。对于许多应用,测量电容器的内阻变得很重要。今天在这篇文章中,我们将构建一个ESR 表,并学习如何 使用 555 定时器 IC 和晶体管来测量电容器的 ESR。
[测试测量]
构建一个基于555<font color='red'>定时器</font>的简单ESR测量装置
基于STM32的智能学习空调项目的定时器捕获驱动
/************************************************************************************************************************* * 函数 : TIM3.C * 功能 : 红外信号捕获和发射 * 参数 : 无 * 返回 : 无 * 依赖 : 底层读写函数 *************************************************************************************************************************/ voidIRDA
[单片机]
STM32处理器定时器分析(实现一个定时中断)
前言: 1.本博文基于STM32F103ZET6芯片和ST官方提供的3.5.0库函数; 2.学习过51单片机学习STM32定时器会容易理解一些,但是两个定时器的实力有很大的距离; 3.定时器是难点也是重点;本博文以通用定时器TIM2~TIM5来说明;例程是TIM3 6.定时器结构稍复杂,寄存器较多,本博文根据一个简单的定时器中断实验展开,所列出的相关寄存器是专门针对本次实验来说的,其他不相关定时器不再列出; 一 STM32定时器的分类 1.高级定时器: TIM1和TIM8 2.通用定时器: TIM2,3,4,5; 3.基本定时器: TIM6和TIM7; 二 通用定时器的功能 (1)16位向上,向下,向上/向下自动装载寄存器
[单片机]
STM32处理器<font color='red'>定时器</font>分析(实现一个定时中断)
C8051F与80C51系列单片机的不同初始化
1 引言 近30年来,世界各主要电子元器件生产厂商纷纷推出自己各具特色的单片机产品。而在百花齐放的单片机家族中,80C5l系列一直扮演着重要的角色。该单片机在教学、科研等领域已经成为入门单片机并成为单片机应用的首选,该产品以其易读性好、扩展能力强而著称,从而成为广大从事单片机开发者最熟悉、最具代表的机型。但人们往往在熟悉80C51单片机之后又选择别的系列单片机开发产品,这是因为80C51具有运算速度慢、功耗大、内部资源少等不足,所以限制了其使用范围。Cygnal公司推出的C805lF系列单片机既弥补了80C51系列的不足,又与MCS—5l指令集兼容。C805lFxxx系列单片机是完全集成的混合信号系统级芯片,具有与8051指令集
[应用]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
最新工业控制文章
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved