3、电流检测法详解:采样电阻方案、霍尔电流传感器方案、电流检测的阈值设定与滤波

电流检测法,说白了就是直接测量电机绕组的电流,然后判断它是不是堵转了。这个方法在工程里用得最多,因为它直观、可靠,而且成本可控。我做了这么多年电机控制,大部分项目用的都是电流检测法。

为什么它这么流行?因为堵转时电流会急剧上升,这个特征太明显了。你想想看,正常运行时电流可能只有1A,堵转瞬间能冲到5A甚至更高。这么大的变化,只要检测电路设计得当,基本不会误判。

但这里有个坑——不是随便测个电流就能用的。采样方式、精度、响应速度、噪声抑制,每个环节都得仔细考虑。下面我把两种主流方案掰开揉碎了讲。

3.1 采样电阻方案

采样电阻方案,也叫分流器方案。原理很简单:在电流路径上串一个小电阻,测它两端的电压,再用欧姆定律算出电流。我在第一个量产项目里用的就是这种方案,当时觉得太简单了,结果在噪声处理上栽了跟头。

核心公式: V = I × R

其中 V 是采样电阻两端电压,I 是待测电流,R 是采样电阻阻值。

3.1.1 电阻选型要点

采样电阻不是随便找个电阻焊上去就行的。我列几个关键参数,你选型时一定要核对:

参数 推荐范围 说明
阻值 1mΩ ~ 50mΩ 阻值太小信号弱,太大发热严重
功率 ≥ 2 × I²R 留足余量,堵转时电流大
温漂 ≤ 50ppm/°C 温度变化会影响精度
电感 ≤ 5nH 高频应用必须低电感

我个人习惯用 10mΩ 的合金电阻,功率选 3W 以上。为什么?因为堵转时电流可能持续几秒钟,电阻发热很快。我曾经在一个项目里用了 1W 的电阻,结果堵转测试时电阻直接冒烟了——嗯,从那以后我再也不敢省这个成本。

3.1.2 采样电路设计

采样电阻两端的电压信号非常微弱。10mΩ 电阻通过 5A 电流,电压才 50mV。这么小的信号,直接送给 ADC 是不行的,必须经过放大。

常用的放大电路是差分放大器,或者直接用仪表放大器。我推荐用仪表放大器,比如 AD620、INA826 这些,共模抑制比高,噪声低。

// 典型采样电路参数计算
// 采样电阻:R_shunt = 10mΩ
// 最大检测电流:I_max = 10A
// 最大采样电压:V_shunt_max = 10A × 0.01Ω = 100mV
// ADC 参考电压:V_ref = 3.3V
// 所需增益:Gain = 3.3V / 0.1V = 33
// 实际选择增益:Gain = 33.2(使用标准电阻配置)

布线技巧:采样电阻到放大器的走线要短,而且要使用差分走线。我见过有人把采样线走得很长,结果引入了大量共模噪声,电流波形完全没法看。

3.1.3 采样电阻方案的优缺点

  • 优点:成本低(几毛钱到几块钱)、精度高(可达 1% 以内)、响应快(ns 级)、电路简单
  • 缺点:有功耗损耗(I²R 发热)、需要隔离(高压侧采样麻烦)、大电流时发热严重

3.2 霍尔电流传感器方案

霍尔电流传感器,是利用霍尔效应来测量电流的。它不需要串联在电流路径里,而是通过磁场感应来测量。说白了,就是非接触测量。

我第一次用霍尔传感器是在一个 48V 的 BLDC 项目里。当时采样电阻方案因为发热问题搞不定,换成了霍尔方案,问题一下子就解决了。

3.2.1 工作原理

霍尔传感器内部有一个霍尔元件,当电流流过导体时,会在周围产生磁场。霍尔元件检测到这个磁场,输出一个与电流成正比的电压信号。

市面上常见的霍尔电流传感器有两种:

  • 开环式:结构简单,成本低,但精度一般(3%~5%)
  • 闭环式:精度高(1% 以内),响应快,但成本高

我个人建议,如果对精度要求不高,用开环式就够了。但如果你要做高精度的堵转检测,比如需要区分 5A 和 5.5A 的电流差异,那还是得上闭环式。

3.2.2 选型参数

参数 说明 推荐值
量程 最大可测电流 1.5 ~ 2 倍额定电流
灵敏度 输出电压与电流的比值 100mV/A ~ 500mV/A
带宽 可测量的频率范围 ≥ 50kHz
响应时间 从电流变化到输出稳定的时间 ≤ 5μs

