3. 传感器冗余设计:方向盘转角传感器(SAS)双通道设计,扭矩传感器冗余方案,冗余传感器故障诊断

好,咱们进入传感器冗余设计这一节。说实话,线控转向系统里,传感器就是系统的「眼睛」。眼睛要是瞎了,整个系统就废了。所以冗余设计不是可选项,是必选项。

我个人习惯把传感器冗余分成三个层次来考虑:信号源冗余、信号处理冗余、故障诊断冗余。咱们一个一个来拆解。

3.1 方向盘转角传感器(SAS)双通道设计

方向盘转角传感器,简称 SAS。它的任务就是告诉控制器:「方向盘现在转了多少度,往哪个方向转的。」

为什么需要双通道?很简单——单通道一旦失效,系统就不知道方向盘在什么位置了。这在功能安全里属于 ASIL D 要求,必须做到单点故障覆盖。

3.1.1 双通道架构方案

我见过的主流方案有两种:

方案类型 实现方式 优点 缺点
独立双芯片 两个独立的传感器芯片,各自输出角度值 物理隔离好,共因失效风险低 成本高,占用空间大
单芯片双通道 一个芯片内部集成两套感应单元 体积小,成本低 共因失效风险较高

我在实际项目中更倾向于独立双芯片方案。为什么?因为有一次在台架测试中,单芯片双通道方案因为芯片内部电源纹波干扰,两个通道同时出现了偏移。虽然概率很低,但一旦发生,系统就失去了冗余的意义。

关键设计原则:

  • 两个通道的供电、地线、信号线必须物理隔离
  • 两个通道的采样时序可以错开,避免同时受干扰
  • 两个通道的量程和分辨率必须一致,方便交叉校验

3.1.2 双通道数据校验逻辑

双通道不是简单地把两个值拿来平均。真正的校验逻辑是这样的:

// 伪代码:SAS 双通道校验
if (abs(ch1_angle - ch2_angle) < THRESHOLD_NORMAL) {
    // 正常状态,取平均值或主通道值
    output_angle = (ch1_angle + ch2_angle) / 2;
} else if (abs(ch1_angle - ch2_angle) < THRESHOLD_WARNING) {
    // 偏差较大,触发警告,但仍可使用
    output_angle = ch1_angle;  // 主通道优先
    set_warning_flag(SAS_DEVIATION);
} else {
    // 偏差过大,判定故障
    set_fault_flag(SAS_CHANNEL_MISMATCH);
    // 进入降级模式或安全状态
}

这里有个细节:阈值怎么定?我建议根据传感器本身的精度和噪声水平来设定。比如传感器精度是 ±0.5°,那阈值可以设在 1.5° 左右。太严容易误报,太松又起不到校验作用。

我的经验:阈值最好做成可标定的参数,不要写死在代码里。因为不同车型、不同传感器的特性不一样,量产阶段可能需要微调。

3.2 扭矩传感器冗余方案

扭矩传感器负责测量驾驶员施加在方向盘上的力矩。这个信号直接决定了系统输出多大的助力——说白了,它就是驾驶意图的「翻译官」。

扭矩传感器的冗余方案,我把它分成两类:同构冗余和异构冗余。

3.2.1 同构冗余方案

同构冗余就是两个一模一样的扭矩传感器,装在同一个位置。这种方案的好处是:

  • 硬件设计简单,两个传感器共用接口
  • 软件算法一致,容易实现
  • 成本相对较低

但问题也很明显:共因失效。比如温度漂移、电磁干扰,两个传感器可能同时出问题。

3.2.2 异构冗余方案

异构冗余是我个人比较推崇的方案。它使用两种不同原理的传感器来测量同一个物理量。比如:

  • 主传感器:应变片式扭矩传感器
  • 冗余传感器:磁致伸缩式扭矩传感器

这两种传感器的工作原理完全不同,共因失效的概率大大降低。我在一个项目中就遇到过:应变片传感器因为粘接剂老化导致输出漂移,但磁致伸缩传感器完全正常。异构冗余让系统成功识别了故障,没有进入安全停车。

