4. 过流检测电路:比较器电路设计、滞回比较器、窗口比较器、故障信号锁存
过流检测,说白了就是给电机电流装个「哨兵」。电流一旦越界,必须立刻拉闸。这个哨兵的核心元件,就是比较器。
我刚开始做电机驱动那会儿,觉得比较器嘛,不就是比大小?后来被现实狠狠教育了一回——信号一抖,保护乱跳,电机没烧,先把自己烦死了。所以这一章,咱们把比较器的几种玩法掰开揉碎讲清楚。
4.1 基础比较器电路
最简单的过流检测,就是一个运放开环工作。同相端接电流采样信号,反相端接一个参考电压(阈值)。
- 采样电压 > 阈值 → 输出高电平(报警)
- 采样电压 < 阈值 → 输出低电平(正常)
听起来很简单对吧?但实际用起来,问题就来了。
电机运行时,电流信号上叠加的开关噪声、PWM 尖刺,会让比较器输出反复跳变。一个正常的电流波形,可能因为一个毛刺就被误判为过流。
我曾经在一个 24V 直流无刷电机项目里,就因为这个误触发,导致系统频繁停机。排查了三天,最后发现是采样电阻上的共模噪声没处理好。嗯,从那以后,我设计比较器电路一定会先加一级低通滤波。
4.2 滞回比较器
怎么解决噪声误触发?加滞回。说白了,就是让比较器有两个阈值:一个高阈值(触发点),一个低阈值(恢复点)。
电流超过高阈值 → 报警
电流降到低阈值以下 → 解除报警
中间这个差值,就叫滞回宽度。有了它,信号上的小毛刺就翻不起浪了。
4.2.1 电路实现
用运放搭一个正反馈结构就行。同相端接一个正反馈电阻到输出,反相端接参考电压。
// 滞回比较器阈值计算(以 LM393 为例)
// 假设:Vref = 2.5V,R1 = 10kΩ,R2 = 100kΩ
// VH = Vref * (1 + R1/R2) - Vsat * (R1/R2)
// VL = Vref * (1 + R1/R2) + Vsat * (R1/R2)
// 其中 Vsat 为输出饱和电压(约 0.2V 或 Vcc-0.2V)
// 实际计算示例:
// Vref = 2.5V, R1 = 10k, R2 = 100k, Vcc = 5V
// VH = 2.5 * (1 + 0.1) - 0.2 * 0.1 = 2.75 - 0.02 = 2.73V
// VL = 2.5 * (1 + 0.1) + 0.2 * 0.1 = 2.75 + 0.02 = 2.77V
// 滞回宽度 = VH - VL ≈ 40mV
滞回宽度一般取采样信号噪声峰峰值的 1.5~2 倍。太宽了保护迟钝,太窄了等于没加。我习惯先示波器抓一下噪声波形,再算这个值。
4.2.2 参数选择建议
| 参数 | 推荐范围 | 说明 |
|---|---|---|
| 滞回宽度 | 20~100 mV | 根据噪声水平调整 |
| 正反馈电阻 | 10k~1MΩ | 越大滞回越小 |
| 参考电压精度 | ±1% 以内 | 用 TL431 或精密基准源 |
| 比较器响应时间 | < 1 μs | LM393 约 1.3μs,高速用 TLV3501 |
4.3 窗口比较器
有时候,我们不光要防过流,还要防欠流。比如电机堵转时电流很大,但断线时电流又太小。这时候就需要一个「窗口」——电流必须在上下限之间才算正常。
窗口比较器,就是两个比较器背靠背:一个检测上限,一个检测下限。输出端用逻辑门组合一下。
// 窗口比较器逻辑
// 正常:Vlow < Vin < Vhigh → 输出高电平
// 异常:Vin ≤ Vlow 或 Vin ≥ Vhigh → 输出低电平
// 电路连接:
// 比较器A:同相端接 Vin,反相端接 Vhigh
// 比较器B:反相端接 Vin,同相端接 Vlow
// 输出:A_out 与 B_out 相与(AND)
窗口比较器的两个阈值必须留出足够的余量。比如电机额定电流 5A,采样电压对应 1V,那窗口可以设在 0.8V~1.2V。太窄了,正常波动也会触发报警。
我记得有个客户做水泵保护,要求检测「干转」——就是没水时空转,电流会明显下降。用窗口比较器,下限设到额定电流的 60%,一检测到欠流就停机,效果很好。
4.4 故障信号锁存
比较器输出一个脉冲,然后呢?如果只是闪一下,MCU 可能没来得及响应就过去了。所以需要锁存——把故障信号「抓住」,直到系统确认并复位。
4.4.1 硬件锁存方案
最简单的,用 RS 触发器。比较器输出接 S 端,复位信号接 R 端。一旦触发,输出一直保持高电平。
// 用 CD4043(三态 RS 锁存器)实现
// S 端:接比较器输出(过流触发)
// R 端:接 MCU 复位信号(低电平有效)
// Q 端:接 MCU 中断引脚或直接关断驱动
// 真值表:
// S R Q
// 0 0 保持
// 0 1 复位(Q=0)
// 1 0 置位(Q=1)
// 1 1 禁止
4.4.2 软件锁存方案
如果 MCU 资源够,也可以用软件实现。比较器输出直接进 MCU 的捕获引脚,在中断里设置一个标志位。
// 伪代码示例
static uint8_t fault_latch = 0;
void comparator_isr(void) {
if (COMP_OUT == HIGH) {
fault_latch = 1; // 锁存故障
disable_motor_drive(); // 立即关断
}
}
void clear_fault(void) {
if (fault_latch == 1) {
// 检查故障是否消失
if (COMP_OUT == LOW) {
fault_latch = 0; // 清除锁存
enable_motor_drive();
}
}
}
软件锁存有延迟。如果电流上升极快(比如短路),硬件锁存更可靠。我一般两者都用:硬件快速关断,软件做记录和恢复管理。
4.5 完整电路结构图
下面这张图,把上面讲的几个模块串起来了。从电流采样到比较器,再到锁存输出,一条链路走通。
4.6 避坑指南
最后,分享几个我踩过的坑:
- 采样电阻布局:一定要靠近电机相线,远离大功率开关管。我吃过一次亏,采样线走太长,耦合了开关噪声,比较器乱跳。
- 参考电压源:别用电阻分压从电源取,电源一波动阈值就飘。用 TL431 或 REF3030,稳得很。
- 输出上拉:开漏输出的比较器(如 LM393),上拉电阻别太大,否则上升沿太慢。我一般用 4.7kΩ。
- 锁存复位时序:复位信号要保证足够宽,至少 10μs,不然锁存器可能没反应。
每次画完比较器电路,我都会在仿真里加一个带噪声的电流源,看看滞回能不能扛住。仿真过了,再打板。这个习惯帮我省了不少 Debug 时间。