RTC补偿机制是否可行

现在在使用CH571,有几个疑问需要确认:

1. 内部RTC如何进行温度补偿?  我的想法是通过晶振温度取消累加到30秒,对R16_RTC_CNT_32K进行调整,太频繁我任务会影响计数,导致误差更大。 

2.如果上面的补偿可行,那么我利用1秒的周期中断,通过一个IO输出秒脉冲,29秒是未补偿的,第30秒是补偿后的秒脉冲,通过平均,是否可以反应我RTC的误差?  


通过中断输出的秒脉冲是否对精度有影响? 或者官方有更好的版本或者方案


关于温度,如果做晶振温度曲线补偿,那么芯片内部的温度传感器的精度是多少?资料说是10度?真的这么差吗?

 如果真的这么差,那是否采用贴片热敏电阻,通过AD测量,可以获取到较高精度?


谢谢


CH571/573的内部低频时钟校准, 本身是支持定时强制校准的,在BLE的历程里面,config.h 文件中有个宏BLE_CALIBRATION_PERIOD 即为强制定时校准的间隔,这个值的单位是ms,默认是2分钟.

这个宏最终是在HAL_Init 函数中调用,并且开启一个定时的任务,如果使能了内部的rc 将会定时强制校准内部时钟    Lib_Calibration_LSI(); (在EVT>EXAM>BLE>HAL>MCU.c 文件中调用),  芯片专门设计了通过一定周期的RTC的cnt变化,记录高频时钟的变化次数的计数器, 可以参考这个代码的实现, 来了解芯片内部的低频RC校准原理.


另外,ble在初始化时候,也传入了获取温度,和内部低频rc校准的函数,

默认在(在EVT>EXAM>BLE>HAL>MCU.c 的函数CH57X_BLEInit 中)


至于芯片内部的温度sensor的精度,

实际上,sensor测量的绝对误差很大程度上取决于生产校准. 专门设计用于准确测量的sensor是在生产时通过若干严格校准的点的值来修正测量结果,最终实现高准确度(accuracy)和高精密度(precision)的. 而这些往往直接影响到芯片的最终成本.

CH571/573 其内部温度sensor设计的目的,是满足内部模块受温度影响时校准使用的, 具备比较一致的线性度, 这也正符合绝大多的校准只关心温度变化量,而并不关心测量结果的绝对误差这一特点.



  1. 我采用的是外部32.768K的晶振,因为内部RC即使校准也达不到理想的精度要求。    在使用外部比如5PPM的晶振,那么在-40~80°的范围内,需要进行补偿。 

    我的要求是在整个温度范围内,24小时每度0.15秒以内的误差。  我会根据每秒种的温度进行误差累积(预先确定32.768晶振的温度曲线表格),并在一定时间后修正LSE。 

     所以,整个RTC运行和补偿没有HSE的参与。  

    但是补偿是否正确,需要有一个可以检测的秒脉冲,我的想法是通过补偿后的周期定时器,输出到IO进行验证。(外部有专门的时钟误差测试仪器)


2.如果芯片没有对温度进行出厂标定,那么温度线性符合即可,我可以在常温下对温度进行校准。如果温度校准后,温度测试的线性误差能够做到多少?±1°?


3. 温度传感器的的AD值和温度是否有转换关系的算法?   假设温度通道误差已经校准, 斜率是否有现成的?  我只需要校准单点温度。   因为实际中,校准常温误差是比较方便的。



只有登录才能回复,可以选择微信账号登录