I've been letting these boards run to see what happens. My TCXO's aging spec is 1ppm/year, which is about 0.083ppm/month (it's not a linear thing, but this is a decent estimation). I set the calibration on June 7th (5 days less than a month ago), and it's changed in frequency by about 0.060ppm since then. Since this is a 12MHz TCXO, 0.060ppm is a 0.72Hz change.
First graph is the TCXO's raw frequency vs the temperature compensated frequency. You can see the compensated frequency is much less noisy and much closer to 0ppm.
Zooming in to just the temperature compensated frequency:
99.9% of all these samples were between -0.030ppm and -0.072ppm, a 0.042ppm range. This range is my clock's uncertainty. The situation is slightly better than that, as 24 hour periods have a smaller range. Also, the aging is around 0.015ppm/week (1ppm/year is roughly 0.019ppm/week). For more info on aging, see this follow-up post.
These boards also have a LSE (32KHz crystal for the RTC), but it's just a regular crystal. I'm using the timer TIM14 to compare the LSE frequency to the TCXO.
Some notes about measuring the LSE:
- To lower the interrupt rate, I used the MCO peripheral to get the frequency LSE/128, and then TIM14's input capture divides that by /8 to get a final interrupt rate of 32Hz.
- TIM14 is a 16 bit timer, and TIM2 is a 32 bit timer. I used both to measure the exact difference in length of 1 second between the LSE and TCXO.
- The RTC's frequency adjustment is in steps of 0.954ppm units. So I used dithering to average out the error. I set a new RTC adjustment every 30 seconds
- I configured the RTC to have 1/1024 second units (slightly better than 1 millisecond)
- This only works while under normal power. On coin cell power, the RTC continues with the last settings made. The TCXO is off while the coin cell is used, as it needs too much power.
The green is the difference in frequency between the LSE and HSE. I compared against the temperature compensated frequency from the HSE. The purple is the RTC frequency adjustment value used.
The RTC clock was set to a 0 second offset at the start and left to run only on frequency control. The offset of the RTC clock was compared to the GPS module's PPS. The blocky nature of the purple line comes from the 1/1024 second unit limitation. I've included three frequency error lines to show the ranges of frequency error.
Temperature change between every 64 second reporting period.
Coin cell battery verses temperature (adjusted for changes in supply voltage).