打印
[技术问答]

让单片机电子时钟走时更精确

[复制链接]
2670|56
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
belindagraham|  楼主 | 2024-9-27 18:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
单片机应用中,常常会遇到这种情况,在用单片机制作电子钟或要求根据时钟启控的控制系统时,会突然发现当初校准了的电子时钟的时间竟然变快或是变慢了。
于是,尝试用各种方法来调整它的走时精度,但是最终的效果还是不尽人意,只好每过一段时间手动调整一次。那么,是否可使时钟走时更精确些呢? 
误差原因分析
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所需的天数并进行二次调整,其精度会更高。

使用特权

评论回复
沙发
呐咯密密| | 2024-9-28 14:35 | 只看该作者
始终准就要求晶振要准

使用特权

评论回复
板凳
micoccd| | 2024-9-28 14:37 | 只看该作者
用温补晶振

使用特权

评论回复
地板
我想看大海| | 2024-9-28 15:04 | 只看该作者
时钟的来源要稳定

使用特权

评论回复
5
黑心单片机| | 2024-9-28 15:16 | 只看该作者
用质量更好的晶振

使用特权

评论回复
6
uptown| | 2024-10-7 13:58 | 只看该作者
采用高精度晶体振荡器(如TCXO或OCXO),这些振荡器的频率稳定性和温度稳定性比普通晶体振荡器要好得多。
使用温补晶振(TCXO)或恒温晶振(OCXO),它们可以自动补偿温度变化对振荡频率的影响。

使用特权

评论回复
7
uptown| | 2024-10-7 17:47 | 只看该作者
虽然普通晶振已经足够精确,但使用更高精度的晶振可以进一步减小频率误差。

使用特权

评论回复
8
primojones| | 2024-10-7 18:57 | 只看该作者
单片机电子时钟的计时脉冲基准是由外部晶振的频率提供的,因此外接晶振频率的精确度直接影响电子钟计时的准确性。
高精度的晶振可以显著提高电子钟的计时精度,但价格相对较高。因此,在设计时需要根据实际应用场景和成本预算进行权衡。

使用特权

评论回复
9
minzisc| | 2024-10-7 21:09 | 只看该作者
定期与外部精确时钟源同步,如GPS时钟、网络时间协议(NTP)服务器等,以校正本地时钟。

使用特权

评论回复
10
tifmill| | 2024-10-8 08:53 | 只看该作者
通过软件算法定期对时钟进行校准,例如使用网络时间协议(NTP)或其他外部时间源进行同步。

使用特权

评论回复
11
hearstnorman323| | 2024-10-8 13:09 | 只看该作者
尽量减少中断处理过程中的时间消耗,例如通过优化中断服务程序(ISR)的代码,减少不必要的操作。

使用特权

评论回复
12
pl202| | 2024-10-8 15:54 | 只看该作者
设计自适应的时间调整算法。这种算法根据时钟在一段时间内的走时情况,动态地调整时钟的计时速度。例如,如果连续几个小时观察到时钟走时偏快,那么算法可以逐渐降低时钟的计数频率;反之,如果时钟走时偏慢,则逐渐提高计数频率。算法可以根据历史走时数据建立一个简单的模型,以预测时钟未来的走时偏差,并提前进行调整。

使用特权

评论回复
13
qiufengsd| | 2024-10-8 22:18 | 只看该作者
单片机内部的定时/计数器在处理中断时会消耗一定的时间,而这部分时间并不计入计时,导致计时误差。

使用特权

评论回复
14
chenqianqian| | 2024-10-9 08:00 | 只看该作者
时钟走时误差和时钟源的稳定性关系很大。

使用特权

评论回复
15
mnynt121| | 2024-10-9 08:48 | 只看该作者
定期对电子时钟进行校准,以确保其走时精度。
可以使用高精度的时间标准源(如GPS时间服务器)进行校准。

使用特权

评论回复
16
lzbf| | 2024-10-9 12:34 | 只看该作者
通过软件算法对时钟进行校准。例如,可以记录时钟的误差,然后在软件中调整时钟的步进值,以补偿累积的误差。

使用特权

评论回复
17
mmbs| | 2024-10-9 14:16 | 只看该作者
单片机电子时钟的计时脉冲基准是由外部晶振的频率提供的,因此外接晶振频率的精确度直接影响电子钟计时的准确性。
高精度的晶振可以显著提高电子钟的计时精度,但价格相对较高。因此,在设计时需要根据实际应用场景和成本预算进行权衡。

使用特权

评论回复
18
ingramward| | 2024-10-9 16:37 | 只看该作者
良好的接地设计对于时钟电路的稳定性也非常重要。采用单点接地或多点接地的方式,确保时钟电路的接地路径最短且阻抗最低。避免不同电路之间的地电流相互干扰时钟电路,从而保证时钟信号的纯净性和准确性。

使用特权

评论回复
19
tifmill| | 2024-10-9 18:38 | 只看该作者
实时时钟(RTC)模块专为提供精确时间而设计,通常包含温度补偿和电池备份功能,可以在单片机断电时继续运行。

使用特权

评论回复
20
菜鸟的第一步| | 2024-10-10 14:32 | 只看该作者
时钟来源要精准

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

25

主题

1418

帖子

0

粉丝