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 完整电路结构图

下面这张图,把上面讲的几个模块串起来了。从电流采样到比较器,再到锁存输出,一条链路走通。

过流检测电路结构图 过流检测电路完整结构 电流采样 低通滤波 滞回比较器 故障锁存 阈值设置 Vhigh = 2.73V (过流) Vlow = 2.77V (恢复) 锁存输出 Q = 1 → 故障触发 RST = 0 → 清除锁存 信号链路

4.6 避坑指南

最后,分享几个我踩过的坑:

  • 采样电阻布局:一定要靠近电机相线,远离大功率开关管。我吃过一次亏,采样线走太长,耦合了开关噪声,比较器乱跳。
  • 参考电压源:别用电阻分压从电源取,电源一波动阈值就飘。用 TL431 或 REF3030,稳得很。
  • 输出上拉:开漏输出的比较器(如 LM393),上拉电阻别太大,否则上升沿太慢。我一般用 4.7kΩ。
  • 锁存复位时序:复位信号要保证足够宽,至少 10μs,不然锁存器可能没反应。
💡 我的习惯
每次画完比较器电路,我都会在仿真里加一个带噪声的电流源,看看滞回能不能扛住。仿真过了,再打板。这个习惯帮我省了不少 Debug 时间。