TCXO 温度补偿记录:TJ 20MHz(−40~85°C)
本文记录 TJ 20 MHz 晶体配同一颗 TCXO 补偿 IC 的补偿过程,要求从 −40°C 开始补。前后在机台上补偿、验证了 6 轮,又做了一次整夜静态重采,用来找剩余凹凸的来源。最终用第六轮:6 颗平均 全温峰峰 0.54 ppm,5~60°C 峰峰 0.36 ppm,最大误差 0.33 ppm(都相对 25°C)。
1. 概况
| 项目 | 内容 |
|---|---|
| 晶体 | TJ 20 MHz,7 颗(CH1~CH7),10/27 上料 |
| 有效样本 | CH1~CH6。CH7 多次寄存器写入失败,被隔离,不计入统计 |
| 采集温度点 | −40 / −25 / 5 / 25 / 60 / 75 / 85 °C(七点,量产也只用这 7 个点) |
| 验证 | −40→85°C 升温验证(2°C/min),每颗约 90 个点,频率误差取相对 25°C 的值 |
| 关键配置 | F0 = 20 MHz;EIOS = 0x04;25°C 逐颗调 EVRF 让 VREF ≈ 1.6 V;写完寄存器后在 25°C 用 EFOF 拉回 F0 |
| 默认寄存器 | EXOG 0x25、EV1G 0x22、EV4G 0x28(+8)、EV5G 0x29(+9)、ET0C 0x2E |
| 算法 | _calibrate_channel_extended;最小二乘带常数项(free_dc,直流由 25°C EFOF 回调吸收);7 个采集点 + 18 个虚拟点等权;ET0C 逐码试,每个 ET0C 下解最小二乘后在 ±2 码内穷举,按峰峰值选 |
和 38.4 MHz 比,20 MHz 的拉偏斜率大约大一倍(42~66 ppm/V,38.4M 约 30 ppm/V)。所以 1 mV 的 VC 误差就是 0.05 ppm,5 mV 就是 0.25 ppm,对 mV 级的精度要求更高。
2. 最终结果(第六轮)
第二轮(只用 7 点 + 旧模板)和第六轮(最终方案)对比,曲线都在 25°C 归零:

第六轮逐颗(run_id 20261029_151254_485969,单位 ppm):
| 通道 | 全温峰峰 | 5~60°C 峰峰 | 最大 |误差| |
|---|---|---|---|
| CH1 | 0.51 | 0.24 | 0.30(−8.1°C) |
| CH2 | 0.54 | 0.36 | 0.28(−38.4°C) |
| CH3 | 0.39 | 0.39 | 0.25(46.2°C) |
| CH4 | 0.85 | 0.50 | 0.48(−37.2°C) |
| CH5 | 0.54 | 0.34 | 0.34(−6.2°C) |
| CH6 | 0.41 | 0.32 | 0.33(−7.5°C) |
| 平均 | 0.54 | 0.36 | 0.33 |
CH4 是这一批的个例:它自己在 −37°C 有一个尖峰,又整体偏负。不算 CH4,全温平均 0.48 ppm。
第六轮寄存器:
| CH | EXOG | EV1G | EV4G | EV5G | ET0C |
|---|---|---|---|---|---|
| CH1 | 0x23 | 0x1F | 0x21 | 0x02 | 0x2B |
| CH2 | 0x24 | 0x26 | 0x21 | 0x02 | 0x2B |
| CH3 | 0x25 | 0x22 | 0x22 | 0x02 | 0x2B |
| CH4 | 0x29 | 0x1F | 0x24 | 0x03 | 0x27 |
| CH5 | 0x23 | 0x22 | 0x01 | 0x01 | 0x2D |
| CH6 | 0x23 | 0x21 | 0x00 | 0x01 | 0x2B |
(4G/5G 是带符号增益码:0x2x 为正、0x0x 为负,0x00 和 0x20 都是零。)
3. 各轮演进
| 轮次 | 改动 | 全温 | 5~60°C | 最大 |
|---|---|---|---|---|
| 第二轮 | 7 点 + KDS26M 中温模板 | 0.84 | 0.31 | 0.54 |
| 第三轮 | 码响应偏离进最小二乘 | 0.97 | 0.31 | 0.65(否决) |
| 第四轮 | 模板加 −37~−28°C 四个低温虚拟点 | 0.54 | 0.46 | 0.36 |
| 第五轮 | 模板 v2(只有 need)+ 搜索半径 2 | 0.58 | 0.42 | 0.40 |
| 第六轮 | 码响应表 v2(零码台阶)+ 模板 v3 | 0.54 | 0.36 | 0.33 |

