4、电流采样与调理:相电流采样方法、信号调理电路与ADC配置

电流采样,说白了就是电机的“眼睛”。

你想想看,电流环要闭环控制,总得知道电机里实际流了多少电流吧?采样不准,后面调参调得再好也是白搭。我见过不少工程师,花大把时间调PI参数,结果问题出在采样电路上——白忙活一场。

4.1 相电流采样方法

无感FOC控制,我们通常只需要采样两相电流。为什么?因为三相电流之和为零,第三相可以算出来。当然,前提是电机中性点不引出,且三相平衡。

常用的采样方法有三种:

采样方法 原理 优点 缺点 适用场景
三电阻采样 在逆变器下桥臂三个MOS管源极各串一个采样电阻 成本低,电路简单 PWM占空比过小时采样窗口不足 低成本、中低功率应用
单电阻采样 在直流母线侧串一个采样电阻,通过PWM状态重构相电流 成本最低,BOM精简 算法复杂,低速区采样精度差 极致成本敏感方案
霍尔/磁通门电流传感器 利用霍尔效应或磁通门原理隔离采样 隔离性好,精度高,无采样窗口限制 成本高,体积大 高功率、高可靠性场合

我个人习惯,在无感启动的电流环调试阶段,优先用三电阻采样。原因很简单——调试阶段我们需要看到真实的电流波形,三电阻方案最直观,出问题也好排查。

核心要点:无论哪种采样方法,最终都要保证ADC采样时刻与PWM开关状态对齐。采样点选错了,电流值就是错的。

4.2 信号调理电路设计

采样电阻上的信号,通常是毫伏级的差分信号。直接送给ADC?不行。你需要调理电路来做三件事:放大、偏置、滤波。

典型的调理电路链路如下:

信号调理链路 采样电阻 差分放大 电平偏置 低通滤波 ADC输入 各环节作用: • 差分放大:将mV级信号放大至ADC满量程附近(如0~3.3V) • 电平偏置:将双极性电流信号抬升到ADC单极性输入范围 • 低通滤波:滤除PWM开关噪声,截止频率通常设为开关频率的1/10

4.2.1 差分放大

采样电阻上的信号是差分信号,共模电压可能很高。直接用单端运放?不行,共模抑制比不够。我推荐用仪表放大器或者差分运放。

举个例子,常用的INA240就是专门为电机电流采样设计的。它的共模抑制比能做到80dB以上,而且内部集成了偏置电路。

我的经验:运放的增益不要设得太高。留出20%的余量,防止电流尖峰导致ADC饱和。比如你最大相电流10A,采样电阻1mΩ,信号10mV,ADC参考电压3.3V,增益设到250倍左右就够了,别贪心。

4.2.2 电平偏置

电机电流是双极性的——正转时正向电流,反转时反向电流。但ADC只能采0~3.3V的单极性信号。怎么办?加一个直流偏置,把信号整体抬升到1.65V中心点。

偏置电压的精度直接影响电流零点。我曾经在一个项目里,用了普通的电阻分压给偏置,结果温漂太大,零点飘了50mV,换算成电流误差就是0.2A——对于低速无感启动来说,这误差足以让电机抖得像筛子。

注意:偏置电压必须用高精度基准源,别图省事用电源分压。TL431或者REF3033都是不错的选择。偏置电压的温漂,直接决定了电流采样的零点稳定性。

4.2.3 低通滤波

PWM开关频率通常是10kHz~20kHz,这些高频分量必须滤掉。但滤波也不能太过——相位延迟太大会影响电流环的带宽。

我一般用一阶RC滤波,截止频率设在开关频率的1/10左右。比如开关频率20kHz,截止频率就设2kHz。RC时间常数算一下:τ = 1/(2π×2000) ≈ 80μs,R取1kΩ,C取82nF(接近标称值)。

// 一阶低通滤波截止频率计算
// fc = 1 / (2 * π * R * C)
// 已知:R = 1kΩ, C = 82nF
// fc = 1 / (2 * 3.14159 * 1000 * 82e-9)
// fc ≈ 1940 Hz

