在嵌入式系统中快速实现高效的实时时钟/日历功能
投稿人:DigiKey 北美编辑
2018-09-20
许多嵌入式应用需要知道时间,以便在特定的时间和日期,或针对时间戳事件,或同时依据两者执行特定的任务。执行此功能的 RTCC(实时时钟和日历)芯片问世已有数十年,但设计人员在缩减元件数目和基底面,同时最大限度减少功耗和设计时间方面一直面临着挑战。
集成式 RTCC 器件和创新式模块如今可以应对这些挑战。
本文将讨论如何选择 RTCC 芯片,并快速应用于嵌入式系统的设计中,同时最大限度减小空间,降低功耗。文中还会讨论具有内置 RTCC 的 MCU,以及将可用的 RTCC 模块与表面贴装 RTC 及其他元件一同使用,协助原型开发。
整合到模块中的 RTCC 芯片通常由 Arduino 库和 Raspberry Pi Raspbian 驱动程序覆盖层提供支持,利用它们可以更轻松地使用上述器件开展嵌入式实验和原型开发。
RTCC 的角色
许多嵌入式应用需要以极低的功耗跟踪相对于真实世界的时间,同时减少在主处理器中所占用的空间,便与其处理其他任务。
然而,就其本身而言,RTCC 芯片能力有限。它需要一个用于计时的精确晶体(可能为可实现极精确计时的温度补偿型晶体),还需要备用电池电源,以便在嵌入式系统断电时仍能继续跟踪时间。这些辅助元件决定了 RTCC 执行其两项主要任务的能力:
- 在所有条件下持续记录精确的时间和日期
- 在嵌入式系统的其余部分断电后消耗极少的功率
部分微控制器采用 RTCC
一些微控制器,例如 Microchip Technology 的 32 位 PIC32MZ2064DAA288 微控制器,采用了内部 RTCC 块。将此类器件用于设计需要精确计时的系统似乎是个不错的主意,尤其是,PIC32MZ2064DAA288 微控制器在其用于为器件供电的正常电源引脚(VDDCORE 和 VDDIO)电压不足时,会自动将内部电源切换至其电池输入引脚 (VBAT)。
但是,这类与 RTCC 以上所列两项关键任务(即精确计时和低功耗运行)直接相关的器件,还存在一些其他挑战。
首先,PIC32MZ2064DAA288 微控制器的 RTCC 块需要在其两个次级振荡器引脚上连接一个 32768 赫兹 (Hz) 晶体,以便在微控制器断电时维持精确的时间。虽然可以使用微控制器的主时钟振荡器来运行 RTCC 块,但当微控制器处于深度睡眠模式时,该振荡器会停止运行。
片载 RTCC 采用了一个校准寄存器,Microchip 也提供了一个校准程序,可在晶体振荡器频率偏移最多 260 ppm 时将计时误差减小至每个月 0.66 秒。但固定校准无法计入温度波动,而这也会影响振荡器的频率,进而影响计时精度。
其次,除 RTCC 块之外,微控制器在切换至电池电源后并未完全断电。根据软件控制,微控制器中的其他块在电池运行期间可能启用也可能未启用。这样带来的挑战是,电池的消耗和寿命变得高度依赖软件。
这一挑战并非 PIC32MZ2064DAA288 微控制器所独有。任何采用 RTCC 块的微控制器都会出现此问题。使用单独的 RTCC 芯片可以克服该问题,将计时功能与微控制器明确隔离,而且,在微控制器不含内部 RTCC 时,这也是唯一的设计选择。
RTCC 芯片和模块
数十年来,设计工程师一直使用单独的 RTCC 芯片,在各种嵌入式和计算应用中计时。尽管现在有多家 IC 供应商提供此类芯片,但表面贴装技术 (SMT) 让 RTCC 芯片的评估变得非常复杂,因为这些器件无法轻松进行手动焊接或插入插座。
一种有效的解决方案是使用基于这些 RTCC 芯片的低成本模块,消除与小型表面贴装 IC 相关的原型开发挑战。这些模块还包含电池(通常为纽扣电池),以便在主系统断电时保持电力。
Adafruit 的 255 Chronodot(图 1)便是此类模块一个很好的例子。此类模块便于评估试验板和原型开发中的 RTCC 芯片,许多情况下甚至适用于评估批量制造中的 RTCC 芯片。
图 1:Adafruit 的 255 Chronodot 在一个通孔式模块中整合了 RTCC 芯片和电池。(图片来源:Adafruit)
表 1 列出了基于两家 IC 供应商的三款不同 RTCC 芯片的六个不同 RTCC 模块。
|
表 1:六个 RTCC 模块诠释了 RTCC 模块的广泛适用性和多样性。(数据来源:DigiKey)
利用类似表 1 所列的六款 RTCC 模块,可以轻松地在原型系统中增加计时功能。在开发整合了底层 RTCC 芯片的电路板时,如果仔细观察这些模块的设计方法,就能发现一些有用的信息。
表 1 中需要注意的第一点是,所有这些 RTCC 模块都有一个共同点,即 I2C 接口。上世纪 70 年代的早期 RTCC 芯片使用并行地址和数据总线来模拟小型 SRAM。在那个年代,并行微处理器总线非常普遍,而板载串行协议则尚未广泛应用。
如今,芯片到芯片串行协议,尤其是 I2C,已成为带宽要求相对较低的外设的首选。RTCC 芯片绝对符合条件,因为它只需要很少的字节便能传输日期和时间信息。
表 1 中显示的前两个 RTCC 模块,即 DFRobot 的 DFR0151 和 SparkFun 的 BOB-12708,均基于 Maxim Integrated 的 8 引脚器件 DS1307 RTCC 芯片。由于它的普及程度,人们针对基于此芯片的模块提供了各种 Arduino 库和一个 Raspberry Pi Raspbian 驱动程序覆盖层。
DS1307 RTCC 具有单独的电源轨和电池引脚,可在系统电源出现故障时,在嵌入式系统的电源轨与备用电池之间提供自动切换(图 2)。
图 2:Maxim Integrated 的 DS1307 RTCC 芯片在 VCC 引脚电压降至约 4.5 V 以下时,会自动从 VCC 切换至 VBAT。(图片来源:Maxim Integrated)
图 2 还显示了 DS1307 RTCC 芯片与晶体之间的连接。对于 RTCC 芯片,此晶体几乎总是便宜的 32768 Hz 钟表晶体,例如 IQD Frequency Products 的 WATCH-2X6。此晶体引入了使用 RTCC 芯片开展设计时需要考虑的两个新的方面。
第一个因素是晶体的温度稳定性。大多数 RTCC 使用最初为腕表而设计的“音叉”晶体。这些晶体会随着温度变化而偏离其额定频率(图 3)。
图 3:32768 Hz 晶体的共振频率随温度变化,这会影响 RTCC 的计时精度。(图片来源:IQD Frequency Products)
IQD WATCH-2X6 晶体的共振频率随温度变化,这会改变振荡器的频率,导致计时误差。请注意,振荡器频率发生 20 ppm 的偏移对应每月大约 1 分钟的计时误差。
第二个因素被图 2 中晶体与 RTCC 芯片之间过度简化的连接所隐藏。RTCC 芯片的晶体输入引脚通常具有极高的阻抗,导致钟表晶体的引线和 PC 板的印制线起到类似天线的作用。此“天线”可以将系统其余部分的高频信号和噪声耦合到 RTCC 的内部晶体振荡器。
任何通过钟表晶体与 RTCC 芯片之间的印制线耦合的噪声,都可能导致 RTCC 芯片的振荡器电路中出现额外转换,进而导致时钟运行加快。解决方案是采用细致的 PC 板布局。这包括将晶体置于尽可能接近 RTCC 芯片的振荡器引脚的位置,以及在晶体输入引脚和整个钟表晶体主体的下面放置一个接地平面(图 4)。
图 4:接地平面上细致的 PC 板布局可预防有害的噪声影响 RTCC 芯片的计时精度。(图片来源:Maxim Integrated)
此外,图 4 显示的 RTCC 封装下面用阴影线表示的禁布区,可以防止间距很近的印制线将噪声耦合到 RTCC 芯片的晶体输入引脚。如果可能,在 PC 板的元件层上增加一个环绕晶体和 RTCC 芯片晶体输入引脚的保护环,也有助于防止噪声对计时精度产生影响。
从 PC 板取下钟表晶体并插入芯片中
为了规避外部晶体面临的一些与 PC 板布局相关的挑战,可选择采用 STMicroelectronics 提供的带有内置晶体的 M41T62 RTCC。具有 24 引脚 DIP 基底面的 STMicroelectronics STEVAL-FET001V1 评估板上提供了此 RTCC 芯片。图 5 显示了此电路板的示意图。其中有一个 Arduino 库和一个 Raspberry Pi Raspbian 驱动程序覆盖层可供 M41T62 使用。
图 5:采用 24 引脚 DIP 封装的 STEVAL-FET001V1 评估板上提供了 STMicroelectronics M41T62 RTCC 芯片(中央)。(图片来源:STMicroelectronics)
如示意图所示,M41T62 只有一个 VCC 引脚。它没有在主电源轨出现故障时可选择切换的单独 VBAT 引脚,因为该器件的尺寸仅为 1.5 x 3.2 毫米,专门用于可穿戴设备和数码相机。在这些嵌入式应用中,电池往往是唯一的电源,而且空间非常宝贵。
请注意,也可以使用一个超级电容器作为 M41T62 的电源。在嵌入式系统中,系统电源或充电器可通过阻流二极管 D1,连接到 M41T62 的 VCC 引脚(图 6)。
该二极管必须是与以上图 5 中显示的 1N4148WS 相似的低漏电类型,以防止超级电容器在系统的其余部分断电时,通过系统电源反向放电。
图 6:可使用可充电超级电容器为 M41T62 RTCC 芯片供电。(图片来源:STMicroelectronics)
温度补偿可满足晶体要求
表 1 中所列的三种 RTCC 模块(Adafruit 3013、Adafruit 255 Chronodot 和 Maxim DS3231MPMB1#)均基于 Maxim 的 DS3231 RTCC 芯片(图 7)。除集成式晶体之外,该器件还包括一个温度传感器,这也是该器件拥有较长正式名称“超精准 I²C 集成式 RTC/TCXO/晶体”的原因所在。
图 7:DS3231 RTCC 芯片集成了 32768 Hz 钟表晶体、一个温度传感器和一个开关式电容器阵列,以便将器件的计时精度保持在每年 ±2 分钟以内。(图片来源:Maxim Integrated)
如方框图中所示,DS3231 的温度补偿型晶体振荡器 (TCXO) 由内部晶体、一个温度传感器和一个开关式电容器阵列构成。与 DS1307 RTCC 类似,DS3231 也有单独的主电源 (VCC) 和备用电池 (VBAT) 引脚。
与 STMicroelectronics M41T62 RTCC 芯片一样,DS3231 RTCC 芯片消除了外部晶体存在的布局挑战。它的 TCXO 减少了温度摆动造成的计时精度波动。DS3231 的内部 TCXO 能在极宽的工作温度范围(-40°C 至 +85°C),将器件的计时精度保持在每年正负 2 分钟以内。
由于它的普及程度,人们针对基于 DS3231 RTCC 芯片的模块还提供了多个 Arduino 库和一个 Raspberry Pi Raspbian 驱动程序覆盖层。
电池能持续使用多长时间?
电池需保养维护,无法永久续航。在将 RTCC 添加至嵌入式设计时,务必注意 RTCC 芯片所需的电池电流,以适当调整备用电池的大小。
RTCC 应用中的电池寿命将取决于 RTCC 芯片在计时时的漏极电流、RTCC 芯片所需的最低工作电压,以及电池在其输出电压降至低于该最小工作电压之前能够供应所需电流的时间量(图 2)。
|
表 2:RTCC 芯片的电池供电电流额定值有助于调整合适的备用电池大小。(数据来源:DigiKey)
之前表 1 中显示的 RTCC 模块均已选定备用电池。一些模块供应商在模块的规格书上包含了电池寿命数字,此数字同样显示在表 1 中。锂纽扣电池目前是这些模块首选的电池类型。表中所列器件的电池直径不外乎 10、12 和 16 毫米。当然,电池容量越大,增加的空间和重量往往也更多,但显而易见的好处是,给定电流下的电池寿命更长。
总结
在选择 RTTC 器件、选择配套的晶体和电池以确保精准操作,以及为 PC 板布局时,都应格外小心。另一方面,基于 RTCC 芯片的可用模块为试验板和原型开发提供了捷径,大幅缩短了开发时间。
免责声明:各个作者和/或论坛参与者在本网站发表的观点、看法和意见不代表 DigiKey 的观点、看法和意见,也不代表 DigiKey 官方政策。