Silicon温度补偿振荡器频率校准寄存器示例
具有温度补偿性能的晶体振荡器,是目前常用的晶振类型之一,这种振荡器凭借自身独有的数字补偿,直接补偿,间接补偿和综合补偿等功能,保持频率稳定性和周围温度的稳定.主要用于无线基站,GPS/北斗导航,定位,人造卫星,通信/电信,网络程控,超级计算机,井下作业等高级的产品领域.Silicon Labs是美国时序元件供应商,其量产的温补晶振精准性高,且产量大可满足市场的用量需求.
所有Silicon Labs C8051F5xxMCU器件的内部振荡器频率容差均为±0.5%,其额定值为振荡器的平均频率.在时序至关重要的某些应用中,需要具有更高精度的振荡器.本应用笔记介绍了一种提高内部振荡器精度的技术.这是通过将器件温度与振荡器的已知特性行为进行比较,计算温度的振荡器频率偏移,以及使用器件上的振荡器校准寄存器补偿该偏移来实现的.
更改振荡器校准位:
以下内部振荡器频率与温度的特性图表显示石英晶体振荡器的频率在-40°至125°C的工作温度范围内呈反向抛物线.
图1.正常振荡器行为(器件A)
在上面的等式中,f0是25°C时的内部振荡器频率,T0是25°C.温度系数TC1和TC2分别为5.0和-0.65ppm/℃.有关内部振荡器的更多信息,请参见表5.6C8051F50x数据手册的内部高频振荡器电气特性.使用图1中的信息作为指导,设备可以检测在给定温度下运行时是否应增加振荡器频率.通过调整OSCIFIN寄存器来增加振荡器频率.
OSCIFIN寄存器是内部贴片振荡器精细校准寄存器.在芯片的生产过程中,该寄存器被校准到适当的值以产生24MHz的标称频率.改变该寄存器的值将调整振荡器电路内的电容,从而影响振荡器的频率.将该寄存器中的值提高1会使振荡器的周期缩短约31ps.这意味着振荡器频率随着OSCIFIN的变化而线性增加.重要的是要注意,对该寄存器的更改不是永久性的.每当器件复位时,OSCIFIN寄存器的值将复位为出厂校准值.
通过检测器件的温度,软件可以导出必须设置OSCIFIN寄存器的值,以便正确温补晶振的抛物线频移.图2显示了实现此类补偿后内部振荡器速度与温度的关系图.
图2.理想设备上的算法行为(带有线性趋势线的设备A)
图2中的深蓝色数据点表示在整个工作温度范围内记录的频率.红线是线性趋势线,非常接近零斜率.深蓝色数据显示的行为中有明显的步骤,因为这些是示例代码算法改变OSCIFIN值的点,这会导致石英振荡器频率发生偏移.注意,通过在已知温度点对数据应用频率偏移,可以重新创建图1中的图2,反之亦然.温度点可以从本应用笔记中包含的示例代码中获得.
结果的可变性:
图2中所示结果的计算公差为24.06MHz±0.083%.示例代码非常成功,图1中可以更清楚地看到成功的原因.抛物线的顶点非常接近25°C.示例代码需要一个顶点恰好在25°C的振荡器,因为所有C8051F50x器件的顶点平均为25°C.顶点的实际值可以在任一方向上与25°C相差几度.接下来的两个数字来自最坏情况的角落设备,以夸大和证明在最坏情况下算法的行为.图3显示了当石英晶振的顶点温度低于25°C时会发生什么.这会导致温度低于25°C时的过补偿和温度高于25°C时的补偿太少.在图3中,该器件的容差约为24.09MHz±0.188%.
图3.低于25°C的顶点(转角装置B)
图4显示了如果内部温补晶振的顶点与温度特性之间的温度高于预期的25°C会发生什么.该算法过度补偿高于25°C且在25°C以下的补偿不足.这导致公差约为24.06MHz±这个特定设备的0.168%.
图4.高于25°C的顶点(转角装置C)
根据温度传感器读取的内容,使用该算法调整OSCIFIN寄存器,内部振荡器的平均频率公差最大值为±0.25%.该算法有可能将理想零件的公差降低到±0.1%以下,但零件之间的差异导致公差平均更高,最坏情况下的公差为±0.25%.对于未运行此算法的部件,这明显优于标准的±0.5%容差.
温度传感:
温补晶体振荡器算法需要使用器件的片上内部温度传感器.为了正确估算设备的温度,需要为软件提供温度的一点校准值.通过UART通信,示例软件可以用户输入当前环境温度.使用此输入和温度转换返回的当前值,软件可以计算并存储所有未来温度转换的偏移值.不正确的温度校准值将给出与第3页的“3.结果的可变性”中所述相同的结果.这是因为温度校准会影响算法用于处理OSCIFIN变化的温度.
温度灵敏度:
为了将第3节中讨论的公差转换为温度灵敏度,百分比值必须更改为ppm/°C的单位.以下步骤提供了如何在第一阶上将±0.25%转换为25ppm/°C的示例.
1.将百分比转换为十进制数.
0.25%=0.0025
2.确定最大温度差并除以该值.此应用的最大增量为25°C至125°C,因此delta值为100°C.
0.0025/100°C=.000025
3.乘以100万,以使价值达到百万分之几.
.000025x1000000=第一顺序为25ppm/°C
改进的考虑因素:
本应用笔记的示例代码未针对最低CPU利用率,内存效率或速度进行优化.可以通过多种方式改进代码,例如表征每个器件以找到其真正的顶点值,修改OSCIFIN的起始值以调整振荡器的平均频率,以及将温度移至Celsius转换以释放更多内存并降低CPU利用率.
如结果的可变性部分所示,该方法的结果与顶点近似的准确性直接相关.改善结果的一个好方法是在整个温度范围内表征每个器件的温补晶振;从结果中获得其真正的顶点值,并调整软件以期望测量的顶点值而不是标准的25°C.有两种不同的方法可用于表征器件的振荡器.
一种方法是让设备将其系统时钟输出到端口引脚.使用温度控制环境和示波器或频率计数器,可以在器件的整个温度范围内记录器件的频率.表征振荡器的第二种方法是通过信号发生器将已知的,精确的1kHz方波馈入器件.器件的PCA输入捕捉可用于检测此信号的上升沿.然后,软件计算上升沿之间的系统时钟,并使用1kHz方波的已知周期将计数转换为其频率.使用这些方法中的任何一种在温度扫描上记录进口温补晶振频率将给出该器件的顶点值的良好估计.
当振荡器容差至关重要时,最好注意器件的工作温度.返回参考图1和2,注意振荡器距其额定频率最远的点位于温度范围的最末端.如果设备不会暴露在这个完整的温度范围内,则可以显着限制公差范围.
只有OSCIFIN寄存器的低6位用于振荡器校准值.这意味着值0x3F(63d)是OSCIFIN寄存器可以设置的最高值.该算法被编程为在远离顶点值的最极端温度下将OSCIFIN增加多达九个单位.重要的是要考虑如果工厂校准的OSCIFIN值大于54d会发生什么.如果允许程序继续递增超过63d,则OSCIFIN寄存器将循环回零,振荡器将突然减速很多.如果程序在OSCIFIN寄存器中创建了最大值63d,则程序将不再在远离顶点的较高温度增量下正确补偿振荡器.
解决此问题的最佳方法是在允许温度补偿算法运行之前读取OSCIFIN寄存器.如果OSCIFIN寄存器大于54d,则应将其设置为54d.这仍然会产生如图2所示的波形,但结果将偏移到较低的值.新波形的容差与OSCIFIN寄存器的起始值未被修改且允许寄存器增加超过63d的容差相同,但由于偏移,振荡器的平均频率将略微变慢.这仍然是可以接受的,因为该算法将使振荡器的频率不会偏离所需频率太远.注意,也可以故意修改OSCIFIN的起始值以改变振荡器的平均频率.
在研究在其他应用中包含温度校准振荡器算法的方法时,可以提高该算法的CPU利用率和内存使用率.通过从温度传感器获取ADC读数并将这些ADC代码转换为摄氏温度值来实现温度感测.通过去除转换为摄氏温度值并仅使用原始ADC读数,算法的响应速度将得到改善,并且可以移除许多长整数变量以提高存储器效率.在没有温度转换的情况下进行温度检测的主要缺点是调试更加困难,因为温度ADC读数都不再是摄氏温度.同样重要的是要注意软件仍然需要一点温度校准值.最好的方法是在温度校准功能中仅进行一些温度到摄氏温度的转换.温度校准值也可以使用另一组软件导出,然后硬编码到TCXO振荡器算法中.