3. 电流采样与调理:三相电流采样方案与抗干扰实战

电流采样是FOC控制环路的“眼睛”。眼睛看不清,后面PID调得再好也没用。我这些年调试过的电机驱动板,少说也有几十款,出问题最多的往往不是算法,而是电流采样这一关。

今天咱们就把电流采样这事儿彻底聊透。从硬件方案选型,到运放电路设计,再到噪声分析与滤波,一步不落。

3.1 三相电流采样方案对比

先看三种主流方案:单电阻、双电阻、三电阻。说白了就是“用几个采样电阻、在什么时候采”。

方案 采样电阻数 成本 精度 适用场景
单电阻 1个(直流母线侧) 最低 中等 低成本、低功率、对纹波不敏感
双电阻 2个(下桥臂) 中等 较高 主流方案,平衡成本与性能
三电阻 3个(每相下桥臂) 最高 最高 高精度、伺服驱动、低电感电机

3.1.1 单电阻采样

单电阻采样只在直流母线上放一个采样电阻。它的原理是:任意时刻,流过母线的电流等于正在导通的那一相或两相的电流之和。通过在不同PWM状态下采样,可以重构出三相电流。

听起来很巧妙对吧?但坑也不少。

避坑指南: 我曾经在一个风机项目里用单电阻采样,结果低速时电流波形毛刺严重。后来发现是PWM占空比太小时,采样窗口不够,ADC根本采不到有效值。单电阻方案在占空比接近0%或100%时,重构误差会急剧增大。

单电阻的采样时刻需要精确控制。一般是在PWM周期的中间点,或者两个相邻开关状态切换时。我习惯用中心对齐PWM,这样采样窗口最宽。

3.1.2 双电阻采样

双电阻采样是目前最主流的方案。两个采样电阻分别放在A相和B相的下桥臂,C相电流通过Ic = -(Ia + Ib)计算得到。

为什么是双电阻?因为两相电流就能重构出第三相,而且不需要像单电阻那样依赖PWM状态。采样窗口更宽,噪声更小。

我个人的经验是:双电阻采样配合差分运放,是性价比最高的组合。大部分工业伺服驱动器都在用这个方案。

3.1.3 三电阻采样

三电阻采样每相一个采样电阻,直接测量每相电流。精度最高,但成本也最高。三个运放、三个ADC通道,PCB面积也大。

什么时候必须用三电阻?低电感电机、高速运转、或者对电流纹波要求极高的场合。比如机器人关节伺服,我就见过不少用三电阻的。

3.2 运放电路设计

采样电阻上的电压通常只有几十毫伏到几百毫伏,MCU的ADC根本没法直接采。必须用运放放大。

运放电路的核心指标就三个:增益、带宽、共模抑制比。

3.2.1 差分放大 vs 单端放大

我强烈建议用差分放大。为什么?因为电机驱动回路里,地平面噪声非常大。单端放大会把地噪声一起放大进去,信噪比惨不忍睹。

差分运放只放大采样电阻两端的压差,对共模噪声有天然的抑制能力。我常用的运放型号是INA240和AD8418,都是专门为电流检测设计的差分放大器。

关键参数: 运放的增益带宽积(GBP)至少要大于PWM频率的10倍。比如PWM是20kHz,GBP至少要200kHz。别选太慢的运放,否则采样值会滞后真实电流。

3.2.2 偏置与电平转换

电机电流是双向的(正转和反转),但MCU的ADC只能采0~3.3V。所以需要把双极性信号转换成单极性信号。

我常用的做法是:给运放加一个1.65V的偏置电压。这样0A对应1.65V,正向电流对应1.65V~3.3V,反向电流对应0V~1.65V。

// 运放输出与电流的关系
// Vout = 1.65V + I * Rshunt * Gain
// 假设 Rshunt = 0.01Ω, Gain = 50
// 那么 1A 电流对应 Vout = 1.65 + 1*0.01*50 = 2.15V
// -1A 电流对应 Vout = 1.65 - 1*0.01*50 = 1.15V

3.2.3 采样电阻选型

采样电阻的阻值不能太大,否则发热严重;也不能太小,否则信噪比不够。

