第1章:传感器自检与故障隔离

各位同事,今天我们来聊聊飞控系统里最基础、也最要命的一块——传感器自检与故障隔离。说白了,就是飞机上天前,得先确认自己的「眼睛」和「耳朵」没毛病。

我做了十几年飞控,见过太多因为传感器故障引发的「惊魂时刻」。有一次在试飞中,ADC突然报出异常的空速值,要不是交叉比较逻辑及时切断了故障源,后果不堪设想。所以这一章,咱们得把ADC自检、INS自检、还有交叉比较与投票逻辑,掰开了揉碎了讲清楚。

1.1 大气数据计算机(ADC)自检

ADC负责测量空速、气压高度、迎角这些关键参数。它要是坏了,飞控系统就像人没了触觉。

ADC自检通常分三步:

  1. 上电自检(POST):通电后立即执行,检查内部电路、传感器接口、电源状态。耗时约1-2秒。
  2. 连续自检(CBIT):飞行中持续运行,监控数据有效性、变化率是否合理。
  3. 维护自检(MBIT):地面维护时触发,深度测试传感器精度和通道一致性。

核心要点:ADC自检必须覆盖静压孔、总压孔、温度传感器的物理完整性。我遇到过一架飞机,静压孔被胶带堵了,上电自检居然通过了——因为电路没问题,但气路堵了。后来我们在自检逻辑里加了「气压变化率检测」,才堵住这个漏洞。

ADC自检的典型代码逻辑(伪代码):

// ADC上电自检流程
function ADC_PowerOnSelfTest():
    // 1. 检查电源电压
    if (Vcc < 4.75V or Vcc > 5.25V):
        return FAILURE("电源异常")
    
    // 2. 检查传感器通信
    if (I2C_Check(ADDR_ADC) == FALSE):
        return FAILURE("通信故障")
    
    // 3. 读取内部自检寄存器
    status = ReadRegister(REG_SELF_TEST)
    if (status != 0xAA):
        return FAILURE("内部自检失败")
    
    // 4. 检查数据合理性
    altitude = ReadAltitude()
    if (altitude < -500 or altitude > 11000):
        return FAILURE("高度数据异常")
    
    return PASS

个人经验:我建议在ADC自检中增加「交叉通道校验」。如果飞机有双套ADC,让它们互相读一下对方的数据。曾经有一次,单套ADC自检全通过,但两套ADC的读数差了20%——后来发现是其中一套的静压管路有微小泄漏。

1.2 惯性导航系统(INS)自检

INS是飞控的「平衡感」来源。它用陀螺仪和加速度计测量角速度和线加速度。INS自检比ADC复杂得多,因为涉及机械和光学器件。

INS自检的关键项目:

自检项目 检测内容 典型故障
陀螺仪漂移检测 静止状态下角速度输出是否接近零 陀螺仪零偏过大
加速度计偏置检测 静止状态下加速度计输出是否接近1g(重力) 加速度计零偏异常
温度补偿验证 不同温度下传感器输出是否稳定 温度补偿失效
对准精度检查 初始对准后航向误差是否在允许范围内 对准失败或精度不足

嗯,这里要注意:INS自检最怕的是「软故障」。什么叫软故障?就是传感器本身没坏,但受温度或振动影响,输出开始慢慢漂移。这种故障自检很难发现,得靠后面的交叉比较来揪出来。

避坑指南:我曾经遇到一个案例,INS自检全部通过,但飞机起飞后10分钟,航向开始缓慢漂移。最后查出来是陀螺仪的加热器控制回路有间歇性故障。从那以后,我要求在INS自检中加入「加热器电流监测」——虽然不在标准规范里,但确实管用。

1.3 传感器交叉比较与投票逻辑

这是飞控系统最核心的容错机制。说白了,就是多个传感器互相监督,少数服从多数。

典型的交叉比较策略:

  • 三余度比较:三个同类型传感器,两两比较差值。如果某个传感器与其他两个的差值都超过阈值,就标记为故障。
  • 中值选择:三个传感器数据排序,取中间值作为输出。这样即使一个传感器坏了,输出也不会被带偏。
  • 一致性检查:不同类型传感器之间互相验证。比如用INS的垂直加速度和ADC的气压高度变化率来互相校验。

投票逻辑的决策矩阵:

传感器A 传感器B 传感器C 投票结果
正常 正常 正常 取三值平均
正常 正常 故障 取A、B平均
正常 故障 正常 取A、C平均
故障 正常 正常 取B、C平均
正常 故障 故障 仅用A,发出告警
故障 故障 故障 系统降级,切换备份

核心原则:投票逻辑不能「一刀切」。阈值设得太严,容易误报;设得太松,故障隔离不及时。我个人习惯的做法是:先做「速率一致性检查」——如果两个传感器的变化趋势相反,那肯定有一个坏了,不用等差值超阈值。

你想想看,如果三个传感器里有两个同时故障,投票逻辑还能正常工作吗?嗯,这就是为什么我们还要设计「非相似余度」——比如用ADC和INS来互相验证,因为它们的工作原理完全不同,同时出同样故障的概率极低。

交叉比较的伪代码示例:

// 三余度空速交叉比较
function CrossCompare_Airspeed(speed1, speed2, speed3):
    // 计算两两差值
    diff12 = abs(speed1 - speed2)
    diff13 = abs(speed1 - speed3)
    diff23 = abs(speed2 - speed3)
    
    // 阈值设定(通常为5节或3%)
    THRESHOLD = 5.0
    
    // 投票逻辑
    if (diff12 < THRESHOLD and diff13 < THRESHOLD and diff23 < THRESHOLD):
        // 全部正常,取平均值
        return (speed1 + speed2 + speed3) / 3.0
    
    else if (diff12 < THRESHOLD and diff13 > THRESHOLD and diff23 > THRESHOLD):
        // 传感器3异常
        return (speed1 + speed2) / 2.0
    
    else if (diff12 > THRESHOLD and diff13 < THRESHOLD and diff23 > THRESHOLD):
        // 传感器2异常
        return (speed1 + speed3) / 2.0
    
    else if (diff12 > THRESHOLD and diff13 > THRESHOLD and diff23 < THRESHOLD):
        // 传感器1异常
        return (speed2 + speed3) / 2.0
    
    else:
        // 无法确定故障源,系统降级
        return FAILURE("交叉比较无法达成一致")

一个小技巧:交叉比较的阈值不要用固定值。我习惯用「动态阈值」——根据当前飞行状态(比如高空低速时阈值小一点,低空高速时阈值大一点)。这样既能提高故障检测灵敏度,又能避免误报。

最后,我想强调一点:传感器自检和交叉比较不是孤立的。它们是一个闭环——自检发现可疑信号,交叉比较确认故障,然后隔离故障源。这个流程在飞控软件里是最高优先级的任务,必须保证实时性。

好了,这一章的内容就到这里。记住:传感器是飞控系统的「感官」,感官出了问题,再聪明的「大脑」也白搭。下一章我们会聊聊执行机构的自检与故障隔离,到时候见。


专注资料整理