注意:霍尔传感器对安装位置很敏感。我曾经在一个项目里,因为传感器离电机线太近,受到了漏磁干扰,导致电流读数偏大。后来把传感器移远了 2cm,问题就解决了。

3.2.3 霍尔方案 vs 采样电阻方案

对比项 采样电阻 霍尔传感器
成本 低($0.1 ~ $1) 高($1 ~ $5)
精度 高(0.5%~1%) 中高(1%~5%)
功耗 有(I²R) 无
隔离 需要额外隔离 自带隔离
体积 小 较大
适用场景 小电流、低成本 大电流、高可靠性

3.3 电流检测的阈值设定与滤波

有了电流信号,接下来就是怎么用它来判断堵转。这里有两个关键点:阈值怎么设,噪声怎么滤。

3.3.1 阈值设定方法

阈值设定不能拍脑袋。我见过有人直接把额定电流的 2 倍设为阈值,结果电机启动时频繁误报。为什么?因为启动电流本身就很大。

正确的做法是:

  1. 测量正常工况下的最大电流——包括启动、加速、负载变化
  2. 测量堵转时的最小电流——不同电压、不同温度下都要测
  3. 取中间值作为阈值——一般取正常最大电流的 1.5 ~ 2 倍

举个例子:

// 阈值设定示例
// 正常最大电流:I_normal_max = 3A
// 堵转最小电流:I_stall_min = 6A
// 阈值设定:I_threshold = (3A + 6A) / 2 = 4.5A
// 或者更保守:I_threshold = I_normal_max × 1.8 = 5.4A

经验之谈:阈值不要设得太死。我一般会设两个阈值——一个警告阈值(比如 4.5A),一个保护阈值(比如 6A)。电流超过警告阈值时,先记录日志,超过保护阈值时再执行堵转保护动作。

3.3.2 滤波方法

电流信号里有很多噪声。PWM 开关噪声、电机反电动势噪声、采样电路本身的噪声,都会让电流波形变得毛刺很多。如果不滤波,阈值判断会频繁触发。

常用的滤波方法有三种:

方法 原理 适用场景
硬件 RC 滤波 在采样信号路径上加 RC 低通滤波器 高频噪声抑制
软件均值滤波 连续采样 N 次,取平均值 随机噪声抑制
软件中值滤波 连续采样 N 次,取中间值 尖峰脉冲抑制

我个人习惯用硬件 RC 滤波 + 软件均值滤波的组合。硬件滤掉高频噪声,软件滤掉随机波动。中值滤波虽然效果好,但计算量大,在低端 MCU 上跑不动。

// 软件均值滤波示例
#define FILTER_LEN 8

uint16_t filter_buffer[FILTER_LEN];
uint8_t filter_index = 0;

uint16_t current_filter(uint16_t raw_value) {
    uint32_t sum = 0;
    
    filter_buffer[filter_index] = raw_value;
    filter_index = (filter_index + 1) % FILTER_LEN;
    
    for (int i = 0; i < FILTER_LEN; i++) {
        sum += filter_buffer[i];
    }
    
    return (uint16_t)(sum / FILTER_LEN);
}

滤波参数调优:滤波长度不是越大越好。长度太大,响应变慢,堵转检测会滞后。我一般取 8~16 个点,既能有效滤波,又能保证 1ms 以内的响应时间。

3.3.3 阈值与滤波的配合

阈值和滤波是配合使用的。滤波后的电流值更平滑,阈值判断更稳定。但要注意,滤波会引入延迟。如果堵转电流上升很快,滤波延迟可能导致保护动作不及时。

我的做法是:

  • 用滤波后的值做稳态判断(比如持续 100ms 超过阈值)
  • 用原始值做瞬态判断(比如瞬间超过 2 倍阈值)

这样既能防止噪声误报,又能保证快速响应。

电流检测法知识体系 电流检测法 采样电阻方案 霍尔电流传感器方案 电阻选型 放大电路 开环/闭环 安装位置 阈值设定 + 滤波处理 硬件RC滤波 软件均值滤波 软件中值滤波 双阈值策略 核心目标:准确、快速、可靠地检测堵转电流

这张图把电流检测法的知识体系串起来了。从两种方案到关键要素,再到阈值和滤波,最后落到具体实现方法。你写代码或者做硬件设计时,可以对照这张图,看看自己哪个环节还没考虑到。