4、软件保护策略:ADC采样时序、数字滤波算法、阈值判断逻辑、故障标志管理
硬件保护再快,也扛不住误触发和死区时间不够用。真正让过流保护「聪明」起来的,是软件层。我见过不少工程师把全部希望压在硬件比较器上,结果电机一启动就跳保护,或者堵转时烧了管子才反应过来——说白了,软件策略没跟上。
这一章我们聊四个核心模块:ADC采样时序、数字滤波、阈值判断、故障标志管理。它们环环相扣,少一个都不行。
4.1 ADC采样时序:什么时候采,采多久
BLDC驱动里,相电流采样最常用的方法是三电阻或单电阻。不管哪种,ADC触发时刻都很有讲究。
我个人习惯把ADC采样放在PWM周期的中间点。为什么?因为开关管导通和关断瞬间会有严重的振铃,你如果在边沿采样,读到的全是噪声。
具体时序参数可以参考下表:
| 参数 | 推荐值 | 说明 |
|---|---|---|
| PWM频率 | 16~20 kHz | 避开人耳可听区 |
| ADC采样窗口 | 1~2 μs | 足够采样电容充电 |
| 采样触发点 | PWM中心点 ±0.5 μs | 避开开关噪声 |
| 采样保持时间 | ≥ 500 ns | 取决于ADC输入阻抗 |
你想想看,如果ADC采样窗口太短,采样电容没充满,读出来的值就是错的。我踩过这个坑——某次调试发现电流读数偏低,查了半天,原来是采样保持时间设成了200 ns,根本不够。
4.2 数字滤波算法:别让噪声骗了你的阈值
ADC采回来的原始数据,直接拿去判断过流?那你会被噪声折磨疯。电机运行时,PWM开关噪声、电机反电动势、甚至电源纹波都会叠加到采样信号上。
常用的数字滤波方法有三种:
- 中值滤波:连续采3~5个点,取中间值。适合去除脉冲噪声,但会引入1~2个采样周期的延迟。
- 滑动平均滤波:维护一个N点窗口,每次新数据进来,去掉最老的,算平均值。平滑效果好,但N太大会让响应变慢。
- 一阶低通滤波:y[n] = α * x[n] + (1-α) * y[n-1]。计算量最小,适合资源紧张的MCU。
我曾经在一个风扇项目里只用滑动平均,窗口设了16点。结果电机堵转时,电流已经冲到40A了,滤波输出才显示25A——等它反应过来,MOSFET已经冒烟了。嗯,从那以后我再也不敢用大窗口做保护滤波。
4.3 阈值判断逻辑:分级保护,别一刀切
过流保护不能只有一个阈值。你想想看,电机启动时的冲击电流和堵转电流完全不是一个性质。如果都用同一个阈值,要么启动时频繁误触发,要么堵转时保护太慢。
我习惯把阈值分成三级:
- 警告阈值(80%额定峰值):只记录日志,不触发保护。用于提前发现异常趋势。
- 软过流阈值(110%额定峰值):触发后降低PWM占空比,尝试恢复。如果持续超过100 ms,升级为硬过流。
- 硬过流阈值(130%额定峰值):立即关断所有PWM输出,进入故障状态。
阈值判断的伪代码大致是这样:
// 每PWM周期执行一次
if (current_sample > HARD_OC_THRESHOLD) {
fault_flags |= FAULT_HARD_OC;
PWM_disable();
return;
}
if (current_sample > SOFT_OC_THRESHOLD) {
soft_oc_counter++;
if (soft_oc_counter > SOFT_OC_TIMEOUT) {
fault_flags |= FAULT_SOFT_OC;
PWM_disable();
} else {
reduce_duty_cycle(10%); // 降占空比
}
} else {
soft_oc_counter = 0; // 电流恢复正常,清零计数器
}
4.4 故障标志管理:别让故障「卡死」系统
故障标志管理看似简单,但处理不好会出大问题。我见过一个项目,过流触发后故障标志一直不清除,导致电机再也启动不了——用户只能断电重启。
合理的故障标志管理应该包含:
- 故障锁存:一旦触发,标志位必须由软件主动清除,不能自动恢复。防止故障反复触发导致系统不稳定。
- 故障分级:可恢复故障(如软过流)和不可恢复故障(如硬过流)分开管理。
- 清除条件:故障清除前,必须满足「电流恢复正常 + 持续N个PWM周期无故障」的条件。
下面这张图展示了整个软件保护策略的流程:
故障标志的管理状态机,我一般这样设计:
| 状态 | 触发条件 | 恢复条件 | 动作 |
|---|---|---|---|
| 正常运行 | — | — | 正常PWM输出 |
| 软过流 | 电流 > 软阈值 | 电流 < 软阈值 × 0.9 持续10个周期 | 降占空比10% |
| 硬过流 | 电流 > 硬阈值 | 手动清除故障标志 | 立即关PWM |
| 故障锁存 | 硬过流触发 | 用户确认 + 清除标志 | 保持PWM关闭 |
最后说一句:软件保护策略不是写完就完事的。我每次做完一个项目,都会花至少两天做极限测试——故意短路、堵转、电源抖动,看软件能不能扛住。你想想看,如果连测试都不敢做,怎么敢把产品交到客户手里?