我一般按这个原则选:在最大电流时,采样电阻上的压降不超过100mV。比如最大电流10A,那电阻选0.01Ω,压降100mV。然后运放增益设50倍,输出满量程5V(配合3.3V ADC时再分压或选合适增益)。

最大电流 推荐采样电阻 压降@Imax 推荐运放增益
5A 0.02Ω 100mV 33
10A 0.01Ω 100mV 33
20A 0.005Ω 100mV 33
50A 0.002Ω 100mV 33

3.3 采样噪声分析与滤波

采样噪声是FOC控制的大敌。噪声会导致电流环抖动、速度环震荡,甚至电机啸叫。

3.3.1 噪声来源

我总结了一下,噪声主要来自三个方面:

  • 开关噪声: MOSFET开关瞬间产生的尖峰,频率和PWM一致
  • 地弹噪声: 大电流流过地平面时产生的电压波动
  • 共模噪声: 电机三相之间的耦合干扰

你想想看,PWM开关频率20kHz,开关边沿的上升时间只有几十纳秒。这个尖峰如果直接进ADC,采样值肯定不准。

3.3.2 硬件滤波

硬件滤波是最直接的手段。我一般在运放输出和ADC输入之间加一个一阶RC低通滤波器。

截止频率怎么选?我习惯设在PWM频率的1/10左右。比如PWM是20kHz,RC截止频率就设在2kHz。这样既能滤掉开关噪声,又不会让电流信号失真太多。

// RC滤波器截止频率计算
// fc = 1 / (2 * π * R * C)
// 取 R = 1kΩ, C = 100nF
// fc = 1 / (2 * 3.14 * 1000 * 100e-9) ≈ 1.59kHz
小技巧: 我习惯在RC滤波前加一个100Ω的串联电阻,可以抑制运放输出的振铃。这个电阻和滤波电容一起,还能形成二阶低通效果。

3.3.3 软件滤波

硬件滤波之后,软件上还得再处理一层。我常用的软件滤波方法有:

  • 均值滤波: 连续采4~8次取平均,简单有效
  • 中值滤波: 对突变噪声有很好的抑制效果
  • 一阶低通滤波: 类似硬件RC,用软件实现

我个人最常用的是一阶低通滤波 + 均值滤波的组合。先做一次均值滤波去掉随机噪声,再做一阶低通平滑波形。

// 一阶低通滤波实现
float current_filtered = 0.0f;
float alpha = 0.2f;  // 滤波系数,越小越平滑

float lowpass_filter(float raw_current) {
    current_filtered = alpha * raw_current + (1 - alpha) * current_filtered;
    return current_filtered;
}

3.3.4 采样时序与PWM同步

这个点特别重要,我专门拿出来说。ADC采样时刻必须和PWM同步。

为什么?因为开关噪声只在开关边沿附近出现。如果我们在PWM的中间点采样,正好避开了噪声最严重的时刻。

我习惯用MCU的定时器触发ADC采样。在PWM定时器的计数器等于周期值的一半时,触发ADC开始转换。这样采到的电流值最干净。

我曾经踩过的坑: 在一个项目中,我用软件延时来触发ADC采样,结果PWM频率一变化,采样点就飘到了开关边沿附近,电流波形全是毛刺。后来改成硬件触发,问题立刻解决。所以能用硬件就别用软件。

3.4 本章知识体系总览

下面这张图把电流采样与调理的完整链路画出来了。从采样电阻到运放,再到滤波和ADC,每一步都有讲究。

电流采样与调理知识体系 电流采样与调理知识体系 三相电流采样方案 运放电路设计 采样噪声分析与滤波 单电阻 双电阻 三电阻 差分放大 偏置电路 电阻选型 硬件滤波 软件滤波 采样窗口 PWM同步 重构误差 增益带宽积 共模抑制比 电平转换 RC截止频率 均值/中值滤波 一阶低通 开关噪声 地弹噪声 共模噪声 目标:高精度、低噪声、实时性强的电流采样 核心原则:采样时刻避开开关边沿,硬件滤波为主软件滤波为辅 差分运放 + RC滤波 + PWM同步触发 = 可靠的电流采样

这张图把整个电流采样链路串起来了。从方案选型到运放设计,再到噪声滤波,每一步都环环相扣。你只要按照这个链路走,电流采样这块基本不会出大问题。