RTC-温度补偿
温度补偿需求产生的原因
在不同温度下晶振输出时钟产生偏差,作为RTC就是要靠这个晶振来计数去计时,晶振输出的周期数量不够或者过多都会导致时间产生偏差。
我们可以计算得到晶振偏差带来的时间偏差,使用32.768kHZ 时钟来计数,芯片极端温度120度情况下是300PPM,这样每天的秒数是sec = 24x60x60=86400 ,每天偏差的时间就是sec *300PPM = 86400x300/1000000=25.92 这样可以看出来每天偏差几乎是半分钟了。
温度补偿方法分类
温度补偿一般可以使用的方法分为两类:
- 内部温度传感器的方法
使用内部集成的温度传感器测量芯片温度,在RTC计数时增加或者减少计数器进位的统计门限,例如每秒的计数器就不是32768而是增加了300PPM的32778。这样时间增长的速度就会和常温下一致了。
问题来了
芯片温度就一定等于晶振温度么?肯定是不等于的,芯片和晶振是分离的,芯片上运行的程序的负荷大小都会影响芯片温度,晶振一般不会受影响,通过芯片温度估计晶振温度看来也是不可行了,所以这种方法也就是简单场景下的无奈之举。 - 外部温度传感器的方法
内部的不行就用外部的吧,直接把温度传感器贴到晶振上,这种方法会好一些,但是还是会有温度传感器自身
的不一致性性和分压电阻的精度问题会影响温度测量的准确性,进而影响到时间的精度。
温度补偿的操作方法
获取全温度范围的频偏曲线
一般测量晶振我们都是通过高低温箱这样的设备提供环境,测量一些温度环境下的频率偏差,但是这些设备也不是能够给与所有温度环境的,一般最低也就零下三十度,最高零上90度,再高也就不准或维持不住。
我们获取的数据一般是这样的
描点图
为了获得整个温度下的值我们需要借助工具进行数据拟合
简单看下应该是三次的多项式就够了,拟合后的曲线
这样我们就获取了所有温度下的一个公式,进而能得到所有温度下的频偏。