4. 过流保护阈值设定:峰值电流保护、有效值保护、软件限幅保护、硬件比较器保护

过流保护这个话题,说白了就是给电机驱动系统装个「保险丝」。但跟家里那个烧了就得换的保险丝不一样,电机控制里的过流保护是分层次、分速度、分精度的。我这些年调试过的炸机案例,十有八九都跟保护阈值没设好有关系。

今天咱们就把这四种保护方式掰开揉碎了讲。峰值电流保护、有效值保护、软件限幅保护、硬件比较器保护——它们不是互相替代的关系,而是协同作战的关系。

核心观点:一套成熟的过流保护方案,一定是「硬件做最后防线,软件做精细管理」。硬件比较器负责在微秒级切断灾难,软件限幅负责在毫秒级平滑限制,峰值和有效值保护则覆盖不同的热应力场景。

过流保护四层架构 第1层:硬件比较器保护 响应时间:< 1 μs | 动作方式:直接封锁 PWM | 不可绕过 第2层:峰值电流保护 响应时间:1-10 μs | 动作方式:ADC 采样 + 软件比较 | 可配置阈值 第3层:软件限幅保护 响应时间:10-100 μs | 动作方式:限制电流环输出 | 平滑降功率 第4层:有效值保护 响应时间:ms 级 | 动作方式:热模型积分 | 防止热积累损坏 ⚠ 四层保护逐级响应,越往下响应越慢但保护越精细。硬件层是最后一道防线,绝不可省略。 软件限幅是日常运行的主力,有效值保护则决定了电机能扛多久。

4.1 峰值电流保护:盯住每一个开关周期的尖峰

峰值电流保护,顾名思义,就是盯着电流波形里那个最高的尖峰。在弱磁区,电流波形往往不是标准的正弦波,谐波分量会让峰值明显高于有效值折算出来的数值。

我个人习惯把峰值电流保护的阈值设在硬件比较器阈值的 80%-90%。为什么?因为要给硬件保护留出回旋余地,不能让软件和硬件在同一个点打架。

实战经验:我在调试一个 7.5 kW 永磁同步电机时,峰值电流保护阈值设得太接近硬件比较器阈值。结果电机启动瞬间,软件保护还没反应过来,硬件先跳了。后来我把软件阈值下调了 10%,问题解决。记住:软件保护是「预警」,硬件保护是「最后防线」,两者之间必须有间隙。

峰值电流保护的实现方式通常有两种:

  • ADC 同步采样法:在 PWM 载波周期的最低点或最高点采样,获取相电流瞬时值。这种方法精度高,但依赖 ADC 触发时序。
  • 比较器中断法:利用 MCU 内部的模拟比较器,将电流信号与参考电压比较,超过阈值立即触发中断。响应速度比 ADC 快一个数量级。
// 峰值电流保护示例代码(基于 ADC 中断)
#define PEAK_CURRENT_THRESHOLD  45.0f  // 峰值电流阈值,单位 A

void ADC_IRQHandler(void) {
    float ia = get_phase_current_A();
    float ib = get_phase_current_B();
    float ic = get_phase_current_C();

    // 取三相电流绝对值最大值
    float peak = fmax(fabs(ia), fmax(fabs(ib), fabs(ic)));

    if (peak > PEAK_CURRENT_THRESHOLD) {
        // 触发峰值保护
        motor_control_flags.peak_overcurrent = 1;
        // 立即降低电流环输出
        current_loop_output *= 0.5f;
        // 记录故障信息
        fault_log.peak_current_value = peak;
        fault_log.timestamp = get_system_tick();
    }
}

4.2 有效值保护:算热账,别让电机烧了

有效值保护,算的是「热账」。电机铜损跟电流有效值的平方成正比,所以真正决定绕组温升的,是 RMS 电流,不是峰值电流。

你想想看,一个电机可能峰值电流偶尔冲到 50A 但持续时间只有几微秒,绕组根本来不及发热。但如果 RMS 电流持续在 30A 跑上几分钟,绝缘层可能就扛不住了。

有效值保护的核心是热模型。我一般用一阶低通滤波器来模拟热积累过程:

// 有效值电流热模型计算
#define RMS_THRESHOLD      25.0f   // 有效值阈值,单位 A
#define THERMAL_TC         0.05f   // 热时间常数,与绕组热容相关

static float thermal_state = 0.0f; // 热状态变量,0~1

void rms_protection_task(void) {
    float ia_rms = get_rms_current(); // 由 ADC 数据计算 RMS

    // 一阶热模型:当前热状态 = 上一状态 + 时间常数 * (当前电流占比 - 上一状态)
    float current_ratio = (ia_rms * ia_rms) / (RMS_THRESHOLD * RMS_THRESHOLD);
    thermal_state += THERMAL_TC * (current_ratio - thermal_state);

    // 限幅
    if (thermal_state > 1.0f) thermal_state = 1.0f;
    if (thermal_state < 0.0f) thermal_state = 0.0f;

    // 判断是否过温保护
    if (thermal_state >= 0.95f) {
        motor_control_flags.rms_overcurrent = 1;
        // 执行降额运行
        reduce_power(thermal_state);
    }
}

注意:热时间常数 THERMAL_TC 不是随便拍脑袋定的。我见过有人直接抄别人的参数,结果电机在额定工况下频繁误保护。正确的做法是:根据电机绕组的铜质量、比热容和散热条件,通过实验标定。简单点说,让电机在 1.2 倍额定电流下运行,记录温升曲线,反推时间常数。

