三相电流采样的功能安全诊断(Current Sensing Diagnostics)
本质 电流是 FOC 闭环的"眼睛"——眼睛瞎了或撒谎,控制器会输出错误扭矩 → 命中 ASIL C/D 等级的 Hazard(Unintended Torque / Loss of Torque)。这些 range check / sum-to-zero / plausibility 校验不是为了让电流更准,而是把 sensing 链上的 single-point fault 变成 detected fault,让 ISO 26262-5 §8 的硬件架构指标 SPFM ≥ 99% / LFM ≥ 90% 算得过去。所有诊断的设计依据都来自 ISO 26262-5 Annex D(SM 与 DC 表)+ §8/§9(架构指标)+ Part 11(半导体附录),本页把这条链讲透:从 hazard 倒推到具体 SM、每种 SM 抓什么 fault、DC 估多少、FTTI 内怎么反应、FMEDA 怎么算。
学习目标
读完本页后,你应该能够:
- 说出三相电流采样链上"为什么必须做诊断"的因果链——从 Safety Goal 一直到 ADC 寄存器
- 列出 ISO 26262 中关于电流采样诊断的 4 个具体出处(Part 5 Annex D、Part 5 §8/§9、Part 6 Annex D、Part 11)
- 把 8 类典型采样链 fault model 映射到对应的 SM,并估算每种 SM 的 DC 区间
- 解释为什么"三相电流和为零(KCL)"是性价比最高的安全机制
- 判断 range check / sum-to-zero / plausibility / 时间监控 / ADC 自检 / 通道冗余 6 类 SM 谁能抓什么
- 设计一条满足 ASIL D 的电流采样链(含 SM 选型 + FTTI 内反应 + FMEDA 数字达标)
- 识别电流采样诊断的 5 个反模式
1. 因果链——从 Hazard 倒推到 ADC
电机控制器的输出扭矩在 FOC 闭环里完全由 Iq 计算决定,而 Iq 又来自 Clarke→Park 后的三相电流 Ia/Ib/Ic。所以三相电流就是控制器的"眼睛"——眼睛瞎了或撒谎,控制器会"睁眼瞎"地输出一个它自以为正确、实际上完全错误的电压矢量,结果就是 Unintended Torque(UT) 或 Loss of Torque(LoT)。这两个失效在 BEV/HEV 里通常被 HARA 评为 ASIL C ~ D(高速 UT 直接到 D),这就是需要在 sensing 链上堆 safety mechanism 的根本原因。
换句话说,这些诊断不是为了"防止电流测不准",而是让 sensing 链上的 single-point fault 在 FTTI 内被探测到——只有 detected fault 才能触发 safe state,未探测到的 fault 直接穿透到扭矩输出,违反 Safety Goal。
2. ISO 26262 依据
这些 SM 不是凭工程经验拍的,标准里有明确出处。把"做什么 SM、做到多深、覆盖率算多少"都钉在标准条款里,是 safety case 论证的根。
| 标准位置 | 内容 | 用途 |
|---|---|---|
| ISO 26262-5 Annex D, Table D.1 ~ D.14 | 列每种 SM 对应的 fault model 与 DC 等级(Low/Med/High) | FMEDA 填诊断覆盖率 |
| D.2.1.4 "Range check of input data" | 输入信号上下限校验 | 对应 high/low range check |
| D.2.4 "Plausibility check" | 跨信号合理性 | 对应 vs ω/Vdc/T* 检查 |
| D.2.6 "Reciprocal comparison by software" | 基于物理约束的冗余比较 | 对应 sum-to-zero (KCL) |
| D.2.10.4 "Input comparison / voting" | 多通道冗余比较 | 对应双 ADC / 双独立传感器 |
| D.2.11.1 "Test pattern" | 启动 / 周期性自检 | 对应 ADC ABIST / 参考电压自检 |
| ISO 26262-5 §8 + §9 | SPFM / LFM / PMHF 硬件架构指标 | ASIL D 要 SPFM ≥ 99%、LFM ≥ 90%、PMHF < 10 FIT |
| ISO 26262-6 Annex D / Table 4 | software-level error detection | range / plausibility / time-monitoring 软件实现 |
| ISO 26262-9 §6 | Safety analysis(FMEDA) | 把 D.x 的 DC 一项一项填进 FMEDA |
| ISO 26262-11 §5.3 (Semiconductors, 2018) | ADC / 模拟前端 / sensor interface 的具体例子 | 明确点名 ADC range check + 冗余采样为推荐 SM |
不背条款没关系,记住"DC 数字必须能引一条标准条款" 就够了——SAFETY assessor 审 FMEDA 时会逐行问"这一行 99% 的 DC 凭什么"。
3. 失效模式 vs SM 覆盖矩阵
电流采样链 = 传感器(霍尔/分流/TMR)→ 调理(OPA/差分/CSA)→ ADC → DSP 寄存器,整条链上的 fault model 大致 8 类,每类都要找到至少一个 SM 来抓。下表是 FMEDA 的"骨架"——未在表中盖到的 fault model 就是 SPFM 漏点。
| # | Fault model | 物理原因 | 主要 SM | DC 等级 |
|---|---|---|---|---|
| 1 | Stuck-at-high / stuck-at-low | 线短到 VCC/GND、ADC 死锁、OPA 饱和 | Range check | Medium |
| 2 | Out-of-range(offset / gain drift) | 温漂、老化、参考电压跑偏 | Range + sum-to-zero | High |
| 3 | Frozen value(值不更新) | DMA 死、ADC trigger 丢、中断卡死 | Time-monitoring + plausibility | Medium |
| 4 | 单相通道偏置 / 增益错 | 单个传感器失效、单路 OPA 漂移 | Sum-to-zero (KCL) | High |
| 5 | 共模噪声 / EMI 干扰 | 布线、接地、PWM 耦合 | 多次采样滤波 + range | Low~Medium |
| 6 | 通道交换 / 接线错 | 产线装错、维修接错 | Plausibility + 上电自检 | Medium |
| 7 | ADC 参考电压漂 | Vref 老化、温漂 | ADC self-test (ABIST) + Vref 监控 | Medium~High |
| 8 | Common cause(一片 ADC 全瘫) | ADC 共用电源 / 时钟 / die 失效 | 双独立 ADC + DFA | High |
flowchart LR
S["sensor"]
CSA["CSA / OPA"]
ADC["ADC"]
REG["DSP register"]
S -->|"f1 stuck / f5 EMI"| CSA
CSA -->|"f2 drift / f6 swap"| ADC
ADC -->|"f3 frozen / f7 Vref"| REG
REG -->|"f8 common cause"| ALL["bad Iq"]("bad Iq".md)
S -.->|"f4 single ch offset"| ALL
单一 ADC 读数 → DC ≈ 0%(典型 single-point fault)。叠加 range + KCL + plausibility 之后,公开文献和 OEM 实测一般能做到 整体 DC ≥ 99%,刚好够 ASIL D 的 SPFM ≥ 99% 门槛。
4. Range Check(高低范围校验)
Range check 是最便宜也最先做的 SM——物理上电机额定电流 ±I_max 是有上限的,ADC 输出落在 [I_max·1.1, I_max·1.5] 之外几乎只能是硬故障(断线、短到电源/地、OPA 饱和)。它不需要任何额外硬件,纯软件就能盖住 stuck-at 类故障。
4.1 阈值的设计
阈值过紧会假阳触发 fail-safe,过松会漏故障,两层阈值(warning + trip)+ blanking time 是工程通行做法。常见配置:
| 阈值 | 取值(相对 I_max) | 反应 |
|---|---|---|
| Soft warning | 1.1 × I_max | 计数器 +1,连续 N 次报 DTC |
| Hard trip | 1.5 × I_max | 立刻进入 ASC / freewheel |
| Out-of-rail | ADC 满量程或 0 | 立刻进 fail-safe(一定是硬故障) |
| Blanking time | 5–20 µs | 滤掉 PWM 切换瞬态 di/dt 尖峰 |
4.2 实施位置
Range check 必须做在 raw ADC count 上,不要等 Clarke 变换之后才查——变换会把单相 fault 摊到三相,反而变模糊。典型代码骨架在中断顶部:
4.3 覆盖什么 / 不覆盖什么
Range check 抓的是显著漂移——offset 漂 50% 它能抓到,漂 5% 它抓不到。所以 range 永远是"第一道粗筛",必须配合后面的 KCL / plausibility 才能补齐 DC。
5. Sum-to-Zero(KCL 物理冗余检查)
这是性价比最高的安全机制——基尔霍夫电流定律(KCL)在三相无中性线(Y 不接 N、Δ)拓扑下是硬物理约束:
任何一相 sensor 有 offset / gain 误差,或 ADC 跳变,都会让和不为零。这是真正的信息冗余——不加任何额外硬件,DC 就能拿到 High。这也是为什么很多设计哪怕只装两路传感器(用 KCL 算第三相),高安全等级仍要装满三路:第三路就是为了做这个校验。
5.1 阈值与残差定义
实际系统里 KCL 残差不会真的等于 0,要给一个允许带:
由三个误差源决定:
- 传感器精度 —— 例如 ±1% × I_max × 3 通道 ≈ 3% × I_max
- ADC 量化噪声 —— ±0.5 LSB × 3
- PWM 切换瞬态 —— 三相不严格同步采样会引入瞬态残差
工程上 是典型起点,必须用实际工况标定。
5.2 KCL 抓得住 / 抓不住
KCL 是单通道 fault 的克星,但对共模 fault 完全失明——三相 sensor 同方向同幅度漂移时,和仍然是 0。所以 KCL 必须配 plausibility 才完整。
| Fault 形态 | KCL 能抓 | 说明 |
|---|---|---|
| 单相 stuck-at | ✓ | 最易抓 |
| 单相 offset 漂移 | ✓ | 残差等于该相 offset |
| 单相 gain 错 | ✓ | 当 Ix 非零时可见 |
| 三相同向同幅共模漂 | ✗ | 残差仍为 0 |
| 三相同步 frozen | ✗ | 残差为常数 |
| 通道接错(Ia ↔ Ib) | 部分 | 静止瞬间可能为 0;动态有残差 |
5.3 三分流和双分流的差别
双分流(Ic 由 Ia + Ib 反推)做不了 KCL——因为 Ic 就是计算出来的,三者必然和为零。要做 KCL 就必须装满三路独立 sensor。这是双分流方案要升 ASIL D 时被卡住的最常见瓶颈,也是高端主驱倾向"三路 shunt + 三路 CSA"的安全侧动机(成本侧一直是劣势)。
6. Plausibility Check(跨信号合理性)
Plausibility 抓的是"值在 range 内、KCL 也接近 0、但就是不对"的慢漂或冻结。比如转矩指令 = 0 但实测 Iq = 50A,或者电机转着但电流恒定不变。这类故障 range / KCL 都过得去,必须靠跨信号的合理性来抓。
6.1 跨信号约束的物理基础
Plausibility 的依据是电机电气模型的稳态约束——三相电流和电压、转速、温度、扭矩指令之间存在固定的物理关系,违反任何一条就是"信号矛盾"。
| 跨信号约束 | 公式 | 抓的 fault |
|---|---|---|
| Iq vs Torque cmd | Iq 计算错(含传感漂) | |
| |I| vs Vdc / ω | 电机方程 | 整体增益错 |
| |I| vs 温度 | 大电流 ≥ T_NTC 温升一致性 | 电流低估 |
| 频率 vs ω_e | 三相电流基波频率 = | frozen value、采样时序错 |
| |I| vs DC bus 输入电流 | 单相全 0、整体偏差 |
6.2 实施时机和窗口
Plausibility 不能用 PWM 周期那么快的尺度——电机方程含微分项,瞬态期间约束不严格。典型实施:
- 慢周期任务(1 ~ 10 ms) 跑 plausibility,避开瞬态
- 连续 N 次违反才报错(counter-based debouncing)防止启动 / 工况切换瞬态假阳
- 运行模式分支:standstill / startup / running 各有不同合理性窗口
7. 时间域诊断(Frozen Value / Time Monitoring)
电流是高频信号,长时间不变本身就是 fault 信号。Frozen value 检测专门抓 ADC trigger 丢、DMA 卡死、中断停跑这类"值看起来 OK 但其实不在更新"的隐蔽故障——range / KCL / plausibility 都可能放过。
7.1 Frozen 检测的三种方式
frozen 检测的难点不在"实现复杂",而在和静止工况区分——电机停转时电流真的几乎不变,幼稚的方差检测会假阳。下面三种方法按"误报率 vs 实施成本"递增排列,工程通常组合使用:sample counter 必有兜底,方差或 timestamp 视场景加。
| 方法 | 实现 | 适用 |
|---|---|---|
| Sample counter | ADC ISR 累加计数器,慢任务定时清零并校验 N > 阈值 | 最简单,必有 |
| Variance window | 滑动窗口算 N 个样本的方差,过低判 frozen | 旋转中适用,静止时假阳 |
| Timestamp diff | 每次 ADC 写入带 timestamp,检查相邻间隔 | 有 DMA / RTOS 场景 |
7.2 PWM 同步采样的时序检查
ADC 必须在 SVPWM 中心时刻采样(避开开关瞬态),可以反向监控这个时序——比较 ADC trigger 事件和 PWM peak 的时间差,超过 ±1 µs 就报 trigger 失步。这是 ADC 触发链失效的高 DC 检测。
8. ADC 自检(ABIST / Reference Voltage Check)
ADC 本身的失效是 sensing 链终点,必须用 BIST 类硬件 SM。ASIL C/D MCU(AURIX TC3xx / S32K3 / Hercules)的 ADC 模块都内置了至少 4 类自检,FMEDA 时引 datasheet 的 DC 数字。
8.1 启动 BIST
启动时跑一次完整 ADC 测试 pattern,覆盖率最高但只查启动瞬间。MCU safety manual 给的 DC 通常 ≥ 90%。
| Test | 内容 | 检测 fault |
|---|---|---|
| Built-in test pattern | 内部基准源切到 ADC 输入,比较读数 vs 预期 | ADC 增益、offset、量化错 |
| Vref check | 测量内部 Vref vs 外部已知参考 | Vref 漂、断线 |
| Channel mux test | 轮流切 mux 到已知信号 | 通道交换、mux 卡死 |
8.2 运行时周期 BIST
稳态运行中插入测试通道(一般留一路给 1.65V 内部基准),周期性比较,典型 DC ≥ 80%。运行 BIST 必须保证不影响主控信号采样窗口——常见做法是单独留一个 ADC 时隙。
8.3 Vref 持续监控
参考电压通过双路冗余测量(一路 ADC 测 Vref,另一路 Vref 测 ADC 输入端的已知电压),典型 DC ≥ 95%。
8.4 双 ADC 同步比较
ASIL D 关键回路常用两个独立 ADC 同步采样同一 shunt,比较结果。这是 D.2.10.4 input comparison 的典型实施,DC ≥ 99%。前提是两个 ADC 真正独立——不同时钟域、不同电源、不同 die(或至少 mainline + safety domain 隔离)。
9. 启动时校零与方向检查
电机静止状态(Inverter PWM 全关、电流必然 ≈ 0)是天赐的"自检窗口"——上电、停车、PWM disable 期间,三相电流应该都在零附近。任何偏移都是 sensor offset,存到 EEPROM 用于运行时补偿,同时做合理性判断。
9.1 零电流校准的边界
校零的允许带不能"一刀切"——冷态上电时温漂为零,offset 应该非常小;带温度的热态启动允许更大;任何状态都有一个上限超过即是硬故障,不能再被"校准"掩盖。下面三档阈值是工程通用配置,背后逻辑是"越接近理想条件、阈值越严"。
| 场景 | 允许的 offset | 超过则 |
|---|---|---|
| 上电(冷态) | ±2% × I_max | 校准并存表 |
| 上电(热态,有残温) | ±5% × I_max | 校准并标 warning DTC |
| 任何状态 | ±10% × I_max | 拒绝校准、报硬故障 |
9.2 极性 / 接线检查
启动时给一相注入小电流(< 5% I_max),验证三相电流的正负号 / 相对幅度是否符合接线预期,可以抓接线交换、CSA 极性焊错这类一次性 systematic 失效。这是 PV 阶段做、量产阶段每次启动都做的"自证"机制。
10. FTTI 内的反应链
诊断只是第一步——探测 + 反应必须在 FTTI(Fault Tolerant Time Interval)内完成,否则 detected fault 仍会穿透成 hazard。Traction inverter 的 FTTI 一般 10 ~ 50 ms(高速场景偏短),EPS 5 ~ 20 ms。
| 时间预算 | 名称 | 典型值(traction) |
|---|---|---|
| DTI(Diagnostic Test Interval) | 诊断周期 | 100 µs(current loop ISR) |
| FRT(Fault Reaction Time) | 检测后到 safe state 的反应 | < 5 ms |
| FTTI | 总时间预算 | 10 ~ 50 ms |
10.1 Safe State 选择
电流诊断触发后能进哪种 safe state,取决于电机转速 + 故障类型:
| 故障 + 工况 | Safe state | 原因 |
|---|---|---|
| 静止 / 低速 | 6-fold OFF(freewheel) | 简单,无反向感应电压 |
| 中高速 | 3-fold ON(ASC, Active Short Circuit) | 高速 freewheel 会让电池被反充,必须短路三相低边 |
| HV 系统失效 | STO + Pyro fuse | HV 链已不安全,物理切断 |
详见 转矩安全。
10.2 多次确认(debounce vs latency 取舍)
诊断不能"一击即中"——单次 ADC 噪声、EMI 突发、PWM 干扰都可能造成假阳。但 debounce 又会吃掉 FTTI 预算。典型策略:
- 硬故障(out-of-rail、ADC trigger lost):1 次即触发,不 debounce
- 软故障(KCL 越限、plausibility 矛盾):连续 3 ~ 5 次(300 ~ 500 µs)才触发
- 触发后反应不可逆——只能下电重启清 fault,避免抖动
11. FMEDA 计算实例
下面用一个简化的 ASIL D 主驱电流采样链的 FMEDA 来演示数字怎么落。FMEDA 本质是把每个 fault 的 FIT × DC 加权求和,反推 SPFM / LFM。
11.1 元件 FIT 与 SM 覆盖
FMEDA 第一步是把元件级 FIT 拆成 fault group,每组关联到一个或多个 SM——这一步决定后面 SPFM 数字算得对不对。下面用一条典型 ASIL D 三相电流采样链举例:总 FIT 来自元件 datasheet(Siemens SN29500 / IEC 62380),safety-related FIT 排除掉那些就算失效也不影响 SG 的部分。
Element: 三相电流采样链(3× shunt + 3× INA240 CSA + 双 ADC)
Total FIT = 50(汇总值)
其中 safety-related FIT = 45(剩 5 是不影响安全的器件)
| Fault group | FIT | SM | DC | residual FIT |
|---|---|---|---|---|
| Stuck-at(线 / OPA / ADC) | 12 | Range check | 90% | 1.2 |
| Single-channel drift | 10 | KCL sum-to-zero | 99% | 0.1 |
| Frozen value | 6 | Time monitor + plausibility | 95% | 0.3 |
| Common cause(ADC die) | 5 | Dual independent ADC + DFA | 99% | 0.05 |
| Vref drift | 4 | ADC ABIST + Vref monitor | 90% | 0.4 |
| 接线 / 极性 | 3 | 启动自检 + plausibility | 80% | 0.6 |
| 慢漂(增益 / 温漂) | 5 | KCL + plausibility | 95% | 0.25 |
11.2 SPFM / LFM 算账
这个数字没到 99%——意味着光做这些 SM 还不够 ASIL D,还差几个点。常见补法:
- 把 dual ADC 升级为完全独立的 die(die-level 隔离),common cause DC 拉到 99.5%
- 加 sensor 级冗余(双 vendor shunt),从 element 级 SPF 直接转 MPF(multi-point fault),LFM 也升
- 配合 ASIL decomposition(D = B(D) + B(D)),把要求分到两个独立 channel 上,单 channel 只需 SPFM ≥ 90%
11.3 一句话总结 FMEDA 的意义
FMEDA 不是为了"算出一个 99% 的数字交差"——它是反向暴露 SM 漏点的工程工具。当某个 fault group 算出来 residual FIT 大、DC 低,说明这一类 fault 的 SM 不够,要么补 SM、要么换器件。
12. 安全反模式(5 个常见错)
电流采样诊断最常踩的 5 个反模式——避免这 5 条比堆更多 SM 类型更重要,识别它们能避免 SPFM 数字"看起来达标"但实际失效场景下保护失败。
| 反模式 | 表现 | 修法 |
|---|---|---|
| 双分流方案宣称做 KCL | Ic 是算的,三者必为 0,KCL 永远过 | 升三分流,或 KCL 改用 DC 母线电流交叉 |
| Range 阈值贴着 I_max 设 | 启动 inrush / 急加速假阳触发 ASC | 加 blanking + soft warning + hard trip 两层 |
| Plausibility 没有运行模式分支 | 静止时 Iq=0 但 plausibility 抱怨 "Iq 与 ω 不匹配" | 按 standstill / startup / running 切阈值 |
| 双 ADC 共用同一 Vref / 时钟 | "冗余"实为共因失效,DC 算 99% 实际 ≈ 50% | DFA 走一遍,独立电源 / 时钟 / die |
| Frozen 检测忘了静止工况 | 静止时电流真的几乎不变,反复假阳 | 静止时切到 PWM trigger 时序检查代替方差检查 |
核心要点
- 诊断的目的不是测准电流——是把 single-point fault 转成 detected fault,让 SPFM/LFM/PMHF 算得过去
- 依据:ISO 26262-5 Annex D(SM ↔ DC 表)+ §8/§9(架构指标)+ Part 11(半导体例子)+ Part 6 Annex D(软件 SM)
- 三大互补 SM:Range(抓 stuck-at)+ KCL sum-to-zero(抓单通道漂)+ Plausibility(抓慢漂 / frozen),三者正交才能凑出高 DC
- KCL 是金钥匙:物理冗余、零硬件成本、DC 高——但双分流方案做不了 KCL,要做必须三路独立 sensor
- 时间域诊断专抓"值看起来 OK 但其实不更新"的 frozen 类故障——sample counter + PWM trigger 时序检查
- ADC 自检走 datasheet 给的 DC(启动 BIST ≥ 90%、运行 BIST ≥ 80%、Vref monitor ≥ 95%、双 ADC 比较 ≥ 99%)
- FTTI 反应链:DTI ≤ 100 µs + FRT < 5 ms < FTTI 10–50 ms;safe state 看转速选 freewheel / ASC
- FMEDA 是反向暴露 SM 漏点的工具——某行 residual FIT 大就补 SM,不是算个数字交差
- 5 反模式戒除:双分流伪 KCL / range 阈值贴 I_max / plausibility 不分模式 / 双 ADC 共因 / frozen 静止假阳