注意:异构冗余虽然可靠性高,但会带来额外的开发工作量。两种传感器的标定、补偿、故障诊断逻辑都不一样,软件复杂度会翻倍。

3.3 冗余传感器故障诊断

有了冗余传感器,还得知道它什么时候坏了。故障诊断就是干这个活的。

我把故障诊断分成三个层级:

  1. 信号级诊断:检查信号是否在合理范围内
  2. 通道级诊断:检查两个通道的一致性
  3. 系统级诊断:结合其他传感器信息进行交叉验证

3.3.1 信号级诊断

这是最基础的诊断。每个传感器信号都要检查:

  • 范围检查:信号是否在物理允许的范围内?比如方向盘转角不可能超过 ±720°
  • 变化率检查:信号变化速率是否合理?比如 1ms 内转角变化 100° 就不正常
  • 通信检查:信号是否在预期的时间窗口内更新?有没有丢帧?

3.3.2 通道级诊断

两个通道的数据要互相校验。我常用的方法是:

// 通道级诊断逻辑
if (ch1_valid && ch2_valid) {
    diff = abs(ch1_value - ch2_value);
    if (diff > FAULT_THRESHOLD) {
        // 两个通道不一致,判定故障
        fault_status = SAS_FAULT_CHANNEL_MISMATCH;
    } else if (diff > WARNING_THRESHOLD) {
        // 偏差较大,但未到故障程度
        fault_status = SAS_WARNING_CHANNEL_DEVIATION;
    } else {
        fault_status = SAS_OK;
    }
} else {
    // 某个通道失效,直接判定故障
    fault_status = SAS_FAULT_CHANNEL_LOSS;
}

3.3.3 系统级诊断

这是最高层级的诊断。它利用系统中其他传感器的信息来验证 SAS 和扭矩传感器的输出是否合理。

举个例子:

  • 如果方向盘转角显示车辆在左转,但横摆角速度传感器显示车辆在右转——那肯定有问题
  • 如果扭矩传感器显示驾驶员在用力打方向,但车速传感器显示车辆静止——这也值得怀疑

这种跨传感器的逻辑校验,能发现单个传感器无法检测到的故障。

故障诊断的黄金法则:

  • 诊断要快——故障发生后必须在安全时间内检测到
  • 诊断要准——不能误报,也不能漏报
  • 诊断要稳——不能因为噪声或瞬态干扰就触发故障

3.4 传感器冗余架构总览

下面这张图展示了传感器冗余设计的整体架构。你可以看到从信号输入到故障诊断的完整链路。

传感器冗余架构总览 传感器冗余架构总览 方向盘 SAS 通道1 角度传感器 SAS 通道2 角度传感器 扭矩传感器1 应变片式 扭矩传感器2 磁致伸缩式 故障诊断模块 信号级 / 通道级 / 系统级 安全输出信号 说明:SAS 采用双通道独立芯片方案,扭矩传感器采用异构冗余方案,故障诊断模块覆盖三个层级

3.5 避坑指南

最后,分享几个我在项目中踩过的坑:

我曾经犯过的错误:

  • 供电隔离没做好:两个通道共用一个 LDO,结果 LDO 失效导致两个通道同时掉电。后来改成独立供电,问题解决。
  • 诊断阈值设得太死:量产阶段发现车辆在颠簸路面行驶时,SAS 两个通道的瞬时偏差超过了阈值,导致频繁误报。后来把阈值放宽,并加入了时间滤波。
  • 忽略了传感器老化:扭矩传感器的零漂会随着时间慢慢变大。如果不做在线补偿,最终会导致系统误判。我建议加入周期性自校准机制。

嗯,传感器冗余设计这块,核心就是一句话:别让任何一个单点故障,成为系统的致命伤。双通道、异构冗余、三级诊断,这三板斧用好了,系统的可靠性就能上一个台阶。