// 相位延迟估算(在1kHz处)
// φ = -arctan(f/fc) = -arctan(1000/1940) ≈ -27°
// 这个延迟在电流环中是可以接受的

4.3 ADC配置要点

信号调理好了,接下来就是ADC采样。ADC配置得好不好,直接决定了你看到的是真实电流还是噪声。

4.3.1 采样时刻对齐

这是最容易被忽视的一点。三电阻采样,必须在PWM的下桥臂导通时刻采样。为什么?因为只有下桥臂导通时,电流才流过采样电阻。

具体来说:

  • 在PWM周期中间点触发ADC采样(此时三相下桥臂都导通)
  • 采样窗口要避开开关管导通/关断的振荡期(通常避开200ns~500ns)
  • 使用定时器的触发功能,硬件自动触发ADC,不要用软件延时

关键:ADC采样时刻的抖动,会直接转化为电流噪声。用硬件触发,别用软件定时器。我见过有人用DWT循环等待来对齐采样时刻,结果PWM频率一变化,采样点就飘了。

4.3.2 ADC分辨率与采样率

对于电机控制,12位ADC是底线。16位更好,但成本也上去了。

参数 推荐值 说明
分辨率 12位(最低) 12位对应4096个码值,对于10A量程,分辨率约2.4mA/LSB
采样率 ≥2×PWM频率 每个PWM周期至少采样2次,用于过采样或双采样
采样时间 ≥500ns 保证采样电容充分充电,尤其是输入阻抗较大时
转换模式 注入组或规则组 使用定时器触发,硬件自动完成

4.3.3 软件校准

硬件调理电路总有误差。零点偏置和增益误差,可以通过软件校准来补偿。

我的做法是:

  1. 零点校准:电机静止且不施加电流时,连续采样100次取平均,作为零点偏置值
  2. 增益校准:注入已知电流(比如1A),计算实际ADC码值与理论值的比例关系
  3. 实时更新:每次启动时做一次零点校准,因为温漂会改变零点
// 电流采样软件校准示例
typedef struct {
    int32_t offset;      // 零点偏置(ADC码值)
    float gain;          // 增益系数(A/LSB)
    int32_t raw_adc;     // 原始ADC值
    float current;       // 校准后的电流值(A)
} CurrentSample_t;

void CurrentSample_Calibrate(CurrentSample_t *cs) {
    // 零点校准:电机静止时调用
    int32_t sum = 0;
    for (int i = 0; i < 100; i++) {
        sum += ADC_GetValue();
    }
    cs->offset = sum / 100;
}

float CurrentSample_Get(CurrentSample_t *cs) {
    cs->raw_adc = ADC_GetValue();
    // 减去零点偏置,乘以增益系数
    cs->current = (float)(cs->raw_adc - cs->offset) * cs->gain;
    return cs->current;
}

小技巧:零点校准最好在电机上电后、PWM使能前做。这时候电机还没通电,采样到的就是纯偏置。我曾经偷懒没做这一步,结果零点偏了30个码值,低速时电流环一直在震荡。

4.4 常见问题与避坑

做电流采样,坑不少。我踩过的,列几个出来:

  • 采样电阻功率不够:别只看阻值,功率也要算。10A电流流过1mΩ电阻,功率是0.1W,但启动瞬间可能有5倍过流,选1W以上的电阻才保险。
  • PCB布局不当:采样电阻的走线要用开尔文连接,别让大电流流过信号地。我见过一块板子,采样电阻的焊盘走线太长,引入了0.5mΩ的寄生电阻,电流误差直接5%。
  • ADC输入引脚保护:电机驱动是强电环境,ADC输入引脚一定要加钳位二极管和限流电阻。有一次我忘了加,一个浪涌过来,MCU的ADC引脚直接烧了。
  • 共模电压过高:差分运放的共模输入范围有限,别超过数据手册的规格。高压电机应用,建议用隔离放大器。

嗯,电流采样和调理这部分,说难不难,说简单也不简单。关键是把每个环节的细节做到位——从采样电阻选型,到调理电路设计,再到ADC配置和软件校准,环环相扣。任何一个环节出问题,你看到的电流数据都是假的,后面调参也就无从谈起。