三种”顶满轨”的现场取证:CH2 和 CH6 都报 4095,一个重压端子就好,另一个是上拉接到了 5V

2026年10月24日 0 By admin

上一篇《多路巡检的前置 RC 与串扰辨伪实战》文末留的预告是:探头断线、地电位差、共模超范围,三种”顶满轨”怎么分、怎么取证。这篇一并答完。同时要更正上一篇里的一个数——那个数错得挺关键,先认了再说。

结论先摆出来,五条:

  • 单端分压链上,”顶轨”的充要条件是下臂断开。 加进地电位差也一样:要把节点抬到 VREF,需要 ΔVg = VREF,恒等于 3.3V,与温度无关。上一篇写的”−40℃ 只需 80mV”是错的:80mV 是那一温度下到上轨的余量,不是把它吃掉所需的偏移量。两者差 41 倍,方向也反了。
  • 地电位差真正的战场在热端,不在冷端。 125℃ 时只要 −0.118V 就把读数打到 0(看起来像探头短路);而 +0.3V 的偏移让 125℃ 读成 77.1℃。冷端要 −132.6V 才打得到底,物理上做不到。
  • 开路读数不是恒定 4095。 74HC4051 的关断漏电手册上限就是 ±1µA,10k 上拉上压掉 10mV,读数变成 4083;采样点若还在切换后 1ms,开路只读到 2740——看起来是个 10℃ 的正常探头。
  • “并一支 10k”有判决式:开路时读数恒等于 4095·P/(P+Rp),与温度无关。但同时要记住它有两个死角:冷端分辨力天花板只有 99 LSB,对着”上拉错轨”也几乎无分辨力(2068 vs 2048,差 20 LSB)。
  • 真正危险的不是全断,是半断。 接触电阻 1kΩ 让 125℃ 读成 77.9℃,而且它不顶轨,任何”顶轨判据”都抓不到它。

工具照例全离线:drafts/_tools/rail_sat_forensics_calc.py,16 个模式、44 项自检断言,文中每个数都能复算。口径与《NTC 采样链路故障》、《BMS 温度门限参数表》、《8 路 NTC 巡检的时序预算》严格一致:B3950 / R25=10k / NTC 在下 / 10k 上拉 3.3V / 12bit 满量程 4095 / 1 LSB=0.806mV;前端 R_s=1k、C_node=80pF、C_f=220nF(τ=(Rp+R_s)(C_node+C_f)=2.421ms);MUX 按 74HC4051(R_on=120Ω、关断漏电 ±1µA)。


一、现场:两个 4095,修法完全不同

去年十二月,同一台 16S 200Ah 离网柜。8 路 NTC,报上来两路顶轨:

通道 位置 读数 现场动作
CH2 电芯(第 3 串) 4095(恒定) 换过 2 个探头,无效
CH6 电芯(第 14 串) 4095(间歇跳变) 换过 2 个探头,好两天又犯

同一张截图里,其余六路读数都在 3~9℃ 之间,正常。

运维的结论是”这两路的探头都坏了,而且是同一批次的探头有质量问题”。这个结论不对,但也不能怪他们——只看 raw,4095 确实只有一个长相。

分开查的结果:

  • CH6 是端子压接不良。冷压端子只压到了绝缘皮,铜丝一根没进。去年冬天就有苗头:日志里这一路在 2049 和 4095 之间来回跳,跳了几十次又”自己好了”——那是拆装线束时把它碰通了。今年彻底开路。
  • CH2 是上拉接到了 5V。这批板子改版时把 10k 上拉的供电从 3.3V 挪到了辅助 5V 轨(为了”提高抗扰”),BOM 上没体现。于是这一路的曲线被整体压缩:25℃ 时读数只有 3102,按 3.3V 基准解出来是 1.4℃。夏天有人发现 CH2 恒定比邻路低 23 度,在固件里给它加了个 −23℃ 的偏置“修好”了。
  • 到冬天,5V×k 在 k>0.66(也就是 10.8℃ 以下)时超过 3.3V 基准,整段削顶,读数恒 4095。而那个 −23℃ 偏置此时把 4095 解成 −60℃,直接被123 篇的断线判据判成”探头断线”。

