在单片机的应用中,经常会遇到这种情况〜当使用单片机制作电子时钟或需要时钟开始控制的控制系统时,您会突然发现电子时钟的时间刚开始校准的速度变得更快或更慢。
因此,我尝试了各种方法来调整其旅行时间的准确性,但最终效果仍然不能令人满意,因此我不得不每次都手动对其进行调整。
那么,我们可以使时钟更精确吗?讨论如下:误差分析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秒。
自动调整过程如下:以下是一个完整的示例: