如果你的 RTC 不够准确怎么办?
如果你的 RTC 随时间漂移太多,这里有一些你需要考虑的解决方案 - 但请记住并非所有变体
你选择了正确的时钟源吗?
许多 RTC 和控制器有多个时钟源 - 通常一个内部 RC 振荡器和一个外部晶体振荡器。RC 振荡器通常更不准确,因此你应该始终选择。你绝对应该仔细检查是否正确设置了时钟源 - 例如通过用示波器检查晶体是否振荡。注意这并非 100% 可靠,因为你的示波器探头以其额外电容加载晶体,可能显著改变频率 - 在某些情况下额外电容会导致晶体停止振荡。但实际上,大多数时候都有效,所以总是值得尝试 - 只是不要太认真对待测量的频率。
你选择了正确的负载电容吗?
在我们关于如何使用 Python 计算晶体负载电容器的文章中,我们展示了一种计算正确负载电容器值的简单方法。如有疑问,重新计算 - 通常人们会犯在数据表中查找负载电容并假设这是要连接到晶体的电容器值的错误。
此外,由于负载电容计算涉及对板电容的一些估计,一旦有了原型板,你应该调整正确的电容,即选择稍有不同的负载电容器值以获得所需的精度。有关进一步说明,请参见我们关于如何调整晶体振荡器以获得最佳频率精度的文章。
你能使用更好的晶体吗?
通常你可以多花几分钱获得具有更高精度和/或更低温度系数的晶体。注意拥有更精确的晶体是典型的
你能数字调整 RTC 吗?
许多现代 RTC 具有使用寄存器设置数字调整精确频率的功能。我们关于如何调整晶体振荡器以获得最佳频率精度的文章有一节包含有关如何处理此问题的更多信息。注意数字调整本身无法补偿导致晶体频率变化的温度变化。
你能使用微控制器自动补偿 RTC 漂移吗?
如果你的产品每年至少通电几次(即不是由 CR2032 或类似电池供电),你可以使用该时间段通过数字调整重新校准 RTC,或通过计算自上次通电事件以来的小时数并减去例如每小时几秒来手动调整 RTC 以补偿 RTC 漂移。如果你有任何方法将当前 RTC 频率与另一个时钟源(见下文)进行比较,此方法最准确。注意自动补偿只能在 MCU 运行、第二个时钟源运行且第二个时钟源
你能同步到第二个时钟源吗?
使用你的微控制器,你可以在固件中构建频率计数器来计算 RTC 晶体的实际频率。为此,你需要有更高精度的第二个时钟源。
这些是你可以用于你的板的最常见备用时钟源:
- 为你的微控制器计时的高速振荡器。如果功耗不是主要问题,我推荐使用振荡器而不是晶体,因为使用振荡器时你不必调整负载电容器,在许多实际用例中导致更高的有效精度 - 特别是如果你根本不想调整。
- 电网频率为 50 Hz 或 60 Hz,取决于你在世界何处。它具有出色的长期稳定性,但短期稳定性不太好。运行电网的人员持续补偿短期不稳定性,以便。注意如果你想使用电网作为时钟源,你必须注意适当的隔离和间距,因为电网可能极其危险。
- GPS 实现相当复杂,但如果你有 GPS 接收,它提供极其精确的时钟源。注意它通常在室内不工作,它是一种非常昂贵但非常精确的设备计时方式。由于它也相当耗电,通常不是电池供电产品的好选择。
- 在德国,DCF77 射频发射器每分钟发送一次时间信号。我建议尽可能购买现成的 DCF77 模块,如这个
- 一些微控制器(例如一些 STM32F0)一旦建立 USB 连接就可以使用计算机的 USB 作为时钟源。使用外部串口转 USB 转换器时这不工作
如果你不能使用这些时钟源中的任何一个,你可以做一些重要的开发来从以下源恢复时钟源:
- Ethernet
- USB
- CAN
- UART
- Some RF signal like Wifi, NFC
但据我所知,除了上面列出的之外,没有现成的模块。注意在许多情况下这些时钟源无法可靠工作,实现它将相当困难,所以我不建议走这条泪之路。
你能同步到互联网吗?
如果你的设备有互联网连接或连接到 Sigfox 或 LoRa 等网络,考虑你是否可以只与互联网同步时间,或者例如每天在 00:00 向你的设备发送消息以便它可以补偿漂移。你还可以通过数字校准或固件中的自动补偿持续调整 RTC 漂移。