修法:CH6 重新压端子(30 秒);CH2 把上拉改回 3.3V、删掉那个 −23℃ 偏置(10 分钟,含改固件参数)。

这两个案例把本篇的题目说全了:同一个 4095,一个是源阻抗无穷大,一个是量程到头。前者要找线,后者要找电源轨。


二、先把数学写死:分压链只有三个数

NTC 在下、10k 上拉到 Vpull、下端的地与板地之间有 ΔVg:

V_out = ΔVg + (Vpull − ΔVg)·R/(R+Rp)
      = k·Vpull + (1−k)·ΔVg          其中 k = R/(R+Rp)
raw   = 4095·V_out/VREF               VREF 是 ADC 基准

反解(已知 raw 求等效下臂电阻):

k = (raw/4095)·VREF/Vpull
R_eff = k/(1−k)·Rp

链路的标称曲线:

T(℃) R_ntc(Ω) k V_out(V) raw
−40 401,860 0.9757 3.2199 3996
−20 105,385 0.9133 3.0140 3740
0 33,621 0.7708 2.5435 3156
25 10,000 0.5000 1.6500 2048
60 2,486 0.1991 0.6571 815
85 1,087 0.0980 0.3235 401
125 359 0.0346 0.1143 142

注意最后一列:整条曲线从 142 到 3996,两头都够不着轨。0 和 4095 这两根轨,只有非 NTC 的东西才能到达。


三、顶轨的充要条件(更正上一篇)

令 V_out = VREF:

k·VREF + (1−k)·ΔVg = VREF
      (1−k)·ΔVg = VREF·(1−k)
             ΔVg = VREF

k 被约掉了。 也就是说:在单端分压拓扑里,地电位差要顶到上轨,永远需要 3.3V,跟温度一点关系都没有。

上一篇我给的那张表——”−40℃ 0.080V / −20℃ 0.286 / 0℃ 0.757 / 25℃ 1.650 / 125℃ 3.186″——那是 VREF − V_out,是到上轨还剩多少余量,不是”需要多大的偏移才能顶上去”。两者差一个 (1−k) 的倒数。−40℃ 时 (1−k)=0.0243,差 41 倍。

正确的一张表(单位 V):

T(℃) k 增益 1−k 顶轨所需 ΔVg 底轨所需 ΔVg
−40 0.9757 0.0243 3.300 −132.614
−20 0.9133 0.0867 3.300 −34.777
0 0.7708 0.2292 3.300 −11.095
25 0.5000 0.5000 3.300 −3.300
60 0.1991 0.8009 3.300 −0.820
85 0.0980 0.9020 3.300 −0.359
125 0.0346 0.9654 3.300 −0.118

这张表读出来的东西比上一篇那张狠得多:

  • 顶轨那一列是常数,所以”地电位差把读数顶到 4095″在单端拓扑里基本不可能发生。现场真出现了 4095,先查线、查上拉、查基准,不要查地。
  • 底轨那一列从 −132V 掉到 −0.118V,跨了三个数量级。热端只要 −118mV 的地电位差,读数就归零;而 −118mV 在同一台柜子上太容易有了(大电流回路共地、屏蔽层两端接地、机柜接地排与采样板地之间有电流走过)。

换句话说:共模/地电位差在单端分压链上是”热端打底轨”的病,不是”冷端顶轨”的病。 方向跟上一篇写反了。

偏移 0.3V 与 −0.1V 的实际后果(表观温度):

真实 T(℃) +0.3V 表观 误差 −0.1V 表观 误差
−20 −21.7 −1.7 −19.5 +0.5
0 −2.3 −2.3 0.7 +0.7
25 20.9 −4.1 26.4 +1.4
45 37.9 −7.1 47.7 +2.7
60 48.9 −11.1 64.6 +4.6
85 63.5 −21.5 97.0 +12.0
125 77.1 −47.9 218.9 +93.9

0.3V 的偏移,在 −20℃ 只造成 1.7K 误差,在 125℃ 造成 47.9K。同一个硬件缺陷,冬天看不出来,夏天把高温降额门整个废掉——而且方向是”读低”,降额不会动作,电芯会实实在在地热着。


四、三种顶轨的完整分类学

现场说”顶满轨”,实际有七种成因。按”能不能从 raw 上直接分出来”排列:

成因 机理 raw 形态 能否只靠 raw 判 一步验证
真开路 下臂 ∞(探头断/线断/端子未压接) 4095 死平,或 4083~4095 能(贴轨) 量上拉供电端 3.3V、节点 3.3V
半断 串联接触电阻(压接不良/氧化) 不顶轨,整体偏低,热端塌陷 不能 拔下量 NTC 阻值
上拉错轨 上拉接 5V/12V,基准还是 3.3V 冷端 4095,热端曲线压缩 不能(同形) 量上拉供电端
基准错配 ADC 基准低于上拉电压(内部 2.5V/1.2V 基准) 同上 不能 查 ADC 初始化代码
钳位 节点被 ESD 二极管钳到 VDD+0.7 4095 死平,且 3.3V 轨被泵高 不能 量节点电压 >3.3V
通道坏 MUX 未闭合/漏电大/通道映射错 任意,常为 4095 或 0 不能 换一支电阻到端子
短路 下臂 0(进水/线间短路) 0 死平 能 量节点 0V、上拉端 3.3V
上拉虚焊 Rp=∞,节点被 NTC 拉到 0 0 死平(像短路) 不能 量上拉端是否 0V
负向地偏移 ΔVg<0,热端明显 热端 0,冷端正常 不能(像短路) 冷热两端读数对比

九行里只有两行能”看数就定”。这就是为什么现场必须带万用表——不是带示波器,是带万用表。


五、绝对值的分辨力:4095 和 4083 差着什么

反解表(把 raw 换算回等效下臂电阻):

raw 等效下臂 R 若真是 NTC 则 T
20 49 Ω 224.9℃
142 359 Ω 125.0℃
3996 403.6 kΩ −40.1℃
4050 900 kΩ −50.6℃
4083 3.40 MΩ −66.1℃
4090 8.18 MΩ −75.2℃
4094 40.9 MΩ −90.0℃
4095 ∞ —

开路读数的下限由引脚漏电决定。74HC4051 的关断漏电手册上限是 ±1µA,这个电流在 10k 上拉上就是 10mV:

引脚漏电 节点电压 raw
0 3.3000 4095
0.1 µA 3.2990 4094
0.5 µA 3.2950 4089
1.0 µA 3.2900 4083
2.0 µA 3.2800 4070

所以:

  • 固件里写 raw == 4095 判开路,在 74HC4051 上会漏掉一半。芯片温度高一点、漏电大一点,开路就只有 4083。
  • 写 raw >= 4089(等价 R ≥ 6.8MΩ)能覆盖 0.5µA 以内的漏电,这是本篇推荐的阈值。
  • 123 篇定的 4050 门(等价 900kΩ)更保守,能把 1µA、2µA 的情况都收进去,代价是把 −50℃ 以下的真实低温误判成故障——离网柜不会在 −50℃ 工作,这个代价可以付。继续用 4050,不用改。

顺带说一句数字上的巧合:−40℃ 的 3996 与 4050 门之间只隔 54 LSB,折 7.7K。也就是说断线门离”真实最低温”只有 7.7 度的余量。这条余量在 123 篇算过,本篇不重复。


六、抖动形态:死平、二值、连续

绝对值只回答”到没到轨”,抖动形态回答”是死是活”。三种指纹:

形态 时间序列长相 物理成因 现场含义
死平 全部 4095,去重 1~3 个值 源阻抗 ∞,被上拉钉死 真断/上拉错轨/钳位
带噪贴轨 4083~4095 之间抖 漏电抖动,或无滤波拾噪 仍是断,但滤波不足
二值跳变 2048 与 4095 交替,无中间态 机械接触(压接/焊点/插头) 换端子,别换探头
连续下滑 每帧掉几 LSB,无跳变 接触电阻氧化/受潮 半断,最危险
大幅抖动 σ>30 LSB,不到轨 悬空拾噪/接地环流 查屏蔽与地

“二值跳变”这一条值得记住:机械接触的阻值只有两个状态——通(毫欧级)和断(兆欧级),中间的过渡区极窄。所以它在 raw 上表现为两个离散值之间来回跳,中间几乎没有采样点。而传感器漂移、受潮、接触电阻氧化都是连续变化的。这个区别在现场非常好用:看到二值跳变,直接去动端子,不用想别的。

