4. 基于电流幅值的检测法:阈值设定、采样窗口、低通滤波处理
电流幅值检测法,说白了就是盯着电机三相电流的峰值或有效值。正常运行时电流在一个范围内波动,一旦堵转,电流会瞬间飙升。这个方法实现简单,硬件成本低,很多低成本驱动器都在用。
但我得说句实话——这个方法虽然基础,想做好却不容易。我早期一个项目就吃过亏,阈值设得太死,结果频繁误报,产线差点把我电话打爆。后来才慢慢摸清楚里面的门道。
4.1 阈值设定:不是拍脑袋的事
阈值设定是整个方法的核心。设高了,堵转检测不灵敏,电机可能烧了才报警;设低了,正常负载波动就触发保护,设备根本没法用。
我个人习惯分三步走:
- 标称电流摸底:先测电机在额定负载、最大负载下的稳态电流峰值。这个数据是基准线。
- 留出安全余量:一般取额定电流的 1.5~2.0 倍作为堵转阈值。但这不是死规矩,得看应用场景。
- 动态微调:如果负载变化大,阈值也得跟着变。我做过一个风机项目,风道堵塞时电流只涨 30%,但确实是堵转。这时候固定阈值就不灵了。
| 应用场景 | 推荐阈值倍数 | 说明 |
|---|---|---|
| 恒转矩负载(如传送带) | 1.5 ~ 1.8 倍 | 负载波动小,阈值可以设紧一些 |
| 风机/泵类 | 1.8 ~ 2.2 倍 | 启动电流大,需要避开 |
| 高惯性负载(如飞轮) | 2.0 ~ 2.5 倍 | 加速过程电流本身就高 |
| 精密伺服 | 1.2 ~ 1.5 倍 | 保护要求高,配合速度环判断 |
4.2 采样窗口:选多长才合适?
采样窗口决定了你看多长时间的电流数据来做判断。窗口太短,容易受噪声干扰;窗口太长,响应速度跟不上。
我一般这样选:
- 基波周期法:取一个完整电周期(比如 50Hz 对应 20ms)内的电流峰值。适合稳态运行。
- 滑动窗口法:用 FIFO 缓存最近 N 个采样点,实时计算有效值。窗口长度通常取 1~2 个电周期。
- 半周期法:只取半个周期,响应更快,但抗噪能力弱一些。
你想想看,如果 PWM 开关频率是 10kHz,每个电周期有 200 个采样点。窗口设 400 个点(2 个周期),计算量不大,效果也稳。我习惯用这个配置做起点。
4.3 低通滤波处理:把噪声滤干净
电流信号里全是高频噪声——PWM 开关噪声、死区效应、电流采样毛刺。直接拿原始数据做判断,结果就是频繁误报。
低通滤波是必须的。我常用的方案有两种:
4.3.1 一阶 RC 数字滤波器
最简单,也最实用。公式就一行:
y[n] = α * x[n] + (1 - α) * y[n-1]
其中 α 是滤波系数,范围 0~1。α 越小,滤波越强,但响应也越慢。
α 怎么选?我有个经验公式:
α = 1 / (1 + fc * Ts * 2π)
fc 是截止频率,Ts 是采样周期。比如我想把 1kHz 以上的噪声滤掉,采样周期 100μs,算出来 α ≈ 0.14。
4.3.2 滑动平均滤波器
另一种常用方案,适合嵌入式实现:
// 滑动平均,窗口长度 N=16
static uint16_t buf[16];
static uint8_t idx = 0;
static uint32_t sum = 0;
sum -= buf[idx];
buf[idx] = adc_value;
sum += buf[idx];
idx = (idx + 1) & 0x0F;
filtered = sum >> 4; // 除以 16
这个实现没有浮点运算,全是整数移位,跑在低成本 MCU 上毫无压力。窗口长度取 2 的幂次,除法用移位代替,效率很高。
4.4 整体检测流程
把上面三块串起来,就是完整的检测流程。我画了张图,你看一眼就明白了:
流程不复杂,但每一步的参数都得仔细调。我建议你在调试阶段把原始电流、滤波后电流、有效值、阈值这四个量都通过 DAC 或串口输出,看着波形调参数,效率最高。
4.5 实际项目中的坑
最后分享几个我踩过的坑:
- 启动电流误触发:电机启动时电流可能达到额定值的 5~8 倍。解决办法是启动后延时 500ms 再使能检测,或者用速度环辅助判断。
- 单相堵转漏检:如果只检测一相电流,另一相堵转可能漏掉。我建议三相都采,取最大值做判断。
- 温度漂移:MOSFET 导通电阻随温度升高而增大,同样负载下电流会下降。阈值最好做温度补偿,或者留够余量。