0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于软件提高实时时钟准确度的算法

电子设计 来源:郭婷 作者:电子设计 2019-10-16 08:04 次阅读

电子计时器通常以石英晶振为时钟源。时钟源的频率通常为几十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 纯软件方法

微控制器控制的实时时钟,可以采用软件的方法消除晶振实际频率与标称频率间误差引起的计时误差。

基于软件提高实时时钟准确度的算法

由微控制器控制的实时时钟,可以用软件模拟,将1/K归入总的计时程序中,从而消除fs和fo间偏差引来的计时误差。对于专用硬件时钟电路如:DS1320、PCF8583等,可以采用每小时或每10分钟读出时间,然后乘上1/K再写回芯片的方法校正。对于采用可编程分频定时器,由软件模拟时钟功能的软件实时时钟,则有更好的提高计时准确度的方法。因为定时器的分频系数是可以动态改变的,如89C52内置的16位计数器,分频系数可以在1~216内任意选取。令N=1/KNs作为分频系数写入计数器,这样每个基本计时周期TN=TNS,从而实现软件校正定时周期。

在1/K×Ns刚好为整数时,可以使得计时误差为0。大部分的情况1/K×Ns并不是整数,若将四舍五入后的值作为Ns,就会带来量化误差,最大可达1/2N,这是一个不容忽视的问题。以12MHz的89C52 T2定时器定时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,则分频系数为:

基于软件提高实时时钟准确度的算法

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。本文提出的基于软件提高时钟准确度的算法,具有极高的实用价值。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 微控制器
    +关注

    关注

    48

    文章

    6806

    浏览量

    147600
  • 定时器
    +关注

    关注

    23

    文章

    3146

    浏览量

    112028
  • 计时器
    +关注

    关注

    1

    文章

    395

    浏览量

    32153
收藏 人收藏

    评论

    相关推荐

    基于软件提高时钟准确度算法的应用及研究

    电子计时器通常以石英晶振为时钟源。时钟源的频率通常为几十kHz乃至几十MHz,而常用时钟的最小计时单位一般在0.01s~1s。高频的时钟源脉冲通过分频器后产生基本定时脉冲。电子计时器的
    的头像 发表于 03-26 15:16 5759次阅读
    基于<b class='flag-5'>软件</b><b class='flag-5'>提高</b><b class='flag-5'>时钟</b><b class='flag-5'>准确度</b><b class='flag-5'>算法</b>的应用及研究

    STM32 RTC实时时钟(一)

    STM32处理器内部集成了实时时钟控制器(RTC),因此在实现实时时钟功能时,无须外扩时钟芯片即可构建实时时钟系统。
    的头像 发表于 07-22 15:41 2842次阅读
    STM32 RTC<b class='flag-5'>实时时钟</b>(一)

    【自制】Arduino:oled0-96实时时钟显示(mini桌面时钟part12

    实时时钟Arduino
    新创司XLOT
    发布于 :2022年03月01日 16:24:34

    准确度、精密度和精确

    最终正确地评定测量结果时,通常要用到准确度、精密度和精确三个概念。它们的意义如下:1、准确度指测量值与真值的接近程度,反映系统误差的影响,系统误差小则准确度高。2、 精密度指测量值重
    发表于 02-08 09:21

    怎样提高酸度计的级别和仪器的准确度

    酸度计的级别是按其指示器(简称电计)的分度值(分辨率或最小显示值)表示的,例如:分度为0.1pH的仪器称为0.1级仪器;最小显示值为0.001pH的仪器称为0.001级仪器,等等。而仪器的准确度是电
    发表于 03-23 11:00

    基于LTC6802的电池管理系统准确度提升

    DN471 - 简单的校准电路最大限度地提高了锂离子电池管理系统中的准确度
    发表于 05-06 10:09

    如何提高秒表计数器准确度

    之间工作。问题是,当我把每一秒的读数打印到屏幕上时,我总是得到993个数的差值,而不是我预期的1000个数。有谁能提供一些关于如何提高秒表计数器准确度的建议?CyrPjJava.CaseVo1.0Zip668.2 K
    发表于 09-27 12:32

    什么是准确度/精确

    什么是准确度(真实)?什么是精确
    发表于 01-25 07:12

    实时时钟是什么

    定义:实时时钟的缩写是RTC(Real Time Clock).实时时钟是一个独立的定时器。RTC模块拥有一组连续计数的计数哭奋,在相应软件配置下,可提供时钟日历的功能。修改计数器的值
    发表于 08-09 06:18

    RTC实时时钟简介

    RTC实时时钟1. RTC实时时钟简介2. 硬件设计3. 软件设计3.1 STM32CubeMX设置3.2 MDK-ARM编程4. 下载验证
    发表于 08-18 06:55

    在ADC输入内阻不配情况下提高ADC准确度方法

    在ADC输入内阻不配情况下提高ADC准确度方法
    发表于 10-19 07:39

    ADAS3022怎样能提高ADC的测量准确度呢?

    在调试ADAS3022这颗ADC时每次测量会有30+mV的波动,信号源电压波动不到0.1mV,怎样能提高ADC的测量准确度呢?下图为不同次测量的值(信号源1.1V),感觉误差挺大:
    发表于 12-04 07:39

    实时时钟芯片应用

    。另外,实时时钟芯片一般内置闰年补偿系统,计时很准确。其采用备份电池供电,在系统断电时仍可以工作。实时时钟芯片的这些优点,使得其广泛应用于需要时间显示的场合。本章详细介绍了美国DALLAS公司推出
    发表于 03-16 15:31 14次下载
    <b class='flag-5'>实时时钟</b>芯片应用

    影响示波器测量准确度的因素,有哪些提高准确度的使用技巧

    其使用技巧就显得尤为重要。当然,提高测量准确度最有效的解决办法是增加ADC位数,美国力科公司(LeCroy)率先推出12位ADC示波器WaveRunner HRO 6Zi系列,使得示波器在测量准确度方面有了明显的改观。
    发表于 10-09 09:45 1837次阅读

    实时时钟的硬件结构_实时时钟故障怎么解决

     实时时钟的缩写是RTC(Real_Time Clock)。RTC 是集成电路,通常称为时钟芯片。
    的头像 发表于 11-16 17:10 6421次阅读
    <b class='flag-5'>实时时钟</b>的硬件结构_<b class='flag-5'>实时时钟</b>故障怎么解决