第1章:传感器自检与故障隔离
各位同事,今天我们来聊聊飞控系统里最基础、也最要命的一块——传感器自检与故障隔离。说白了,就是飞机上天前,得先确认自己的「眼睛」和「耳朵」没毛病。
我做了十几年飞控,见过太多因为传感器故障引发的「惊魂时刻」。有一次在试飞中,ADC突然报出异常的空速值,要不是交叉比较逻辑及时切断了故障源,后果不堪设想。所以这一章,咱们得把ADC自检、INS自检、还有交叉比较与投票逻辑,掰开了揉碎了讲清楚。
1.1 大气数据计算机(ADC)自检
ADC负责测量空速、气压高度、迎角这些关键参数。它要是坏了,飞控系统就像人没了触觉。
ADC自检通常分三步:
- 上电自检(POST):通电后立即执行,检查内部电路、传感器接口、电源状态。耗时约1-2秒。
- 连续自检(CBIT):飞行中持续运行,监控数据有效性、变化率是否合理。
- 维护自检(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("交叉比较无法达成一致")
一个小技巧:交叉比较的阈值不要用固定值。我习惯用「动态阈值」——根据当前飞行状态(比如高空低速时阈值小一点,低空高速时阈值大一点)。这样既能提高故障检测灵敏度,又能避免误报。
最后,我想强调一点:传感器自检和交叉比较不是孤立的。它们是一个闭环——自检发现可疑信号,交叉比较确认故障,然后隔离故障源。这个流程在飞控软件里是最高优先级的任务,必须保证实时性。
好了,这一章的内容就到这里。记住:传感器是飞控系统的「感官」,感官出了问题,再聪明的「大脑」也白搭。下一章我们会聊聊执行机构的自检与故障隔离,到时候见。