本文原文地址:
https://blog.dan.drown.org/rtc-comparison/
实时时钟
我买了两个高精度RTC(实时时钟)模块,想比较一下。RTC对于超低功耗的时钟非常有用。他们可以用纽扣电池运行数年。这两个模块都很特别,因为它们声称比典型的RTC精度更高。
DS3231
第一个模块基于DS3231芯片(i2c总线上也有一个4KB的EEPROM)。数据表规格宣称,在0摄氏度到+40摄氏度能达到2ppm精度。
PCF2129
第二个模块基于更便宜的PCF2129芯片。它有一个2x3的母头模块,可直接插入Raspberry Pi或兼容板。数据表规格宣称在-15C到+60C之间为3ppm精度。
特性比较
它们都很相似,因为它们都有温度补偿和一个专用引脚上的可编程输出频率。它们都有频率调整设置。
DS3231可以以大约0.1ppm的步骤进行调整,而PCF2129可以以大约1ppm的步骤进行调整。
精度比较
这是对他们短期(1周)准确性的测量。在较长时间内,老化成为影响准确性的一个重要因素。
为了测量它们的精度,我让它们都输出每秒1个脉冲,并将间隔与每秒一个GPS脉冲进行比较。我用一个定制stm32f030+TCXO板。使用的stm32的输入捕获能够以40.8纳秒的精度测量每个间隔的长度。对64秒的数据进行简单线性回归,以比较RTC和GPS的PPS。频率差以百万分之一单位表示。
首先是DS3231。在这些数据开始测量之前,我将频率调整到尽可能接近0ppm。调整一次后,就可以自由运行了(freely run)。
本周RTC的表现为-0.038ppm+/-0.085ppm。这很不错。这大约是每年快出1秒。
接下来是PCF2129。我也调整了它尽可能接近0ppm。
在PCF2129的图形中,y轴比例要大得多。你可以看到,频率在几个小时内跳来跳去,而有时会更平稳。看看频率与温度的关系图就可以解释这里发生了什么。
这里你可以看到,当温度在69.5华氏度和75华氏度时,频率会跳跃。数据表提到了基于温度的负载电容器中的芯片开关。这样,即使在温度变化的情况下,它也能将内置晶体的频率保持在特定的范围内。
PCF2129本周表现为0.462ppm+/-0.239ppm。这也不错,大约每个月慢1秒。
附加信息
因为我的间隔计数器的通道数量有限,所以DS3231和PCF2129在不同的单元上。
DS3231内部TCXO频率如下所示:
PCF2129内部TCXO频率如下所示:
温度读数由bme280提供:
温度的波动来自加热器的开/关。
最后,用简单的线性拟合比较间隔计数器的频率与温度:
相关文章
皮特·史蒂芬森拆开了DS3231芯片,贴出了他的照片:
https://blog.heypte.com/2017/07/29/a-look-inside-the-ds3231-real-time-clock/,
还有一些长期数据:https://blog.heypete.com/2018/02/04/ds3231-drift-results-5-months/
Edward Mallon有一篇关于使用这些RTC的帖子:
https://edwardmallon.wordpress.com/2014/05/21/using-a-said-3-ds3231-rtc-at24c32-eeprom-from-ebay/
这些RTC的长期性能将受到老化的影响:TCXO老化第2部分