外置 RTC 秒级跳变:双时钟融合,把 1 秒相位差摊进 60 秒

概述

是一个中途接手的救火项目。设备包含一个计时器组件,可显示计时的小时、分钟、秒。MCU 使用内部晶振,通过 I²C 连接外部 TCXO RTC;MCU 内部定时器提供毫秒级计时,外部 RTC 负责长期时间基准,并通过中断信号通知 MCU 秒级时间边界。虽然 RTC 本身还提供高精度时钟输出,但硬件设计并未将其接入 MCU。

这种双时钟架构带来了一个问题:片内定时器响应快、分辨率高,但长期会漂移;外置 3PPM RTC 长期稳定,但通过 I²C 只能获取秒级时间边界。开始计时的时机又完全随机,例如整秒后的 0.9 秒开始计时,RTC 再过 0.1 秒就跳秒,导致计时刚开始就显示 1 秒,暂停后继续时也会出现同样的跳变。

硬件已经定型投产,无法改板,因此只能通过软件协调两套时钟,在不改变硬件的情况下兼顾长时精度与计时显示的连续性。

RTC 秒级跳变示意图

解决

  1. 痛点:外部 RTC 负责长期精度,但秒级时间边界与随机开始计时的时刻无法对齐;内部定时器则无法独立承担长时计时。
  2. 解法:开始计时记录当前相位,测量到下一次 RTC 秒中断边界的时间差(0~1 秒),不立即修正,而是将相位差在后续 60 秒内渐进消化,避免显示跳变。暂停后继续时重新建立相位基准。
  3. 结果:保留片内定时器的毫秒级响应,同时以 3PPM 外部RTC 作为长期时间基准,消除开始、暂停、继续过程中的秒级跳变;在硬件冻结的情况下,仅通过软件解决两个时钟时间尺度不一致的问题。
  4. 根治:直接使用外部 TCXO 时间源为 MCU 提供高精度时间基准,使计时与 RTC 共用同一时钟源,从硬件层面消除两套时钟之间的相对漂移。