一个够用的分类器(只分形态,不下结论):

typedef enum { RAW_OK, RAW_DEAD_HI, RAW_NOISY_HI,
               RAW_BIMODAL, RAW_DEAD_LO } raw_class_t;

raw_class_t classify(const uint16_t *s, uint8_t n)
{
    uint8_t hi = 0, lo = 0, jump = 0, i;
    for (i = 0; i < n; i++) {
        if (s[i] >= 4050) hi++;
        if (s[i] <= 20)   lo++;
        if (i) {
            int16_t d = (int16_t)s[i] - (int16_t)s[i - 1];
            if (d > 100 || d < -100) jump++;
        }
    }
    if (hi == n)   return jump ? RAW_NOISY_HI : RAW_DEAD_HI;
    if (lo == n)   return RAW_DEAD_LO;
    if (jump >= 2) return RAW_BIMODAL;
    return RAW_OK;
}

阈值 4050 来自 123 篇,100 LSB 是”机械跳变”与”慢漂”的分界(1 小时掉 100 LSB 已经是 14K@−40℃,不可能是正常工况)。


七、半断比全断更危险

接触电阻串联在下臂,阻值不变,但它和 R_ntc 是串联关系,误差随 R_ntc 变小而放大:

真实 T R_ntc +10Ω +100Ω +1kΩ +10kΩ
−20 105,385 −20.0 (−0.0) −20.0 (−0.0) −20.2 (−0.2) −21.5 (−1.5)
0 33,621 −0.0 (−0.0) −0.1 (−0.1) −0.6 (−0.6) −4.8 (−4.8)
25 10,000 25.0 (−0.0) 24.8 (−0.2) 22.9 (−2.1) 10.2 (−14.8)
45 4,348 44.9 (−0.1) 44.4 (−0.6) 39.8 (−5.2) 17.1 (−27.9)
60 2,486 59.9 (−0.1) 58.9 (−1.1) 50.8 (−9.2) 20.1 (−39.9)
85 1,087 84.7 (−0.3) 82.2 (−2.8) 65.0 (−20.0) 22.7 (−62.3)
125 359 123.9 (−1.1) 115.4 (−9.6) 77.9 (−47.1) 24.2 (−100.8)

1kΩ 的接触电阻,在 125℃ 处等于 47 度的误差。 机理很简单:359Ω 里塞进 1kΩ,那就是 74% 的偏差;同样 1kΩ 塞进 402kΩ,只占 0.25%。所以这个病只在热端露头,冷端完全正常。

而它的 raw 形态是:25℃ 时 raw 从 2048 变成 2145(读 22.9℃),125℃ 时从 142 变成 490(读 77.9℃)。整个过程一次都不顶轨,一次都不越界。

这意味着:

  • 任何”只看顶轨”的断线判据对半断完全无效;
  • 高温降额(122 篇的 45℃/50℃/55℃ 三张门)会被静默旁路——真实 55℃ 读成 36℃,什么都不动作;
  • 唯一能抓到它的是相对判据:同一电流段内温升斜率低于柜中位数 30%(123 篇)、或同一面电芯的正/负极端子温差超 3K(124 篇定位工装那一条)。

一句话:全断会被判据抓到,半断只能被”比较”抓到。


八、开路读数的两个陷阱

8.1 漏电把 4095 拉下来

见第五节。1µA 就是 4083。所以别写 == 4095。

8.2 采样点太早,开路看起来是个正常探头

开路之后,节点从上拉经 Rp 向 C_f 充电:

τ = (Rp + R_s)(C_node + C_f) = (10k+1k)(80p+220n) = 2.421 ms
距切换 t/τ 残差 节点 raw 表观温度
0.1 ms 0.041 95.95% 1.717 2130 23.2℃
0.5 ms 0.207 81.34% 1.958 2430 16.7℃
1 ms 0.413 66.16% 2.208 2740 10.0℃
2 ms 0.826 43.77% 2.578 3199 −1.1℃
5 ms 2.065 12.68% 3.091 3835 −25.3℃
10 ms 4.131 1.61% 3.273 4062 −54.5℃
25 ms 10.33 0.00% 3.300 4095 断

(起点取上一路的典型值 1.65V。)

