单片机应用中,常常会遇到这种情况,在用单片机制作电子钟或要求根据时钟启控的控制系统时,会突然发现当初校准了的电子时钟的时间竟然变快或是变慢了。
于是,尝试用各种方法来调整它的走时精度,但是最终的效果还是不尽人意,只好每过一段时间手动调整一次。那么,是否可使时钟走时更精确些呢?现探讨如下:
一、误差原因分析
1.单片机电子时钟的计时脉冲基准,是由外部晶振的频率经过12分频后提供的,采用内部的定时,计数器来实现计时功能。所以,外接晶振频率的精确度直接影响电子钟计时的准确性。
2.单片机电子时钟利用内部定时,计数器溢出产生中断(12MHz晶振一般为50ms)再乘以相应的倍率,来实现秒、分、时的转换。大家都知道,从定时,计数器产生中断请求到响应中断,需要3_8个机器周期。定时中断子程序中的数据人栈和重装定时,计数器的初值还需要占用数个机器周期。此外。从中断人口转到中断子程序也要占用一定的机器周期。例如:
从上述程序可以看出,从中断人口到定时/计数器初值的低8位装入需要占用2+2+2=6个机器周期。所以,在编程时一般会把这6个机器周期加入定时/计数器的初值中。但是,从定时,计数器溢出中断请求到执行中断需要几个机器周期(3~8个机器周期)。就很难确定准确值,正是这一原因导致了电子时钟计时的不准。
二、解决方法
1、采用高精度晶振方案
虽然采用高精度的晶振可以稍微提高电子钟计时的精确度,但是晶振并不是导致电子钟计时不准的主要因素,而且高精度的晶振价格较高,所以不必采用此方案。
2、动态同步修正方案
从程序人手,采用动态同步修正方法给定时,计数器赋初值。动态同步修正方法如下:由于定时,计数器溢出后,又会从O开始自动加数,故在给定时/计数器再次赋值前,先将定时,计数器低位(TLO)中的值和初始值相加,然后送人定时,计数器中,此时定时,计数器中的值即为动态同步修正后的准确值。具体程序如下:
采用此种方法后,相信制作的电子时钟的精度已有提高了。
3.自动调整方案
采用同步修正方案后,电子时钟的精度虽然提高了很多,但是由于晶振频率的偏差和一些其他未知因素的影响(同一块电路板、同样的程序换了一片单片机后,走时误差不一样,不知是何原因),时间长了仍然会有积累误差。为此,可采用自动调整方案。实际上是一种容错技术。其自动调整原理为:实测出误差Is所需的时间,然后每隔这样一段时间后就对秒进行加“1”或减“1”调整。例如:电子钟每过50小时就慢1秒,其自动调整程序如下:
以下是一个完整实例:
结语
使用此方法调整较费时间,但效果非常好。经实验,一次调整可/以将月误差控制在Is左右,如按此方法再次测出误差Is所需的天数并进行二次调整,其精度会更高。
关键字:调整单片机 时钟精度
编辑:探路者 引用地址:调整单片机时钟精度的解决方案
推荐阅读最新更新时间:2023-10-12 22:41
基于DS3231的高精度时钟接口设计
为避免 电路 系统在上电或断电后出现计时不准确的异常状况,提出采用高精度时钟芯片DS3231的解决方案。介绍DS3231的特点、工作原理以及引脚功能,设计其与微 控制 器进行通信时的软件、硬件 接口 ,并给出相应的原理图与流程图,此方案对DS3231在一般的 电路 系统设计中具有通用性。由于DS3231是目前精度最高,并集成有温补振荡器和晶体的实时时钟芯片,因此该方案对那些对计时精度要求极高的应用具有一定的借鉴意义。
关键词:DS3231;I2C 总线 ;实时时钟;接口;通信
随着科技的迅猛发展,一些相应的精密仪器也随之问世,这些仪器中通常都需要设置准确的时钟,以保证时段的正确切换。DS323l是Maxim/Dalla
[模拟电子]
一种基于PTP 协议的局域网高精度时钟同步方法
1 引言
在分布式系统中, 常常需要一个全局时间, 用来确定系统中各种事件发生的先后、协调各种消息的传输等,以控制和监视系统的状态。这就需要将系统中各个部件的局部时间统一,进行时钟同步。随着分布式仿真系统和试验系统在网络上的广泛应用,如何在网络上提供可靠的时钟服务成为一项重要课题。并且由于系统速度上的要求,同步的精度也成为一项重要指标。
PTP(PrecisiON Time Protocol)协议是IEEE-1588中定义的一种精密时钟同步协议,PTP 协议主要针对于相对本地化、网络化的系统, 子网较好, 内部组件相对稳定的环境设计的。由于PTP 协议实现简单,占用的网络和计算资源少等优点使其广泛应用于
[网络通信]
51单片机时钟精度误差的解决
前几天用STC89C52单片机制作了一个电子时钟,经过一段时间的实验,发现时间精度存在误差,一分钟慢4秒左右。 这可了不得,十分钟就要慢40秒,一天下来不得慢半96分钟!!! 这个单片机晶振频率为11.0592mhz,和大部分时钟的晶振频率相同,应该没有问题。 后天考虑到源代码: 在定时器中断函数里: void t0(void) interrupt 1 using 0 { tcount++; if(tcount==4000) {tcount=0; second++; if(second==60) {second=0; minute++; if(minut
[单片机]
51单片机驱动高精度时钟DS3231源代码
本程序一共有2个文件,成功的用stc89c51单片机驱动,完整的代码从 http://www.51hei.com/f/ds3231code.rar 处下载
下面是源码预览(第一个文件):
///////////////////////////////////////////////////////////////////////////////////
/*
DS3231.h文件
*/
////////////////////////////////////////////////////////////////////////////////////
#ifndef _ds3231_h_
#
[单片机]
高精度同步时钟信号在分布式录波器中的实现
随着智能电网技术大踏步地向前发展,电力部门对故障录波装置的分布式应用要求越来越高,对在分布式系统中的录波同步的要求也越来越严格,仅采用单一的GPS对时系统已不能完全满足电网运行的要求。因此,需要引入更多的启动逻辑作为系统同步录波的判据。
故障录波器 是电力系统发生故障及振荡时能自动记录故障前、后过程的各种电气量变化的一种装置。它可以记录因短路故障、系统振荡、频率崩溃、电压崩溃等大扰动引起的系统电流、电压及其导出量(如有功、无功以及系统频率)的全过程变化。主要用于检测继电保护与安全自动装置的动作行为,了解系统暂态过程中系统中各电参量的变化规律,以及校核电力系统计算程序及模型参数的正确性等。目前,故障录波装置的录波结果是分析电
[模拟电子]
基于DS3231的高精度时钟接口设计
随着科技的迅猛发展,一些相应的精密仪器也随之问世,这些仪器中通常都需要设置准确的时钟,以保证时段的正确切换。DS323l是Maxim/Dallas公司生产的一款低成本、超高精度的I2C实时时钟芯片,该器件不仅能够在一定温度范同内提供优于±2 min/a的计时精度,而且省去制造过程中晶体安装和布线校准工序。这里给出一种基于DS323l的高精度时钟接口设计方案。
1 硬件设计
1.1 DS3231器件
DS323l是低成本,高精度I2C实时时钟(RTC),具有集成的温补晶体振荡器(TCXO)和1个32.768 kHz的晶体。该晶体包含电池输入端,断开主电源仍可保持精确计时。集成晶体振荡器可提高器件的长期精确度,并减少生产的
[电源管理]
新型高精度时钟芯片RTL-4553
摘要:介绍EPSON公司最新推出的高精度时钟芯片RTC-4553的功能与特点。包括内部结构及引脚、功能控制和单字节的读程序。
关键词:单片机 时钟芯片 RTC-4553
现在流行的串行时钟芯片很多,如DS1302、DS1307、PCF8485等。这些芯片接口简单、价格低廉、使用方便,被广泛地采用,但这些芯片都存在时钟精度不高,易受环境影响,出现时钟混乱等缺点。本文介绍一种EPSON公司最新推出的RTC-4553时钟芯片。该芯片采用内置晶振和独特的数据方法,大大提高了时钟精度和可靠性。RTC-4553配有串行通信接口,另有30%26;#215;4bit SRAM,有2000~2099的百年日历,采用14脚SOP封装,电池耗电2
[单片机]
工作频率可动态调整的单片机系统设计
摘要:介绍一种采用可编程CMOS频率合成器DS1077设计的单片机系统,使单片机能根据环境需要动态调整系统的工作频率,既能满足系统求的实时处理能力,又尽可能地降低系统的耗电量及引起的电磁干扰。同时还讨论了系统改变工作频率后对RS232串行通讯的影响以及解决办法确保该系统在不的工作频率下仍能正常进行RS232串行通信。这种单片机系统的变频设计提高了系统的适用范围和兼容性,使系统设计更加灵活。
关键词:可编程CMOS频率合成器 串行通讯 动态编程 DS1077
在单片机系统中,总希望单片机能够工作于最大频率,以提高系统的实时处理能力。但单片机系统工作频率越高,其耗电量及引起的电磁干扰也就越大,并且单片机工作频率的选择直接影响到RS
[单片机]