第三节 电流采样与调理电路

电流采样,是FOC控制中最关键的一环。你想想看,整个矢量控制算法,说白了就是靠电流反馈来闭环的。采样不准,后面算得再漂亮也是白搭。我刚开始做FOC驱动时,就吃过这个亏——电流波形看着挺好,电机一转起来就嗡嗡响,查了三天才发现是采样电阻的布局出了问题。

这一节,我们重点聊三个问题:用什么方案采样、运放怎么选怎么配、ADC怎么触发才能采到准确值。

一、相电流采样方案:单电阻、双电阻、三电阻

目前主流的方案就这三种。我按自己的经验,一个一个说清楚。

1. 单电阻采样

单电阻采样,就是在直流母线上串一个采样电阻。通过检测母线电流,再结合当前PWM开关状态,重构出三相电流。

优点:

  • 成本最低,只需要一个采样电阻和一个运放
  • PCB布局简单,占用面积小

缺点:

  • 电流重构算法复杂,低速和高速区都有盲区
  • 对PWM占空比有限制,不能太窄也不能太宽
  • 噪声较大,精度一般
我的经验:单电阻方案适合成本敏感、对性能要求不高的场合,比如风扇、水泵。我曾在某款吸尘器项目上用过,量产了十几万台,基本稳定。但如果你要做伺服驱动器,建议直接跳过。

2. 双电阻采样

双电阻采样,是在两相下桥臂各串一个采样电阻。比如A相和B相,C相通过计算得到(因为三相电流之和为零)。

优点:

  • 成本适中,比单电阻多一个运放通道
  • 电流重构简单,没有盲区问题
  • 精度比单电阻好很多

缺点:

  • 需要两路ADC同步采样
  • 对PWM对称性有一定要求

关键点:双电阻采样时,两相电流必须在同一时刻采样。我见过有人用MCU的ADC轮流采样,结果相位差了几微秒,电流波形就出现了畸变。记住,一定要用ADC的同步触发功能。

3. 三电阻采样

三电阻采样,就是三相下桥臂各放一个采样电阻。每相电流直接测量,互不干扰。

优点:

  • 精度最高,每相独立测量
  • 算法最简单,直接读ADC值就行
  • 没有PWM占空比限制

缺点:

  • 成本最高,需要三个运放通道
  • PCB面积大,布局要求高
  • 功耗略大(三个电阻的损耗)
注意:三电阻方案虽然精度高,但采样电阻的功率选型不能马虎。我曾经在一个48V/10A的项目上,用了1206封装的采样电阻,结果跑满载时电阻发热严重,导致阻值漂移,电流反馈越来越不准。后来换成2512封装才解决。

三种方案怎么选?我一般这样判断:

应用场景 推荐方案 理由
低成本风扇/水泵 单电阻 成本优先,性能要求低
通用工业驱动 双电阻 性价比最高,性能足够
伺服/机器人 三电阻 精度优先,算法简单

二、运放选型与偏置设计

采样电阻上的电压信号非常微弱,通常只有几十到几百毫伏。必须用运放放大到ADC的输入范围(一般是0~3.3V或0~5V)。

运放选型,我重点关注这几个参数:

  • 失调电压(Vos):越低越好,最好小于1mV。失调电压会直接叠加到采样信号上,造成电流偏置误差。
  • 共模抑制比(CMRR):至少80dB以上。电机驱动是强干扰环境,共模噪声很大。
  • 带宽(GBW):至少1MHz以上。虽然电流信号频率不高(几kHz),但PWM开关噪声会耦合进来,运放需要能响应。
  • 轨到轨输出:最好支持。这样能充分利用ADC的输入范围。

我常用的运放型号:

  • TI的OPA4376(四通道,Vos=5μV,性价比高)
  • ADI的AD8606(双通道,Vos=65μV,噪声低)
  • ST的TSV912(双通道,轨到轨,便宜)

偏置设计这块,有个常见的坑。因为电流是双向的(电机正转和反转),采样电阻上的电压也是正负双向的。但ADC只能采集正电压,所以需要加一个偏置电压,把信号抬升到ADC的中间点。

举个例子:ADC输入范围0~3.3V,偏置电压设为1.65V。那么:

  • 电流为零时,ADC读数为1.65V
  • 正向电流时,ADC读数大于1.65V
  • 反向电流时,ADC读数小于1.65V

偏置电路一般用电阻分压加电压跟随器实现。我习惯用精密基准源(比如TL431)来产生偏置电压,比直接用电源分压稳定得多。

避坑指南:我曾经在一个项目上直接用3.3V电源分压做偏置,结果电源纹波有50mV,直接耦合到偏置电压上,导致电流采样噪声巨大。后来换成TL431,纹波降到1mV以下,问题解决。

三、ADC采样时序与同步触发

这部分是很多初学者容易忽略的。ADC什么时候采样?采样的值对不对?这直接决定了FOC控制的性能。

先说说为什么需要同步触发。PWM驱动电机时,电流波形是这样的:

  • PWM导通期间,电流上升
  • PWM关断期间,电流下降
  • 在PWM周期的中间点(即对称PWM的谷底),电流纹波最小

所以,最理想的采样时刻就是PWM周期的中间点。这时候电流纹波最小,采样值最接近真实平均值。

具体怎么做?我以STM32为例说明:

// 配置定时器TIM1为PWM输出,中心对齐模式
// 配置TIM1的TRGO事件在更新事件时触发ADC

// ADC配置代码片段
void ADC_Config(void)
{
    ADC_InitTypeDef ADC_InitStructure;
    ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_7Cycles5);
    
    // 使能ADC的触发模式,触发源为TIM1的TRGO
    ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_TRGO;
    ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_Rising;
    
    // 配置为注入组,用于同步采样两相电流
    ADC_InjectedSequencerLengthConfig(ADC1, 2);
    ADC_InjectedChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_7Cycles5);
    ADC_InjectedChannelConfig(ADC1, ADC_Channel_1, 2, ADC_SampleTime_7Cycles5);
}

这里的关键是:

  • PWM定时器配置为中心对齐模式
  • TRGO事件在计数器等于0时触发(即PWM周期中间点)
  • ADC配置为注入组,可以同时采样多路通道
小技巧:如果你用双电阻或三电阻方案,一定要确保所有通道在同一时刻采样。STM32的注入组可以做到这一点,但要注意注入组的转换时间不能太长,否则会错过最佳采样窗口。我一般把采样时间设为最短(7.5个ADC时钟周期),够用就行。

还有一个细节:采样窗口的宽度。PWM周期中间点附近,电流纹波最小,但也不是一个点。一般来说,采样窗口宽度不要超过PWM周期的5%。比如PWM频率20kHz(周期50μs),采样窗口最好控制在2.5μs以内。

注意:如果PWM占空比非常小或非常大,采样窗口可能会和开关噪声重叠。这时候需要做特殊处理,比如在软件中判断占空比范围,切换到其他采样策略。我一般在占空比小于10%或大于90%时,改用单电阻重构算法来补充。

最后总结一下采样时序的要点:

  1. 使用中心对齐PWM模式
  2. 在PWM周期中间点触发ADC
  3. 多路电流必须同步采样
  4. 采样窗口尽量短
  5. 极端占空比时做特殊处理

嗯,电流采样这部分就聊到这里。下一节我们讲电流调理电路中的滤波器设计,那也是个容易踩坑的地方。