这张表解释了现场一个很常见的怪事:有的柜子探头断了,读数不变 4095,而是显示”某一路比其他路低 15 度”,而且这 15 度还随季节变。 因为它的固件在切换后 1~2ms 就取样了,开路只是把节点拉到一个中间值。

这也把 127 篇的结论补全了:把采样点挪到 slot 尾部(25ms = 10.3τ)之后,开路才会干脆利落地顶到 4095。“开路=4095″不是物理定律,是”等够了”才成立的。


九、并一支电阻:判决式与两个死角

手里没有别的工具时,在节点与板地之间并一支 P,然后看读数。开路时读数只由 P 决定:

raw_open = 4095 · P/(P + Rp)      ← 与温度无关

这条是判决式:并 10k → 2048;并 100k → 3723;并 1M → 4091。若量出来的正好是这个值(±1%),说明下臂确实断了,因为没有哪支 NTC 会在任何温度下恰好等于你并上去的那支电阻。

四种工况并 10k 的读数:

工况 25℃ 0℃ −40℃
正常(NTC 在下) 1365 1782 2022
探头开路 2048 2048 2048
探头短路 0 0 0
上拉接 5V 2068 2701 3064

两个死角,必须知道:

死角一:对”上拉错轨”几乎没有分辨力。 25℃ 时开路读 2048、5V 错轨读 2068,只差 20 LSB。你会把 CH2 判成断线,然后换探头,然后失败——本案例里运维就是这么绕进去的。判错轨只能量电压。

死角二:冷端分辨力有天花板。 “并阻后读数”与”正常读数”的差值:

T(℃) 不并 并 10k 并 100k 并 1M
−40 99 26 83 97
−20 355 93 296 348
0 939 266 793 922
25 2047 683 1773 2017
60 3280 1368 2924 3240
125 3953 1911 3582 3912

−40℃ 时不管并多大,差值都在 99 LSB 以内——因为那一温度下 k 已经是 0.976,开路与正常的电压差本来就只有 80mV。冬天别在冷端用并阻法,用电压表。


十、换一支 10k 到端子:把”板”和”现场”切开

最快的一步,也是最容易被跳过的一步:拔掉探头,在端子上插一支 10k 电阻(功率无所谓,1/4W 足够)。

板侧状态 raw 预期 结论
正常分压 2048 ± 41 板与固件正常,问题在探头/线/端子
仍然顶轨 ≥4090 板侧:上拉、基准、MUX、通道映射
仍然为 0 ≤20 上拉虚焊,或节点短地

±41 来自两支电阻各 1% 的公差(±2%×2048)。

这一步的价值在于它是唯一能把责任一刀切开的动作。切完之后,问题要么在板上(那就拆板),要么在现场(那就爬梯子)。没有这一步,所有讨论都是猜。


十一、量程错配:整柜在同一温度集体顶轨

这是最容易误判的一类,因为它的现场长相是”好几路同时坏“,而人本能地认为是”这批探头不行”。

削顶的临界温度,就是 Vpull·k = VREF 解出来的温度:

上拉供电 ADC 基准 削顶起始温度
5.0V 3.3V 10.8℃ 以下
3.3V 2.5V(内部基准) 1.4℃ 以下
3.3V 3.0V −19.1℃ 以下
3.3V 1.2V 38.1℃ 以下
12.0V 3.3V 48.5℃ 以下

(最后一行的 12V 上拉不是笑话:24V 系统里从电池直接取电做上拉,很常见。)

上拉 5V / 基准 3.3V 的完整曲线:

T(℃) 节点(V) 未削顶 raw 实际 raw 表观温度
−10 4.267 5295 4095 顶轨
0 3.854 4782 4095 顶轨
10 3.343 4148 4095 顶轨
15 3.065 3803 3803 −23.4℃
25 2.500 3102 3102 1.4℃
45 1.515 1880 1880 28.7℃
60 0.996 1235 1235 45.2℃
125 0.173 215 215 108.3℃

25℃ 读 1.4℃,125℃ 读 108.3℃——整条曲线被”压”进了低端,而且低温段顶死。

判据很干脆:如果同一台柜子里有两路以上在同一个温度附近同时顶轨,一定是量程问题,不是探头问题。 探头不会约好同一天坏。

