4. 过流保护阈值设定:峰值电流保护、有效值保护、软件限幅保护、硬件比较器保护
过流保护这个话题,说白了就是给电机驱动系统装个「保险丝」。但跟家里那个烧了就得换的保险丝不一样,电机控制里的过流保护是分层次、分速度、分精度的。我这些年调试过的炸机案例,十有八九都跟保护阈值没设好有关系。
今天咱们就把这四种保护方式掰开揉碎了讲。峰值电流保护、有效值保护、软件限幅保护、硬件比较器保护——它们不是互相替代的关系,而是协同作战的关系。
核心观点:一套成熟的过流保护方案,一定是「硬件做最后防线,软件做精细管理」。硬件比较器负责在微秒级切断灾难,软件限幅负责在毫秒级平滑限制,峰值和有效值保护则覆盖不同的热应力场景。
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.5 倍额定峰值电流,响应最快,负责「保命」。
- 峰值电流保护:阈值设在 1.3 倍额定峰值电流,比硬件低一档,负责「预警+降功率」。
- 软件限幅保护:动态限幅,正常运行时把电流限制在 1.0-1.1 倍额定值,负责「日常管理」。
- 有效值保护:热模型积分,阈值设在 1.0 倍额定 RMS 电流,负责「防止热积累」。
举个例子:电机突然堵转,电流瞬间飙升。硬件比较器在 0.5 μs 内封锁 PWM,IGBT 保住了。同时峰值电流保护检测到异常,记录故障日志。软件限幅因为 PWM 已经被封锁,自然不再输出。有效值保护则开始计算热积累,等故障排除后,如果绕组温度还没降下来,有效值保护会阻止立即满功率重启。
避坑指南:我曾经在一个项目中,把硬件比较器的阈值设得跟峰值电流保护一样高。结果有一次电网波动导致母线电压骤降,电流瞬间冲高,两个保护同时触发,互相干扰,系统直接死机。后来我把硬件比较器阈值调高了 10%,让软件先处理,硬件只做最后兜底,系统就稳定了。
4.6 阈值标定:别靠猜,靠实验
阈值设多少,不是拍脑袋定的。我建议按以下步骤标定:
- 第一步:查电机手册,获取额定电流、峰值电流、热时间常数。
- 第二步:在台架上跑额定负载,记录稳态电流波形,确认 ADC 采样值与实际电流的对应关系。
- 第三步:逐步增加负载,直到电机接近保护边界,记录此时的电流值作为参考。
- 第四步:留出 10%-15% 的裕量,写入阈值参数。
- 第五步:做极限测试:短路测试、堵转测试、急加减速测试,验证保护是否可靠。
重要提醒:阈值标定完成后,一定要做「最坏情况分析」。比如母线电压最高时、温度最低时、电流采样误差最大时,保护是否还能可靠动作?我见过一个案例,温度从 25°C 降到 -10°C 时,电流采样电阻的温漂导致实际保护阈值偏移了 12%,差点出事故。所以,采样电路的温漂补偿一定要做。
好了,四种过流保护阈值设定的内容就这些。记住一个原则:硬件做底线,软件做管理,两者配合才能既保安全又不误动作。下次调试时,不妨按这个思路重新审视你的保护配置,说不定能发现一些潜在问题。