4、运放与信号调理电路:差分放大器、共模抑制比(CMRR)、偏置电压对采样精度的影响,实战中如何校准零点漂移

各位做电机驱动的朋友,咱们接着聊电流采样。上一章讲了采样电阻和霍尔传感器的选型,但有个问题我一直想强调:传感器出来的信号,几乎不可能直接送给STM32的ADC。为什么?因为信号太弱、噪声太大、共模电压太高。

这时候就需要运放和信号调理电路上场了。说白了,它们就是信号的“翻译官”和“清洁工”。今天我就把这块掰开了讲清楚,尤其是那些让你采样精度翻车的坑。

核心观点:电流采样的精度,80%取决于运放电路的设计,20%取决于ADC本身。很多工程师花大价钱买高精度ADC,却在运放上省成本,结果采样数据一塌糊涂。

4.1 差分放大器:为什么单端采样不行?

先看一个常见场景。你在电机相线上串了一个10mΩ的采样电阻,两端电压可能是±50mV。这个电压相对于电机母线(比如24V或48V)来说,简直是“浮在高压上的小信号”。

如果用单端放大器去采,参考地是GND,那你要放大的不仅是50mV的差模信号,还有24V的共模电压。结果就是:放大器饱和,ADC烧毁。

差分放大器就是来解决这个问题的。它只放大两个输入端的差值,对共模电压说“不”。

最基本的差分电路长这样:

Vout = (R2/R1) * (V+ - V-)

但这里有个陷阱——电阻匹配精度。我见过一个项目,用了1%精度的电阻做差分,结果共模抑制比直接掉了40dB。你想想看,本来能抑制1000倍的共模信号,现在只能抑制10倍,那采样还能看吗?

我的习惯:差分放大器的四个电阻,要么用0.1%的精密电阻,要么直接用集成差分放大器芯片。别在这上面省钱,省下的钱都会变成调试时间赔进去。

4.2 共模抑制比(CMRR):被忽视的关键指标

CMRR,全称Common Mode Rejection Ratio,中文叫共模抑制比。它的物理意义很简单:放大器对共模信号的抑制能力。

公式长这样:

CMRR = 20 * log10(Adm / Acm)

其中Adm是差模增益,Acm是共模增益。CMRR越高,说明放大器越“无视”共模电压。

咱们算笔账。假设电机母线电压是48V,采样电阻两端差模信号是50mV,你用了增益50倍的差分放大器:

  • 理想情况下,输出应该是50mV × 50 = 2.5V
  • 但如果CMRR只有60dB(即1000倍),共模电压48V会被等效成48V/1000 = 48mV的差模误差
  • 48mV × 50 = 2.4V的误差!这比真实信号还大

看到问题了吧?CMRR不够,采样就是猜数字游戏。

CMRR值 抑制倍数 48V共模等效误差(输入) 适用场景
40 dB 100 480 mV 基本不能用
60 dB 1000 48 mV 低压系统勉强
80 dB 10000 4.8 mV 24V系统可用
100 dB 100000 0.48 mV 48V系统推荐
120 dB 1000000 0.048 mV 高精度伺服

我曾经踩过的坑:选了一款标称CMRR 90dB的运放,但没注意测试条件。实际在10kHz开关频率下,CMRR掉到了55dB。后来查手册才发现,那个90dB是在直流下测的。高频下CMRR会急剧下降,选型时一定要看datasheet里的CMRR vs Frequency曲线。

4.3 偏置电压:零点漂移的元凶

偏置电压(Vos),是运放输入端的“固有误差”。理想运放输入为0时输出为0,但实际运放总有一个小电压偏置。

对于电流采样来说,这个偏置电压会被增益放大,直接表现为零点漂移。比如:

  • 运放Vos = 1mV
  • 增益 = 50倍
  • 输出端零点漂移 = 1mV × 50 = 50mV
  • 对应到采样电阻端,相当于50mV / 50 = 1mV的“假电流信号”

如果采样电阻是10mΩ,1mV的误差相当于100mA的电流误差。对于FOC控制来说,这个误差足以让电机在零速时抖动、产生转矩脉动。