- 第二轮:−35~−28°C 有 −0.6~−1.0 ppm 的坑。这一段夹在 −40 和 −25 两个采集点之间,七点拟合看不到。
- 第四轮:在模板里加 −37/−34/−31/−28°C 四个虚拟点的 need 修正(由前两轮验证统计),坑被填平。但中温 45°C 的鼓包变成了短板。
- 第六轮:同一颗芯片两轮验证相减,晶体和 need 抵消,只剩寄存器模型误差(配对法)。由此查出 4G/5G 只要离开零码,VC 就多一个随温度变的"台阶":25°C 约为 0,两端 −2~−7 mV。这和零码静态探测的结果独立对上。把台阶加进码响应表后,配对误差 3.6 → 2.2 mV,need 统计的离散减半。
另外离线核对过几种思路,都排除了:
- 全码空间按峰峰值挑码(约 29 万组):挑出来的码和第六轮完全相同,说明算法已经找到模型的全局最小。
- ET0C 按 0.1°C 细调:全温只从 0.54 降到 0.49,−10/45°C 的鼓包不是 ET0C 没对准。
- 寄存器连续可调(不取整):模型峰峰只从 0.41 降到 0.32,量化只占约 0.09 ppm。
4. 七温采集数据(第二轮,补偿用的这份)
run_id 20261028_004329_821908,实际温度和设定值相差不超过 0.2°C。
VCCAL (V)
| 温度 (°C) | CH1 | CH2 | CH3 | CH4 | CH5 | CH6 |
|---|---|---|---|---|---|---|
| −40 | 0.6410 | 0.6131 | 0.6419 | 0.6528 | 0.6457 | 0.6547 |
| −25 | 0.4321 | 0.4107 | 0.4325 | 0.4413 | 0.4348 | 0.4410 |
| 5 | 0.3351 | 0.3313 | 0.3339 | 0.3402 | 0.3338 | 0.3372 |
| 25 | 0.4125 | 0.4256 | 0.4200 | 0.4257 | 0.4164 | 0.4189 |
| 60 | 0.5496 | 0.5880 | 0.5709 | 0.5720 | 0.5632 | 0.5597 |
| 75 | 0.5102 | 0.5577 | 0.5318 | 0.5167 | 0.5255 | 0.5178 |
| 85 | 0.4193 | 0.4710 | 0.4405 | 0.4211 | 0.4363 | 0.4247 |
拉偏斜率 (ppm/V)
| 温度 (°C) | CH1 | CH2 | CH3 | CH4 | CH5 | CH6 |
|---|---|---|---|---|---|---|
| −40 | 56.4 | 59.4 | 48.8 | 48.9 | 59.3 | 44.9 |
| −25 | 53.9 | 49.6 | 56.9 | 48.9 | 43.3 | 56.9 |
| 5 | 53.2 | 47.2 | 47.2 | 65.9 | 54.2 | 53.4 |
| 25 | 53.7 | 47.4 | 56.4 | 47.2 | 48.3 | 47.6 |
| 60 | 50.7 | 52.1 | 51.8 | 52.4 | 49.6 | 51.9 |
| 75 | 47.8 | 46.1 | 52.8 | 51.8 | 49.1 | 51.8 |
| 85 | 48.6 | 52.9 | 53.2 | 42.1 | 48.3 | 54.1 |

