3、执行机构故障分析:电机堵转检测、舵面卡滞判断、螺旋桨动平衡问题

执行机构,说白了就是飞控的「手脚」。电机、舵面、螺旋桨,任何一个出问题,飞机都得抖三抖。我这些年调试过的eVTOL,十次炸机有八次是执行机构先出毛病。今天咱们就聊聊这三个最常见的坑:电机堵转、舵面卡滞、螺旋桨动平衡。

3.1 电机堵转检测

电机堵转,就是转子被卡住转不动了。这时候电流会飙升,温度暴涨,几秒钟就能烧掉MOS管。我见过最惨的一次,堵转后电调直接冒烟,整块飞控板都熏黑了。

3.1.1 堵转的物理特征

  • 电流异常:正常巡航电流的3-5倍,且持续不降
  • 反电动势消失:电机三相绕组的反电动势信号归零
  • 转速反馈异常:期望转速与实际转速偏差超过30%
  • 温度飙升:绕组温度每秒上升5-10℃

核心判断逻辑:我习惯用「电流+转速」双重校验。单看电流容易误判——大油门爬升时电流也大,但转速是正常的。只有电流大且转速低,才说明真堵了。

3.1.2 检测算法实现

下面是我在项目中用过的堵转检测代码片段。注意看阈值怎么设——这个值跟电机型号、桨叶尺寸都有关,不能照搬。

// 电机堵转检测函数
// 返回值:0-正常,1-疑似堵转,2-确认堵转
int motor_stall_check(uint8_t motor_id, float current, float rpm_actual, float rpm_target) {
    // 阈值参数(需根据实际电机标定)
    const float CURRENT_THRESHOLD = 15.0f;      // 电流阈值(A)
    const float RPM_DEVIATION_RATIO = 0.3f;     // 转速偏差比
    const uint32_t STALL_TIME_MS = 200;         // 确认时间(ms)
    
    static uint32_t stall_counter[8] = {0};     // 每个电机的堵转计时
    
    // 条件1:电流超标
    if (current < CURRENT_THRESHOLD) {
        stall_counter[motor_id] = 0;
        return 0;  // 电流正常,肯定没堵
    }
    
    // 条件2:转速偏差过大
    float rpm_error = fabs(rpm_actual - rpm_target) / rpm_target;
    if (rpm_error < RPM_DEVIATION_RATIO) {
        stall_counter[motor_id] = 0;
        return 0;  // 转速跟得上,只是负载大
    }
    
    // 两个条件都满足,开始计时
    stall_counter[motor_id] += 10;  // 假设每10ms调用一次
    
    if (stall_counter[motor_id] >= STALL_TIME_MS) {
        return 2;  // 确认堵转
    }
    
    return 1;  // 疑似堵转,继续观察
}

我的经验:阈值别设太死。我吃过一次亏——把电流阈值设成10A,结果冬天电池内阻大,启动瞬间电流冲到12A,直接误报堵转。后来改成15A,留了50%余量,再没误报过。

3.2 舵面卡滞判断

舵面卡滞比电机堵转更隐蔽。电机堵转有电流飙升这种明显信号,舵面卡滞可能只是「响应慢半拍」。你想想看,如果副翼卡了5度,飞控还在拼命调PID,结果就是震荡发散。

3.2.1 卡滞的典型表现

故障类型 位置反馈 电流特征 控制效果
机械卡死 完全不动 持续大电流 无响应
铰链涩滞 缓慢移动 间歇性尖峰 响应滞后
连杆松动 抖动漂移 正常 控制精度差

3.2.2 判断方法

我个人最常用的方法是「期望位置 vs 实际位置」的偏差积分。不是看瞬时偏差,而是看一段时间内的累积偏差。为什么?因为瞬时偏差可能是风扰,但累积偏差一定是舵面本身的问题。

// 舵面卡滞检测
// 原理:计算期望位置与实际位置的累积误差
float servo_jam_detection(float setpoint, float feedback, float dt) {
    static float error_integral = 0.0f;
    const float INTEGRAL_THRESHOLD = 50.0f;  // 累积阈值(度·秒)
    const float DEADBAND = 2.0f;             // 死区(度)
    
    float error = setpoint - feedback;
    
    // 死区处理:小偏差不累积
    if (fabs(error) < DEADBAND) {
        error_integral *= 0.95f;  // 缓慢衰减
    } else {
        error_integral += error * dt;
    }
    
    // 限幅
    if (error_integral > INTEGRAL_THRESHOLD) {
        error_integral = INTEGRAL_THRESHOLD;
        return 1.0f;  // 判定卡滞
    }
    
    return 0.0f;
}

注意:积分阈值要根据舵面类型调整。升降舵的负载变化大,阈值可以设高些;副翼的负载相对稳定,阈值要设低些。我曾经把副翼的阈值设得跟升降舵一样,结果巡航时副翼轻微卡滞没检测出来,差点出事。

3.3 螺旋桨动平衡问题

螺旋桨动平衡,说白了就是桨叶转起来后振动大不大。这个问题最容易被忽视——很多工程师觉得「桨叶没裂就能用」。嗯,我以前也这么想,直到有一次试飞,振动大到飞控的IMU数据全被污染了。

3.3.1 动平衡的量化指标

  • 振动加速度:电机座处测量,通常要求 < 0.5g
  • 振动频率:主要成分应为1倍转速频率(1P)
  • 相位稳定性:振动相位波动 < ±10°

3.3.2 现场快速判断方法

没有振动台怎么办?我教你一个土办法——用手摸。不是开玩笑。把飞机固定好,油门推到50%,用手轻轻触摸电机座附近的机身结构。如果感觉像「手机振动」,说明平衡还行;如果感觉像「按摩椅」,那肯定有问题。

更精确的做法:用加速度计采集数据,做FFT分析。重点关注1P(转速基频)和2P(两倍频)的幅值比。正常情况下,1P占主导,2P应该比1P低20dB以上。如果2P跟1P差不多,说明桨叶有不对称磨损或变形。

3.3.3 动平衡校正流程

  1. 粗测:全油门运行10秒,记录振动数据
  2. 分析:找出振动最大的频率成分
  3. 配重:在桨叶轻的一侧贴平衡胶带(每片不超过3层)
  4. 复测:再次运行,确认振动降低50%以上
  5. 验证:在不同转速下测试(30%、60%、100%油门)

避坑指南:我曾经遇到过一种情况——地面测振动很小,但上天后振动突然变大。后来发现是桨尖在高速旋转时产生了气弹耦合。所以,有条件的话一定要做空中振动测试,地面数据只能作为参考。

3.4 本章知识体系

下面这张图总结了执行机构故障分析的三个核心维度。你可以把它当作排查时的检查清单。

执行机构故障分析知识体系 电机堵转检测 舵面卡滞判断 螺旋桨动平衡 检测特征 电流异常 反电动势消失 转速偏差大 判断方法 位置偏差积分 电流尖峰检测 响应滞后分析 量化指标 振动加速度 1P/2P幅值比 相位稳定性 处理措施 立即降油门 切换冗余电机 触发安全降落 处理措施 增大死区 切换控制通道 机械润滑/更换 处理措施 贴平衡胶带 更换桨叶 动平衡机校正 核心原则 早发现、早隔离、早处理。不要等故障扩大再动手。 每个执行机构都要有独立的健康监测通道。

好了,执行机构这块就聊到这儿。记住一句话:飞控再聪明,也架不住执行机构「装死」。平时多花点时间做故障注入测试,比出事后再排查要省心得多。


公众号:蓝海资料掘金营,微信deep3321