补一句:固件里给某一路加”温度偏置”来修读数,是最危险的一种临时修补。偏置不会改变量程,顶轨之后 4095 + 偏置 会被解成一个更离谱的数(本案是 −60℃),把量程病伪装成断线病。


十二、共模超范围:单端里是同义词,差分里才是独立的病

在单端分压拓扑里,”共模抬升”和”地电位差”是同一个物理量的两个名字——都是 ΔVg,都只能把读数往下推(见第三节)。它们只在”怎么测、怎么修”上分开,不在物理上分开。

真正让”共模超范围”独立成病的,是差分前端(INA 或带 PGA 的差分 ADC)。此时代谢的是输入共模窗口:

CM = (V+ + V−)/2      窗口 ≈ (V−)+0.1V ~ (V+)−0.1V

量 NTC 两端(下臂)时 CM = V_node/2:

T(℃) V_node(V) CM(V) 判定
−40 3.2199 1.6099 OK
0 2.5435 1.2717 OK
25 1.6500 0.8250 OK
60 0.6571 0.3285 OK
100 0.2152 0.1076 贴边
125 0.1143 0.0572 低于下窗

热端失效点在 102.8℃:R<645Ω 时 CM<0.1V,差模还有 114mV 很好测,但 INA 已经出了共模范围,输出会掉到非线性区或直接钳位。这就是”共模超范围”的典型长相:差模正常,输出不对。

如果你的差分前端是量 Rp 两端(上臂),失效点换到冷端:−26.1℃ 以下,因为 CM=(3.3+V_node)/2 在冷端达到 3.26V,超过 3.3V 供电 INA 的上窗 3.2V。

两个结论:

  1. 差分前端的共模病在两端,中间是安全的。 设计时把激励电压降到 1.2V(CM 中点 0.6V),或者改成恒流激励(CM 固定),窗口就宽了。
  2. “差模好测”不等于”能测”。 选 INA 时只看增益和失调,不看共模窗口,就会在 100℃ 以上或者 −25℃ 以下掉进这个坑,而且现象是”读数卡住不动”,很容易被判成探头故障。

十三、钳位不是保护,是往 3.3V 轨灌电流

节点被 5V 上拉抬到 VDD+0.7 以上,ADC 输入的 ESD 二极管开始导通。以 −40℃ 为例:

T(℃) 无钳位节点(V) 单路钳位电流 8 路合计 实际 raw
−40 4.879 90.0 µA 720 µA 4095
−30 4.762 80.0 µA 640 µA 4095
−20 4.567 62.0 µA 496 µA 4095
−10 4.267 31.3 µA 251 µA 4095
0 3.854 0(节点仍高于 3.3V) — 4095
25 2.500 0 0 3102

三件事同时发生:

  • 读数恒 4095(与开路同形);
  • 720µA 被灌进 3.3V 轨。LDO 大多不能倒灌,轨会被抬起来——抬轨之后所有通道一起偏,于是又多出一个”整柜同向偏”的假象;
  • 二极管长期导通会加速老化,几个月后这一路的漏电变大,开路读数从 4095 掉到 4083 以下,判据开始漏判。

钳位区最坑的地方是它掩盖了自己:读数看起来像”探头断了”,实际是”上拉接错”。判据只有一个:量节点电压,超过 3.3V 就是钳位。


十四、现场三步法

一支万用表,不用示波器。三步,按成本从低到高。

第一步:看数(0 成本)

  • raw 是否顶轨/打底轨;
  • 抖动形态(死平/二值/连续/大抖);
  • 与同柜邻路的差(>3K 就要查);
  • 是否多路同时(同时 = 量程问题)。

第二步:量压(三个点)

万用表直流档,量三个点对板地:节点(=NTC 上端)、探头地(NTC 下端)、上拉供电端(Rp 上端)。

节点(V) 探头地(V) 上拉端(V) 结论
3.30 0.00 3.30 下臂开路(探头/线/端子)
3.30 0.00 5.00 上拉接错轨
3.30 0.90 3.30 地电位差 +0.9V
2.47 0.00 5.00 上拉 5V 但常温:曲线整体偏低 23℃
0.00 0.00 3.30 下臂短路
0.00 0.00 0.00 上拉虚焊(像短路,其实不是)
1.65 0.00 3.30 电气正常 → 问题在 MUX/ADC/通道映射