4.3 软件限幅保护:温柔地限制,而不是粗暴地切断

软件限幅保护,说白了就是给电流环的输出加个「软天花板」。它不是等电流超了再跳闸,而是在电流接近阈值时就主动限制。

我在项目中常用的做法是:在电流环 PI 输出之后、PWM 调制之前,插入一个限幅函数。这个限幅值不是固定的,而是根据母线电压、转速、温度等状态动态调整。

// 软件限幅保护:动态限制电流环输出
#define CURRENT_LIMIT_BASE    40.0f   // 基础限幅值,单位 A
#define DERATING_FACTOR       0.8f    // 降额系数

float apply_current_limit(float id_ref, float iq_ref, float bus_voltage, float motor_speed) {
    float limit = CURRENT_LIMIT_BASE;

    // 母线电压跌落时降额
    if (bus_voltage < 280.0f) {
        limit *= (bus_voltage / 280.0f);
    }

    // 高速区弱磁时降额
    if (motor_speed > 3000.0f) {
        limit *= DERATING_FACTOR;
    }

    // 对 dq 轴电流分别限幅
    float id_limited = clamp(id_ref, -limit, limit);
    float iq_limited = clamp(iq_ref, -limit, limit);

    return sqrt(id_limited*id_limited + iq_limited*iq_limited);
}

嗯,这里要注意:软件限幅不能做得太激进。我曾经在一个项目里把限幅斜率设得太陡,结果电流环输出突变,导致转矩脉动,整个系统都在抖。后来改成了平滑的斜坡限幅,每 100 μs 只允许限幅值变化 1A,问题就解决了。

4.4 硬件比较器保护:最后一道防线,不能省

硬件比较器保护,是真正的「断头台」。它不经过 CPU,不经过软件判断,直接比较电流信号和参考电压,一旦超过阈值,立即封锁 PWM 输出。

我见过一些低成本方案,为了省几毛钱,把硬件比较器省掉了,全靠软件 ADC 采样做保护。结果怎么样?有一次母线短路,电流从 0 飙到 200A 只用了 2 μs,ADC 还没开始采样,IGBT 已经炸了。

保护方式 响应时间 精度 能否绕过 典型应用场景
硬件比较器 < 1 μs 低(±5%) 不可绕过 短路保护、IGBT 直通保护
峰值电流保护 1-10 μs 中(±2%) 可配置 开关周期过流、谐波尖峰
软件限幅保护 10-100 μs 高(±1%) 可配置 正常运行时的电流限制
有效值保护 ms 级 高(±1%) 可配置 热保护、长时间过载

硬件比较器设计要点:

  • 阈值电压通常设为 1.2-1.5 倍额定峰值电流对应的电压值
  • 必须加硬件滤波(RC 低通),防止噪声误触发
  • 动作后需要软件手动清除锁存状态,不能自动恢复
  • 建议在比较器输出端加一个 LED 指示灯,方便调试时观察

4.5 四种保护的协同策略:怎么搭配才合理?

四种保护不是各自为战,而是层层递进的关系。我一般这样配置:

  1. 硬件比较器:阈值设在 1.5 倍额定峰值电流,响应最快,负责「保命」。
  2. 峰值电流保护:阈值设在 1.3 倍额定峰值电流,比硬件低一档,负责「预警+降功率」。
  3. 软件限幅保护:动态限幅,正常运行时把电流限制在 1.0-1.1 倍额定值,负责「日常管理」。
  4. 有效值保护:热模型积分,阈值设在 1.0 倍额定 RMS 电流,负责「防止热积累」。

举个例子:电机突然堵转,电流瞬间飙升。硬件比较器在 0.5 μs 内封锁 PWM,IGBT 保住了。同时峰值电流保护检测到异常,记录故障日志。软件限幅因为 PWM 已经被封锁,自然不再输出。有效值保护则开始计算热积累,等故障排除后,如果绕组温度还没降下来,有效值保护会阻止立即满功率重启。

避坑指南:我曾经在一个项目中,把硬件比较器的阈值设得跟峰值电流保护一样高。结果有一次电网波动导致母线电压骤降,电流瞬间冲高,两个保护同时触发,互相干扰,系统直接死机。后来我把硬件比较器阈值调高了 10%,让软件先处理,硬件只做最后兜底,系统就稳定了。

4.6 阈值标定:别靠猜,靠实验

阈值设多少,不是拍脑袋定的。我建议按以下步骤标定:

  • 第一步:查电机手册,获取额定电流、峰值电流、热时间常数。
  • 第二步:在台架上跑额定负载,记录稳态电流波形,确认 ADC 采样值与实际电流的对应关系。
  • 第三步:逐步增加负载,直到电机接近保护边界,记录此时的电流值作为参考。
  • 第四步:留出 10%-15% 的裕量,写入阈值参数。
  • 第五步:做极限测试:短路测试、堵转测试、急加减速测试,验证保护是否可靠。

重要提醒:阈值标定完成后,一定要做「最坏情况分析」。比如母线电压最高时、温度最低时、电流采样误差最大时,保护是否还能可靠动作?我见过一个案例,温度从 25°C 降到 -10°C 时,电流采样电阻的温漂导致实际保护阈值偏移了 12%,差点出事故。所以,采样电路的温漂补偿一定要做。

好了,四种过流保护阈值设定的内容就这些。记住一个原则:硬件做底线,软件做管理,两者配合才能既保安全又不误动作。下次调试时,不妨按这个思路重新审视你的保护配置,说不定能发现一些潜在问题。