右图黑线是模板 v3 的 need(真值 − 七点拟合),−10/45°C 各约 −5 mV。
5. 整夜静态重采:鼓包从哪里来
为了弄清 −10°C 和 45°C 的鼓包,整夜做了一次静态重采:
- 7 个采集点按同样流程重采一遍;
- 另加 −35、−30、−10、−5、15、35、45、50°C 八个额外点,每点用频率测 VCCAL(调 EFOF 找到 F0 时的 VC),同时读 IC 内部各分量。

采集点重复性:−25~85°C 两次差 ≤1.2 mV RMS;−40°C 系统性高 4.6 mV。−40°C 处 VCCAL 每度变化约 17 mV,4.6 mV 只相当于 0.27°C 的温度差。−40 这个采集点对温度极敏感。
晶体 VCCAL 7 点拟合在额外点上的误差(实测 − 7 点 5 阶拟合,6 颗平均,mV):
| −35 | −30 | −10 | −5 | 15 | 35 | 45 | 50 |
|---|---|---|---|---|---|---|---|
| +3.1 | +3.8 | −2.5 | −1.8 | +1.6 | −0.7 | −0.7 | +0.1 |
45°C 晶体本身只差 0.7 mV,解释不了约 +0.2 ppm(约 5 mV)的鼓包。
IC 分量在额外点上的误差(默认码下读 IC 内部 VC,实测 − 7 点拟合):

- 45°C:vc31、vc4310 比拟合高约 5 mV,vc5310 高约 8 mV。
- −10°C:vc5310 高约 13 mV。
- 6 颗非常一致(45°C vc31 +4.7~+6.9 mV),是 IC 自身的曲线形状。
结论:算法用 7 点拟合的分量预测"这组寄存器会给出多少 VC"。在 45°C,真实分量比拟合高约 5 mV,实际 VC 就偏高,出现正鼓包。鼓包来自 IC 分量在采集点之间插值不准,不是晶体,也不是升温时晶体和 IC 的温差。 理由有两条:
- 低温段静态读频率和升温验证对比,差 ≤0.06 ppm。
- 温差造成的误差方向应和 dVCCAL/dT 相反,而 −10°C 的实际方向和它对不上。
验证这个结论:把分量偏离放进模板的分量列(模板 v4),再用前六轮验证重新统计 need。45°C need 从 −5.6 mV 变成 −0.4 mV,−10°C 从 −4.5 变成 −2.3,和静态实测的晶体 need(−0.7 / −2.5)对上了。两套独立数据得到同一个结论。
离线预测 v4 是 0.52 / 0.32 / 0.31 ppm(v3 0.54 / 0.36 / 0.33),收益太小,没有再上机。
6. 小结
- 20 MHz 拉偏大,1 mV ≈ 0.05 ppm。7 点补偿到全温 0.5 ppm 左右,剩下的都是几个 mV 级的误差。
- 低温坑(−35~−28°C):用模板低温虚拟点的 need 修正压平了。
- 4G/5G 零码台阶:离开零码 VC 就多一个随温度变化的台阶。加进码响应表后,模型和 need 都更准,中温和最大误差是这一批最好的。
- 中温鼓包(−10/45°C):根源是 IC 分量在采集点之间偏离 7 点拟合(约 5 mV,6 颗一致)。用模板可以修,但现有寄存器分量的形状组合不出这么局部的凹凸,剩余约 0.3 ppm 是这套 IC + 7 点方案的极限。
- −40°C 采集点:0.3°C 的温度差就是 5 mV。要再提高,需要 −40°C 保温更充分或按实测温度修正。
- 虚拟点模板和码响应表要配套,每版都另存,换晶体时重新统计。
浙公网安备 33010602011771号