RTC精度偏差:
RTC的基准时间和精度与石英晶体的频率相关,晶体的谐振频率取决于温度,因此RTC性能与温度相关,晶体的频率偏差是晶体正常频率的温度反转函数。
一、硬件方面:
1.使用高精度振荡器的RTC模块;
2.使用自带温补的RTC芯片;
3.使用温度补偿晶体振荡器;
4.电路中的晶振负载电容值、阻抗控制、布局时考虑电磁干扰;
5.供电电池的状态;
以上几个方面可以减小硬件带来的精度偏差。
二、软件方面:
1.使用网络时间协议(NTP)服务器同步时间;
2.外部时钟源(如GPS)进行校准;
3.STM32内部RTC校准测量误差,开发校准算法:
STM32内部RTC精度不高,一般采用两种方法进行补偿;
(1)实测RTC的运行偏差,与标准时钟做对比,例如:每30天跑快的秒数偏差,计算ppm误差;
校准公式:
ppm误差=偏差s/基准值s*;
例如:每30天跑快的秒数偏差为1.7S,那么误差为1.7s/(30*24*60*60)*=0.65ppm。根据计算得到的误差值,查表(AN2604.pdf)得到校准值;
表格数据转换的计算公式:
假设校准值为1,每时钟周期扣除1个时钟脉冲(注:STM32使用一个周期计数器进行校正,这个数字校正器通过从个时钟周期减去0~127个周期的方法校正),(1/)*=0.954ppm ,由于校准值最大为127 ,因此最大可以减慢(0.954*127)=121ppm。
每30天快1s精度计算:
1s/(30*24*60*60)*=0.386ppm
假设每30天偏差为100,偏差=100*0.386/0.954=29.97≈30,校准值为30。由此将校准值传入库函数BKP_SetRTCCalibrationValue(校准值)中补偿。
(2)测量TamperPin频率值(需要使用高精度频率计),计算ppm误差:
局限性:
校准的精度依赖于主时钟精度(例如STM32使用8M晶振作为主频);RTC校准寄存器只能对跑快时间校准,那么跑慢的时间校准,就需要软件配置晶振值为其范围的最小值。
方法:
采用软件自动校准+用户手动校准的方法,使用定时器T2对TamperPin的频率值自动测量,例如晶振使用32.768KHz±2Hz,那么32766作为基准频率,TamperPin=32766hZ/64=511.968Hz,然后使用高精度频率计测量TamperPin频率值,若实测值TamperPin=511.982Hz,误差为(511.982-511.968)/511.968*=27.35ppm,查表(AN2604.pdf)得到校准值为28。
注意:STM32复位会对RTC偏差有影响;
4.RTC芯片配置校准:
(1)模拟微调寄存器ATR0~5,共6个模拟微调位调整片内负载电容值,用于RTC频率补偿;
(2)数字微调寄存器DTR0-2,共3个调整每秒钟的平均计数值和平均ppm误差;
采用ATR+DTR微调结合的方法,可调ppm范围更大,具体可参考使用的芯片规格书。