您的位置:首页 > 新技术 >

单片机定时器中实时时钟的注意事项

2020-06-29 09:59:00 来源:电子说

实时时钟(RTC)是一种专用于保持一秒钟时基的计时器。此外,实时时钟通常用于跟踪软件或硬件中的时钟时间和日历日期。RTC的许多功能非常专业,是保持高精度和可靠运行所必需的。单片机外有实时通讯设备,可与I2C或SPI总线接口。

一、实时时钟概述

实时时钟的基本功能是产生一秒钟间隔并保持连续计数。如下图所示,时序图描述了实时通信的基本功能。

单片机定时器中的实时时钟(RTC)注意事项

它还显示程序功能a,该功能读取第二个计数器并安排事件b在接下来的三秒内发生。该操作称为警报。请注意,第二个计数器连续运行,不会停止和启动。RTC有两个主要要求,即准确性和连续操作。下图显示了RTC的常见硬件功能:

单片机定时器中的实时时钟(RTC)注意事项

RTC通常有自己的内部振荡器和外部晶振,并且可以选择使用外部频率基准。所有时钟源运行在32768赫兹。外部时钟源允许使用非常精确和稳定的器件,如TCXO(温度补偿晶体振荡器)。

多路复用器用于选择时钟源,并将其输入预分频器,预分频器将时钟分为32768(215),以产生一秒钟的时钟。

基本上,RTC有第二个计数器,通常为32位或更多。一些RTC有专门的计数器来跟踪一天中的时间和日历日期。

没有时间和日期计数器的基本RTCs为此目的使用软件。常见的选择是从输出引脚输出1Hz方波。RTC将有几个可能的事件来产生处理器中断。

RTC通常有一个专用的电源引脚,以便在微控制器的其余部分断电时工作。该电源引脚通常连接到电池或单独的电源。

二是RTC精度和频率补偿

实时时钟的精度取决于32,768,768赫兹的时钟源。在设计良好的晶体振荡器中,误差的主要来源是晶体。外部TCXO可用于高精度定时,或者特殊频率补偿技术可用于更便宜的晶体和内部振荡器。晶体误差的三个主要来源:

1.初始电路和晶体容差。

2.晶体随温度漂移。

3.晶体老化。

下图显示了与RTC精度相关的一些概念:

单片机定时器中的实时时钟(RTC)注意事项

图上的深蓝色轨迹显示了典型的初始公差及其随温度的变化。粉色轨迹仅显示温度误差。温度补偿的关键是晶体的行为是众所周知的,可以用二次方程来预测。如果初始误差是在电路板制造后测量的,并且温度已知,那么最大的误差源可以得到补偿。

经过仔细的补偿,黄色区域是一个合理的精度目标。记住,1 ppm一年大约需要30秒。晶体老化很难弥补。幸运的是,老化通常每年只有百万分之几。

第三,如何改变即时通讯时间

目前,作为系统的一部分,有两种方法来改变RTC的定时以补偿误差。如前所述,在第二计数器的每个周期中,可以获得预分频器计数的振荡器周期数。

前两秒是通常的32768次循环。该软件使用温度读数和初始误差来确定振荡器运行速度,32768个周期实际上是0.99990秒。为了补偿这个小误差,软件告诉RTC每四秒钟将预分频器的模数改为32781,以增加时间。下图显示了预分频器计数的振荡器周期:

单片机定时器中的实时时钟(RTC)注意事项

这种技术的优点是从第二秒到第二秒的时间间隔变化很小。然而,这种技术需要一个可调预分频器和其他寄存器,以节省特殊预分频器计数和特殊计数应用之间的时间。

如果实时时钟没有一个特殊的预分频器来调整时序呢?下图显示了另一种没有预分频器的方法:

单片机定时器中的实时时钟(RTC)注意事项

在这种情况下,盒子里的数字是第二个计数器。显示的计数是100251,然后是100252。该软件一直在连续计算调整和跟踪RTC秒数。当误差累积到精确的一秒钟时,软件将增加或减少一秒钟来调整累积的误差。

这种技术的缺点是调整时从秒到秒有很大的变化。这项技术的优点是与任何实时通信兼容。

第四,实时时钟的安全性

安全性是一个有趣的要求。在某些应用程序中,时间用于向使用服务或消耗资源的客户收费。有广泛的实践系统来防止或检测RTC黑客攻击。技术范围从外壳的入侵检测到单片机的特殊功能。

如果单片机上的实时时钟有特殊的寄存器,它可以允许软件永久锁定密钥寄存器。一旦被锁定,它们就不能被改变,它们可以被防止被黑客攻击或失去控制。应该注意的是,改变时间需要完全重置微控制器。

五.时间和日期

一些RTC有硬件计数器,可以维护一天的时间和日历日期。这需要分钟、小时、天、月和年的计数器,并考虑运行年。时间和日历日期也可以通过软件保存。

一个突出的例子是时间文件中的C标准库中的函数。对于微控制器,系统可以基于实时控制的第二计数器。必须编写四个小的自定义函数来完全支持time.h库。

这里感兴趣的函数是由库中的time()函数调用的,它以秒为单位返回从被称为“纪元”的起始点开始的时间,通常是1970年1月1日。通常,要读取的自定义函数的硬件计时器被称为get_time()或类似的变量。get_time()完成的所有操作都将读取第二个计数器并返回值。库将完成剩下的工作,将这个时间转换成当前日期和以秒为单位的日期。

以上是单片机开发工程师共享的单片机定时器中的实时时钟。

栏目导读

无人车“入春”,批量上路仍需“爬坡”

  防控疫情的需求激发之下,代替人类送药、送餐送菜、消毒巡逻的无人车成了疫情期间的特殊尖兵。疫情过后,无人车配送是否...

2020-03-23 17:12

5G、AI、大数据的发展,对智慧城市会有什么影响

市场分调研机构Omdia的最新数据分析显示,全球智能城市人工智能(AI)软件市场将从6 738亿美元(2019年),在2025年将增长到4...

2020-04-07 17:55

机器人制造过程中的传感器技术之磁光效应传感器

现代电测技术日趋成熟,由于具有精度高、便于微机相连实现自动实时处理等优点,已经广泛应用在电气量和非电气量的测量中。

2020-04-07 17:56

微软不需要快速拥抱VR

微软经常在游戏领域开辟路径,扮演开拓者的角色,这一点体现在很多方面,包括微软的尖端技术(DX12终极版 DX光追),硬件(X...

2020-04-07 17:57

波音Starliner载人航天器再次展开测试

去年 12 月,波音为美国宇航局发射了未载人的 Starliner 航天器。然而由于技术问题,任务并没有按计划进行。作为 NASA ...

2020-04-07 17:58