1. 过流保护基础:什么是无感启动过流保护?为什么需要它?
大家好,我是你们这节课的讲师。咱们直接开门见山——无感启动过流保护,这名字听着挺长,其实核心就两件事:怎么在没位置传感器的情况下把电机转起来,以及转起来的过程中别让电流把功率管炸了。
我个人习惯把这个问题拆成两个层面来看:一是“无感启动”本身有多脆弱,二是“过流保护”为什么在启动阶段特别容易失效。搞懂了这两点,后面的调参才有方向。
1.1 无感启动的特殊性
有传感器的电机启动,说白了就是“我知道转子在哪儿,直接给对应的相通电就行”。但无感启动不一样——电机静止时,反电动势为零,你根本不知道转子朝哪个方向。
所以大部分无感启动算法都会走这么几步:
- 预定位:先给某一相通电,强行把转子拉到已知位置。
- 开环加速:在开环状态下,按预设的 V/F 曲线把转速提上去。
- 切换闭环:等反电动势足够大,切换到基于观测器的闭环控制。
这里有个坑——开环加速阶段,电机实际上处于“半失控”状态。你想想看,转子位置是猜的,电流环是开环给的,负载稍微变一下,电流就可能瞬间飙上去。
1.2 什么是无感启动过流保护?
说白了,就是在电机从静止到进入闭环这段时间里,实时监测相电流或母线电流,一旦超过设定阈值就立刻采取动作——通常是封锁 PWM 或降频重启。
但这里有个关键区别:启动过流保护 ≠ 运行过流保护。
| 对比项 | 运行过流保护 | 启动过流保护 |
|---|---|---|
| 电流特征 | 相对稳定,谐波可控 | 冲击大,含定位脉冲 |
| 保护响应时间 | 可放宽到 ms 级 | 需要 μs 级快速响应 |
| 阈值设定依据 | 额定电流 × 系数 | 启动峰值电流 + 余量 |
| 误触发风险 | 低 | 高(容易误保护导致启动失败) |
| 保护后恢复策略 | 直接停机或降额 | 通常需要重试启动流程 |
你看,启动阶段的保护其实更苛刻——既要快,又不能太灵敏。太灵敏了,稍微一个电流尖峰就保护,电机永远起不来;太迟钝了,功率管说烧就烧。
1.3 为什么需要它?三个真实理由
我见过不少工程师觉得“反正有硬件过流保护,软件做不做无所谓”。嗯,这话只对了一半。硬件保护是最后一道防线,但它的阈值通常设得比较高(比如 2~3 倍额定电流),而且动作后往往直接锁死,需要人工复位。
软件过流保护的价值在于:
- 保护更精细:可以根据启动阶段的不同状态动态调整阈值。比如预定位阶段电流可以放宽,切换瞬间要收紧。
- 恢复更智能:软件检测到过流后,可以自动降频重试,而不是像硬件那样直接“死给你看”。
- 诊断更方便:记录过流发生时的电流值、角度、转速,方便你分析到底是负载问题还是参数问题。
我个人认为: 硬件过流保护是“保底”,软件过流保护是“保体验”。两者缺一不可。尤其是无感启动这种对电流冲击敏感的场景,软件保护做得好不好,直接决定了产品能不能量产。
1.4 核心知识框架
为了让你对整个章节的知识体系有个直观印象,我画了张图。这张图也是咱们后续 30 章内容的总纲。
1.5 一个简单的保护逻辑示例
说了这么多理论,咱们看一段实际代码。这是我早期项目里用过的启动过流保护逻辑,虽然简单,但框架很清晰:
// 无感启动过流保护 - 简化示例
typedef struct {
float i_limit_prealign; // 预定位阶段电流阈值 (A)
float i_limit_openloop; // 开环加速阶段电流阈值 (A)
float i_limit_transition; // 切换闭环瞬间电流阈值 (A)
uint16_t debounce_cycles; // 去抖计数
} StartOvercurrentConfig_t;
StartOvercurrentConfig_t start_oc = {
.i_limit_prealign = 2.5f, // 预定位允许大电流
.i_limit_openloop = 1.8f, // 开环阶段收紧
.i_limit_transition = 1.5f, // 切换瞬间最严格
.debounce_cycles = 3 // 连续 3 次超限才触发
};
uint8_t check_start_overcurrent(float phase_current, uint8_t start_state) {
float threshold;
// 根据启动阶段选择阈值
switch(start_state) {
case STATE_PREALIGN: threshold = start_oc.i_limit_prealign; break;
case STATE_OPENLOOP: threshold = start_oc.i_limit_openloop; break;
case STATE_TRANSITION: threshold = start_oc.i_limit_transition; break;
default: threshold = 2.0f; break;
}
// 去抖处理
static uint8_t fault_count = 0;
if (phase_current > threshold) {
fault_count++;
if (fault_count >= start_oc.debounce_cycles) {
fault_count = 0;
return 1; // 触发过流保护
}
} else {
fault_count = 0; // 电流恢复正常,清零计数器
}
return 0; // 正常
}
💡 我的调参习惯: 预定位阶段的电流阈值我一般放得比较宽,因为这时候转子可能卡在死区,需要更大的力矩才能拉动。但切换闭环那个瞬间,阈值一定要紧——我见过太多案例都是切换时电流尖峰把管子击穿的。
1.6 本章小结
无感启动过流保护,本质上是在“启动成功率”和“器件安全”之间找平衡。你想想看,阈值设高了,电机容易启动但风险大;设低了,安全是安全了,但稍微带点负载就启动失败。
后面的章节,我会带着你一步步把这张图里的每个模块都拆开揉碎。从预定位电流怎么选,到 V/F 曲线怎么配,再到切换闭环的时机判断——每个参数我都会告诉你“为什么这么设”以及“设错了会怎样”。