我使用的是B-L072Z-LRWAN 1和CMWX1ZZABZ-091 LoRa /Sigfox™模块(Murata)
内部RTC (实时时钟)是不准确的,我看到10秒每天损失一些模块。
我的问题是,为什么会这样?数据表显示LSE为1.73秒/20 the。TXCO为2 2ppm。如何使用TXCO校准RTC?
我知道温度也会影响精度,但我认为这是在一个微不足道的范围内,也就是不能解释10秒的/day。
发布于 2018-07-25 16:34:44
如何使用TXCO校准RTC?
不久前,我问自己同样的问题,我花了一段时间才找到解决方案,因为参考手册中有很多选项,主题可能会很混乱。
在我的例子中,我需要在没有HSE谐振器的板上校准RTC (它是一个只有LSE晶体的小腕表原型(32.768 kHz),该板没有HSE,并且是从不稳定的RC内部振荡器时钟)。但是对我起作用的方法也应该适用于你的情况。
我的RTC校准方法的关键是:
就我的情况而言,校准步骤如下:
在开始校准之前,请确保撤消任何RTC校正:
if (HAL_RTCEx_SetSmoothCalib(
&hrtc,
RTC_SMOOTHCALIB_PERIOD_32SEC,
RTC_SMOOTHCALIB_PLUSPULSES_RESET,
0) != HAL_OK) {
error_handler();
}
start_calibration();为了计算更正,我使用了类似于以下内容的内容:
const float corr = calib_avg_ext_rtc / calib_avg_1pps;
log("correction:\r\n%f / %f =\r\n%.20f\r\n\r\n",
calib_avg_ext_rtc, calib_avg_1pps, corr);
const float c = corr - 1.0f;
if (corr > 1.0f) {
log("RTC crystal vibrates too fast!\r\n");
log("correction: %.20f ppm\r\n", -1.0e6f * c);
}
else if (corr < 1.0f) {
log("RTC crystal vibrates too slow!\r\n");
log("correction: %.20f ppm\r\n", 1.0e6f * c);
}
else {
log("your RTC crystal is running exactly at the right speed. - STRANGE!\r\n");
}
const int16_t calib32s = (int16_t)roundf(c * 32*32768);
if (calib32s != 0) {
log("correction value (ticks +/- 32 s interval):\r\n");
if (corr < 1.0f) {
log("MINUS %d\r\n", -calib32s); /* clock TOO SLOW, REMOVE cycles */
log("\r\nuse this on the target:\r\n");
log("HAL_RTCEx_SetSmoothCalib(&hrtc, RTC_SMOOTHCALIB_PERIOD_32SEC,\
RTC_SMOOTHCALIB_PLUSPULSES_RESET, %d);",
-calib32s);
}
else {
log("PLUS %d\r\n", calib32s); /* clock TOO FAST, ADD cycles */
log("\r\nuse this on the target:\r\n");
log("HAL_RTCEx_SetSmoothCalib(&hrtc, RTC_SMOOTHCALIB_PERIOD_32SEC,\
RTC_SMOOTHCALIB_PLUSPULSES_SET, 0x1FF - %d);",
calib32s);
}
}
else {
log("calibration complete! NO FURTHER CORRECTION REQUIRED\r\n");
}测量了所需的校正后,我已经复制粘贴的代码手动,并必须闪光的目标板,以验证校准。稍后,当设备已经部署时,有选择地进行校准会更好.
我已经在STM32L011上使用过这种方法,但是这种方法或多或少与单片机的类型无关。在我的例子中,我在MHz发现板上使用了8位HSE和一个32位计数器。但是,当出现快速、稳定的HSE时,这种方法也应该以修改的形式工作,而不需要额外的硬件(除了1 1PPS源)。-我设法得到小于1 PPM的偏差,RTC精确地保持了几天的时间(温度的变化会对精度有很大的影响,因为我必须知道)。
这些发现也在STM32论坛上进行了讨论,但是页面现在正在下降,所以我不能把你指向那.
https://stackoverflow.com/questions/51513166
复制相似问题