摘要:通过对引起实时时钟计时误差因数的分析,给出了一种提高实时时钟长期计时准确度的实用而有效的软件方法。该方法具有成本低、易实现、通用性强、彻底校正等优点。
关键词:实时时钟 准确度 定时器 软件校正
电子计时器通常以石英晶振为时钟源。时钟源的频率通常为几十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
每次定时中断服务程序均执行(1)式,取得第I次定时计数值,然后实时时钟增加10ms,完成时钟功能。值得注意的是,Ni是实际的计数值,至于实际写入特定定时器的数值,则须根据具体定时器的递减、递加计时性质分别写入Ni或Ni的补码,同时定时器在溢出到新的定时值装入并开始新定时周期这段时间,将TLOAD考虑在内。例如89C52 T2工作于自动重装定时初值、递加定时方式时,实际写入定时器T2的捕获/自动重装载寄存器(Rcap 2H,Rcap2L)的值是Ni的补码,即65536-Ni;而对于89C52 T0和T1定时器则实际写入的定时初值是:Ni的补码+TLOAD对应的机器周期数。
3 测量晶振实际长期振荡频率
没有专用仪器,怎样测得晶振实际长期振荡频率?有一个很简单的方法。以标称频率下的定时计数值Ns作为实际计数值,在电台报时时将时间设置正确,然后让它运行一段较长的时间,再与电台的报时比较求出误差的秒数,即可算出实际频率。例如晶振标称频率是12Mz,时钟运行了10天,快了432s,则
fo=[(10×24×3600+432)/(10×24×3600)]×12
=1.0005×12
=12.0006MHz
若将上述算法编成程序,让用户直接输入N和NT的值;或输入运行了多少天、时、分、秒,快或慢了多少秒,让系统自动算出N和NT,将会为从根本上校准时钟带来极大方便。任何人都可以轻松地提高时钟准确度而无需专业知识和专用仪器。
现在微控制器已广泛应用于人们日常生活的各个方面,电子时钟也随着它融入到各种电器和设备中,如专门时钟功能的石英表和各种附带电子计时器的电器如手机、普通液晶显示电话、VCD机、DVD机、电视及高档音响、空调遥控器、电力系统微机自动化设备等。高档专用计时器如高档石英表,因为计时是它的主功能,须保证计时准确度而对计时时钟源准确度要求严格,每天误差在1s以下。以上提到的其它电器,其时钟只是的一个附带功能,出厂时一般不严格校正,甚至根本不做任何校正。所以误差通常在1秒/天以上,有些达10秒/天以上,每天都需校正,否则运行几天就会因误差太大而变得不可信,令用户不胜烦恼。
在电力系统中,无人值班变电部须安装无功自动控制设备。它根据一天中的不同时间段和电网无功情况自动投退电容器组,使得电网的功率因数尽可能接近于1,以利于经济运行。但有些设备仙部时钟每天误差>5分种。若将本文算法编入计时程序中,让用户自己校正定时参数,将大大提高各种附带时钟的计时准确度。
将基于软件提高实时时钟准确度的算法应用于普通石英晶振,利用89C52
T2定时器的软实时时钟,未作校正每天11s;进行软件计时校正后,每10天的计时误差<1s。本文提出的基于软件提高时钟准确度的算法,具有极高的实用价值。
上一篇:MC68EN360在以太网测试器中的应用
下一篇:网络特性虚拟分析仪
- 热门资源推荐
- 热门放大器推荐
- Allegro MicroSystems 在 2024 年德国慕尼黑电子展上推出先进的磁性和电感式位置感测解决方案
- 左手车钥匙,右手活体检测雷达,UWB上车势在必行!
- 狂飙十年,国产CIS挤上牌桌
- 神盾短刀电池+雷神EM-i超级电混,吉利新能源甩出了两张“王炸”
- 浅谈功能安全之故障(fault),错误(error),失效(failure)
- 智能汽车2.0周期,这几大核心产业链迎来重大机会!
- 美日研发新型电池,宁德时代面临挑战?中国新能源电池产业如何应对?
- Rambus推出业界首款HBM 4控制器IP:背后有哪些技术细节?
- 村田推出高精度汽车用6轴惯性传感器
- 福特获得预充电报警专利 有助于节约成本和应对紧急情况
- EEworld新春感恩回馈之ST新出道“高富帅”STM32F746G-DISCO 199元包邮
- 话说我接触的ADI实验室电路“评估板”
- 为“ADI实验室电路”寻建议!
- 阅1SP0350V SCALE-2单通道即插即用型门极驱动器,参与PI答题享好礼!
- 可靠QTouch技术集成邻键抑制(AKS)功能,适用任何触摸应用领域
- 有奖直播:升升不息,瑞萨MCU的固件升级方案
- 【团购】USB2.0学习板&BDM仿真器!
- phyBOARD-i.MX 8M Plus 开发板来袭 免费申请进行时!
- 新活动上线!ST NUCLEO-U575ZI-Q免费测评来了~
- ADI & 世健 带您了解 化学分析和分析仪器应用方案