偏置电压还受温度影响,这就是温漂。一般运放的温漂在几个μV/°C到几十μV/°C之间。从25°C升到85°C,60°C温差可能带来几mV的额外漂移。

选型建议:对于电机电流采样,建议选择Vos < 100μV、温漂 < 1μV/°C的运放。比如TI的INA240、ADI的AD8418,都是专门为电机电流采样设计的。

4.4 实战:如何校准零点漂移

好了,理论说完了,咱们来点实际的。不管你用多好的运放,零点漂移都不可能完全消除。所以,校准是必须的。

我常用的校准方法分两步:硬件调零和软件补偿。

4.4.1 硬件调零

在运放的同相输入端加一个可调偏置电压,通过电位器或DAC来抵消Vos。电路结构如下:

// 伪代码:硬件调零流程
1. 断开电机电源,确保采样电阻两端无电流
2. 用万用表测量运放输出
3. 调节电位器,使输出尽可能接近0V
4. 锁定电位器

但这个方法有个问题——温度一变,漂移又回来了。所以硬件调零只能作为粗调。

4.4.2 软件补偿(推荐)

这才是工程上最实用的方法。STM32上电后,先做一次“零电流校准”:

// 软件零点校准示例
#define ADC_SAMPLES  64

uint32_t zero_offset = 0;

void calibrate_zero_offset(void)
{
    uint32_t sum = 0;
    
    // 确保此时电机处于停止状态,无电流流过采样电阻
    for(int i = 0; i < ADC_SAMPLES; i++)
    {
        sum += ADC1->DR;  // 读取ADC原始值
    }
    
    zero_offset = sum / ADC_SAMPLES;  // 计算零点偏移
}

// 实际采样时减去偏移
int32_t get_current_raw(void)
{
    uint32_t adc_val = ADC1->DR;
    return (int32_t)adc_val - (int32_t)zero_offset;
}

我建议:每次电机启动前都做一次零点校准。如果系统不允许停机校准,可以在电机过零(电流自然过零点)时动态更新偏移值。我在一个伺服项目里就是这么做的,效果很好。

4.4.3 温度补偿(进阶)

如果系统工作温度范围很宽(比如-40°C到+85°C),单点校准就不够了。这时候需要做多点温度校准:

  1. 在不同温度下记录零点偏移值
  2. 建立温度-偏移曲线(一般是线性或二次拟合)
  3. 运行时读取板载温度传感器,查表或计算当前偏移

这个方法的代价是增加了一个温度传感器和校准工序,但对于高精度应用来说,值得。

4.5 信号调理电路整体架构

把上面这些串起来,一个完整的电流采样信号链应该是这样的:

电流采样信号链架构 采样电阻 RC滤波 差分放大 偏置调整 ADC 关键设计要点: 1. 采样电阻靠近电机相线,差分走线要短且等长 2. RC滤波截止频率设为开关频率的1/10 ~ 1/5 3. 差分放大器CMRR > 80dB,Vos < 100μV 上电零点校准 实时电流采样 软件偏移补偿 注:每次电机启动或温度变化超过5°C时,建议重新校准

4.6 实战中的几个坑

最后,分享几个我在项目中真实遇到过的坑,希望能帮你少走弯路。

坑1:PCB布局导致CMRR劣化

差分信号的两根走线长度不一致,或者没有包地,会导致共模信号转换成差模信号。我曾经一个板子,就因为差分线走了不同的层,CMRR从80dB掉到了50dB。后来改成同层等长走线,问题解决。

坑2:电源纹波耦合进运放

运放的电源抑制比(PSRR)在高频下也会下降。如果开关电源的纹波直接耦合到运放供电端,会在输出端产生噪声。我的做法是:运放供电加LC滤波,或者用线性稳压器单独供电。

坑3:ADC采样时序与PWM同步

这个放到后面章节细讲,但提前说一句:不要在MOS管开关瞬间采样,那时候噪声最大。一定要把采样窗口对准电流平稳的区域。

好了,关于运放和信号调理电路,今天就聊这么多。记住一句话:电流采样的精度,是设计出来的,不是调试出来的。前期把电路设计好,后面能省90%的调试时间。