(表按 25℃、Rp=10k、VREF=3.3V 计。其他温度下节点电压查第二节的表。)

第三步:换阻(10 秒)

拔探头,端子插 10k:2048±41 → 现场问题;≥4090 → 板侧;≤20 → 上拉虚焊。

现场核对清单

  • ☐ 先数有几路顶轨:1 路查线,2 路以上先查量程
  • ☐ 看抖动:二值跳变直接动端子,别换探头
  • ☐ 量节点电压:>3.3V 是钳位,=3.3V 是开路,<正常值是偏移
  • ☐ 量上拉供电端:不是 3.3V 就是错轨,记下来改 BOM
  • ☐ 量探头地对板地:>50mV 就要处理,热端 >100mV 已经在打底轨
  • ☐ 拔探头插 10k:一次切开”板”与”现场”
  • ☐ 查固件里有没有”温度偏置”补丁:有就先删掉再判
  • ☐ 查采样点:切换后 <5ms 的,开路可能不顶轨,判据要按第八节放宽

十五、设计评审表

项目 判据 本例取值 备注
上拉供电 必须等于 ADC 基准 3.3V / 3.3V 跨轨是最常见的顶轨成因
上拉与基准同源 同一 LDO 同一走线 是 免掉一整类量程病
断线判据 raw ≥ 4050(R≥900k) 4050 不用 ==4095
短路判据 raw ≤ 20(R≤49Ω) 20 上拉虚焊同形,需量电压
采样点 ≥10τ(τ=2.421ms) 25ms <5ms 时开路不顶轨
前端漏电 ≤0.1µA(若用 100k 上拉) 74HC4051 ±1µA 100k 上拉必须换低漏 MUX
地电位差 热端 ≤10mV 单点接地 热端增益 0.965,几乎 1:1
差分共模 全温区留 0.2V 余量 激励降到 1.2V 冷端/热端两个失效端
钳位 正常工况不导通 3.3V 上拉 一导通就往轨里灌电流
偏置补丁 禁止 0 处 会把量程病伪装成断线病
半断检测 相对判据(斜率/一致性) 123/124 篇 顶轨判据抓不到

最后收成三句话。

第一,4095 只有两个来源:下臂断了,或者量程到头了。 前者查线,后者查电源轨。地电位差在单端分压链上顶不到上轨——它要 3.3V,而它在热端只要 −118mV 就能把读数打到 0,那才是它该出现的地方。

第二,判据要按”能不能区分”来设计,不是按”好不好写”来设计。 raw == 4095 漏掉一半开路,raw >= 4050 只多付 7.7K 的低温余量;并 10k 在常温好用、在 −40℃ 只有 26 LSB 分辨力;顶轨判据抓得住全断、抓不住半断。每一条判据都有它的失效边界,写进评审表比写进代码更重要。

第三,最贵的错误是”加个偏置修一下”。 本案例里 CH2 的 −23℃ 偏置在夏天让读数看起来正常,在冬天把量程病变成了一条 −60℃ 的断线告警,让两个人换了四个探头。读数不对时,先找物理原因,别找数学原因。


工具:drafts/_tools/rail_sat_forensics_calc.py(16 个模式、44 项自检断言,纯标准库、全离线)。口径:B3950 / R25=10k / NTC 在下 / 10k 上拉 3.3V / 12bit 满量程 4095 / 1LSB=0.806mV;R_s=1k、C_node=80pF、C_f=220nF、R_on=120Ω(74HC4051)、关断漏电按手册上限 ±1µA;INA 共模窗口按 3.3V 供电、上下各留 0.1V 计。文中现场案例是按脚本口径重构的,不是原始录波;具体器件请按自己手上的 datasheet 替换。

另:9 月 26 日那篇《ESD 与浪涌防护实战》里”12.5kV 应为 12.5V”的笔误还没改,等排期。站内至今仍缺《Flash 存储与参数管理》和《固件安全与逆向防护》两个主题,都在待写清单上。


下一篇换个方向,写《固件读出保护与签名固件升级》——从选项字节(RDP/读保护等级)到签名链(哈希、签名、回滚保护),再到产线密钥注入的工装与流程。温度这条线已经连写九篇,该换换脑子了;而”固件被人读出来”这件事,比探头断线贵得多。