4、故障检测与诊断机制(FDC):信号合理性检查、范围检查、速率检查、回环诊断、看门狗技术

各位工程师朋友,咱们接着聊VCU的故障容错。上一章我们讲了故障分级,那问题来了——故障是怎么被发现的?

说白了,VCU得有一双「火眼金睛」。它得能自己判断:这个信号对不对?这个值合不合理?这个变化速度正常吗?

这就是我们今天要讲的故障检测与诊断机制(FDC)。我个人习惯把这套机制比作VCU的「体检系统」——定期检查、专项筛查、异常报警,一个都不能少。

核心观点:没有可靠的FDC,跛行回家就是空中楼阁。你连故障都检测不出来,还谈什么容错?

4.1 信号合理性检查

先问大家一个问题:你踩下油门踏板,VCU读到50%的开度。这个值合理吗?

嗯,光看一个信号,你没法判断。但如果你同时看刹车踏板信号呢?如果刹车也踩了50%,那油门50%就不合理——谁一边踩刹车一边猛踩油门?

这就是信号合理性检查的核心思想:多信号交叉验证

我在项目中遇到过这样一个案例:某款纯电动车,在低速蠕行时突然出现加速抖动。查了半天,发现是油门踏板位置传感器1和传感器2的比值异常。两个传感器本应线性相关,但其中一个因为线路接触不良,输出值偶尔跳变。合理性检查直接报出「传感器不一致故障」,车辆进入跛行模式,限速20km/h。

常见的合理性检查包括:

  • 传感器冗余校验:比如油门踏板有两个传感器,它们的输出比值应在0.8~1.2之间
  • 物理约束校验:车速为0时,轮速传感器应该输出0(不考虑噪声)
  • 工况一致性校验:挡位在P挡时,电机转速应为0

我的经验:合理性检查的阈值不要设得太死。我曾经吃过亏——把比值范围设成0.9~1.1,结果某批次传感器因为温漂,低温下比值跑到0.88,误报了一堆故障。后来改成0.8~1.2,配合温度补偿,问题就解决了。

4.2 范围检查

范围检查,说白了就是看信号有没有「出圈」。每个传感器信号都有它的物理极限——比如水温传感器,正常范围是-40°C到150°C。如果读到200°C,那肯定有问题。

范围检查分两种:

  • 硬限幅检查:超出物理极限直接报故障。比如12V电池电压,正常范围9V~16V,读到18V立刻报警
  • 软限幅检查:超出正常工作范围但没到物理极限,报预警。比如冷却液温度105°C,虽然没到120°C的极限,但已经偏高,可以触发降功率保护

我建议大家在设计范围检查时,一定要区分「硬故障」和「软故障」。硬故障直接进跛行,软故障可以先降功率试试。

/* 范围检查示例代码 */
if (sensor_value > HARD_LIMIT_HIGH) {
    fault_status = FAULT_HARD;  // 硬故障,立即跛行
} else if (sensor_value > SOFT_LIMIT_HIGH) {
    fault_status = FAULT_SOFT;  // 软故障,先降功率
    power_limit = power_limit * 0.7;  // 限功率70%
}

4.3 速率检查

速率检查,很多人容易忽略。你想想看,一个物理信号的变化速度是有上限的——比如车速从0加速到100km/h,至少需要几秒钟。如果传感器读数在10ms内从0跳到了100,那肯定是故障。

速率检查的核心公式很简单:

变化率 = (当前值 - 上一周期值) / 采样周期

如果变化率超过预设阈值,就报「信号跳变故障」。

我记得有一次,某款车的加速踏板信号偶尔出现毛刺——就是那种1ms内从30%跳到80%又跳回来的尖峰。范围检查根本抓不住,因为最大值没超限。但速率检查一抓一个准——变化率超过500%/s,直接判定为无效信号,用上一周期的有效值替代。

注意:速率检查的阈值要结合系统动态特性来设。比如电机转速的速率阈值,要考虑到电机本身的加速能力。设得太小会误报,设得太大又检测不到真正的故障。

4.4 回环诊断

回环诊断,英文叫Loopback Diagnosis。这名字听着高大上,其实原理很简单:发出去什么,收回来应该是什么

举个例子:VCU通过CAN总线发送一个控制指令给电机控制器,要求输出50Nm扭矩。如果电机控制器正确执行,它应该反馈回来一个50Nm的实际扭矩值。如果反馈值跟指令值偏差太大,说明通信链路或执行器有问题。

回环诊断在VCU中主要用在:

  • CAN通信诊断:发送诊断请求,检查应答帧是否正常
  • 执行器诊断:比如控制冷却风扇,发开启指令后检查风扇转速反馈
  • 传感器供电诊断:给传感器提供5V参考电压,检查实际电压是否在4.9V~5.1V之间

我曾经在项目里遇到一个奇葩问题:某款车的电子水泵偶尔不转,但故障码又没报。后来加了回环诊断才发现——VCU发了PWM占空比指令,但水泵的反馈信号一直为0。查到最后是水泵控制器的地线虚接,导致指令信号无法形成回路。

4.5 看门狗技术

看门狗,这是VCU的「最后一道防线」。当所有诊断都失效,程序跑飞了怎么办?看门狗会强制复位。

看门狗的原理很简单:一个定时器,需要程序定期「喂狗」。如果程序卡死或跑飞,没有及时喂狗,定时器溢出,触发系统复位。

在VCU中,我建议采用多级看门狗策略:

级别 超时时间 触发动作 说明
一级看门狗 10ms 中断服务 检测主循环是否卡顿
二级看门狗 100ms 任务重启 检测关键任务是否超时
三级看门狗 1s 系统复位 终极保护,防止死机

嗯,这里要注意:看门狗的喂狗位置很关键。我见过有人把喂狗放在中断里,结果主循环卡死了,中断还在跑,看门狗永远不超时——这等于没装看门狗。

正确的做法是:喂狗放在主循环的最后,确保整个循环都执行完毕了才喂。

避坑指南:我曾经在一个项目里,把看门狗超时时间设成了5ms,结果因为某次CAN总线负载高,主循环偶尔跑到6ms,导致系统频繁复位。后来改成10ms,配合任务优先级调整,问题就解决了。看门狗的超时时间要留有余量,一般取正常执行时间的1.5~2倍。

知识体系总览

为了让大家更直观地理解这五种诊断机制的关系,我画了一张图:

VCU故障检测与诊断机制(FDC) FDC诊断引擎 信号合理性检查 多信号交叉验证 范围检查 硬限幅/软限幅 速率检查 信号变化率监测 回环诊断 发收一致性校验 看门狗技术 多级超时保护 五种机制协同工作,覆盖信号级、通信级、系统级故障检测

这五种诊断机制,说白了就是VCU的「五感」——合理性检查像眼睛,看信号之间是否协调;范围检查像皮肤,感知是否过热过压;速率检查像耳朵,听变化是否平顺;回环诊断像手,确认指令是否被执行;看门狗像心脏起搏器,关键时刻救命。

在实际项目中,这五种机制要配合使用。我个人的习惯是:先做范围检查和速率检查(计算量小,响应快),再做合理性检查(需要多信号,计算量大一些),最后用回环诊断和看门狗兜底

好了,这一章的内容就到这里。记住一句话:诊断不是目的,保护才是。我们做FDC,不是为了报故障码,而是为了让车辆在故障发生时还能安全地跑回家。


专注资料整理