4、电流采样与调理电路:相电流采样方法

电流采样,是FOC控制里最关键的硬件环节之一。说白了,你算法写得再漂亮,电流采不准,那全是白搭。我刚开始做FOC驱动时,就在这上面栽过跟头——电机转起来嗡嗡响,力矩输出跟狗啃的一样,查了三天才发现是采样电阻的布局引入了一堆噪声。

这一章,咱们就把电流采样这件事彻底讲透。从采样方法的选择,到运放电路的设计,再到ADC触发的时序配合,一条线串下来。

4.1 三种相电流采样方法

目前主流的采样方案有三种:单电阻、双电阻、三电阻。它们各有各的适用场景,没有绝对的好坏,关键看你的成本、性能和复杂度要求。

采样方案 电阻数量 成本 采样精度 适用场景
单电阻采样 1个(下桥臂公共端) 最低 中等(需重构) 低成本、小功率、对纹波不敏感
双电阻采样 2个(两相下桥臂) 中等 较高 主流方案,性价比高
三电阻采样 3个(三相下桥臂) 最高 最高 高性能、伺服、大功率

4.1.1 单电阻采样

单电阻采样,只在直流母线的下桥臂公共端放一个采样电阻。它的优点是省成本、省PCB面积。但缺点也很明显——你只能采到母线电流,需要根据当前PWM状态去重构出三相电流。

我在一个风扇项目里用过单电阻方案。当时为了省两毛钱,选了它。结果调试时发现,在低调制比区域,重构出来的电流波形简直没法看。后来加了电流重构补偿算法,才算勉强能用。

注意:单电阻采样在PWM占空比接近50%或接近0%时,采样窗口会变得非常窄,甚至无法采样。这是它的固有缺陷,选型前一定要评估好你的调制范围。

4.1.2 双电阻采样

双电阻采样是目前最主流的方案。在两相下桥臂各放一个采样电阻,第三相电流通过基尔霍夫电流定律计算得到:I_c = -(I_a + I_b)。

为什么说它性价比高?因为只需要两个运放通道,ADC也只需要两个通道,成本增加不多,但采样精度比单电阻好太多了。我大部分项目都优先选双电阻方案,除非客户明确要求极致成本。

这里有个坑:双电阻采样在PWM占空比接近100%或0%时,也会出现采样盲区。不过比单电阻好很多,通常通过调整PWM中心对齐模式就能解决。

4.1.3 三电阻采样

三电阻采样,三相各放一个采样电阻。精度最高,没有电流重构误差,也没有采样盲区。但成本也最高——三个运放、三个ADC通道,PCB面积也大一圈。

我一般在伺服驱动器或大功率电机控制里用三电阻方案。比如之前做的一个750W伺服项目,力矩环带宽要求做到2kHz以上,双电阻的噪声和延迟已经满足不了了,果断上了三电阻。

我的建议:如果你做的是通用型FOC驱动器,优先选双电阻。如果追求极致性能或功率较大,选三电阻。只有成本极度敏感且功率很小的场景,才考虑单电阻。

4.2 运放电路设计

采样电阻上的电压信号非常微弱,通常只有几十到几百毫伏。必须经过运放放大后,才能送入ADC。运放电路设计得好不好,直接决定了你的电流采样精度。

4.2.1 运放选型要点

  • 失调电压:最好小于1mV。失调电压会直接叠加到采样信号上,造成电流偏置误差。
  • 温漂:小于5μV/℃。电机工作环境温度变化大,温漂大了电流零点会飘。
  • 带宽:至少1MHz以上。FOC的PWM频率通常在10-20kHz,运放带宽不够会引入相位延迟。
  • 共模抑制比:大于80dB。电机驱动是强干扰环境,共模抑制比低了,噪声全进来了。

我个人习惯用TI的OPA4376或ADI的AD8606,性价比不错,性能也够用。当然,如果你预算充足,上OPA2188这种零漂移运放,效果会更好。

4.2.2 典型电路结构

最常用的就是差分放大电路。采样电阻两端分别接到运放的正负输入端,通过外部电阻设置增益。

增益 G = R_f / R_in

举例:采样电阻 10mΩ,最大电流 10A,最大压降 100mV
ADC参考电压 3.3V,满量程对应 3.3V
所需增益 G = 3.3V / 0.1V = 33
取 R_in = 1kΩ,R_f = 33kΩ
小技巧:运放输入端一定要加RC低通滤波,截止频率设置在PWM频率的1/10左右。比如PWM 20kHz,滤波截止频率设在2kHz。这能有效滤除PWM开关噪声,又不影响电流环带宽。

4.2.3 偏置与保护

电机电流是双向的(正转和反转),而大多数ADC只能采正电压。所以需要给运放输出加一个偏置电压,把双极性信号抬升到ADC的输入范围内。

比如ADC输入范围0-3.3V,偏置到1.65V。这样-10A对应0V,0A对应1.65V,+10A对应3.3V。

另外,运放输出端一定要加钳位二极管,防止过压损坏ADC。我见过不止一次,因为没加钳位,ADC输入引脚被烧掉的案例。

避坑指南:我曾经在一个项目里,运放输出直接连到ADC引脚,没加任何保护。结果有一次电机堵转,电流瞬间飙升,采样电阻上的压降超过了运放供电轨,运放输出直接饱和到5V,把ADC引脚烧了。从那以后,我所有设计都加上了钳位二极管和限流电阻。

4.3 采样时序与ADC触发

电流采样不是随便什么时候采都行的。必须在PWM开关周期的特定时刻触发ADC,才能采到准确的相电流值。

4.3.1 为什么需要精确时序?

电机相电流是连续的,但采样电阻上的电压只在特定时间段内反映真实的相电流。因为PWM开关管导通和关断时,电流会经过不同的路径。

以双电阻采样为例,下桥臂导通时,电流流过采样电阻;下桥臂关断时,电流通过续流二极管走,不经过采样电阻。所以必须在PWM周期的中间时刻(下桥臂导通且稳定后)触发采样。

4.3.2 采样窗口计算

采样窗口 = PWM周期 - 死区时间 - 开关振荡时间 - ADC采样保持时间

举个例子:PWM频率20kHz,周期50μs。死区时间500ns,开关振荡时间200ns,ADC采样保持时间300ns。那么有效采样窗口 = 50μs - 0.5μs - 0.2μs - 0.3μs = 49μs。看起来挺充裕,对吧?

但别忘了,在低调制比时,下桥臂导通时间很短,采样窗口会被严重压缩。这时候就需要调整采样策略,比如在PWM周期的两个不同时刻分别采样两相电流。

4.3.3 ADC触发方式

我推荐使用定时器直接触发ADC,而不是用软件触发。软件触发有不确定性延迟,会导致采样时刻抖动,引入电流噪声。

在STM32上,可以用TIM1的TRGO事件触发ADC注入组转换。配置好定时器的比较值,在PWM周期的中间时刻产生触发信号。

// 以STM32G4为例,配置ADC触发
ADC12->CFGR2 |= ADC_CFGR2_JOVSE;  // 注入组过采样使能
ADC12->JSQR = (1 << 0) |          // 注入序列长度1
              (ADC_CHANNEL_1 << 6); // 注入通道

// 配置TIM1 TRGO触发ADC
TIM1->CR2 &= ~TIM_CR2_MMS_Msk;
TIM1->CR2 |= (0x6 << TIM_CR2_MMS_Pos); // TRGO选择:更新事件
关键点:ADC触发时刻必须与PWM中心对齐。对于中心对齐PWM模式,最佳采样时刻在PWM周期的中间点(计数器等于周期值的一半时)。此时三相下桥臂都处于导通状态,采样窗口最大。

4.3.4 多电阻采样的时序协调

如果你用的是双电阻或三电阻采样,需要同时触发多个ADC通道。这时候要注意ADC的采样保持时间是否足够,以及多个通道之间的串扰问题。

我一般会错开几个纳秒触发不同通道,避免同时采样时ADC内部的模拟多路开关切换引入干扰。当然,如果你的ADC支持同步采样(比如STM32G4的ADC可以配置为双ADC同步模式),那就更好了。

经验之谈:采样时序的调试,最好用示波器抓一下ADC触发信号和PWM波形,确认触发时刻确实在PWM周期的中间。我见过太多人代码里配好了,实际跑起来时序是错的,还查了半天。

4.4 本章知识体系

下面这张图,把电流采样与调理电路的核心逻辑串起来了。从采样方法选择,到运放电路设计,再到ADC触发时序,一条线走到底。

电流采样与调理电路知识体系 相电流采样方法 运放电路设计 采样时序与ADC触发 单电阻采样 双电阻采样 三电阻采样 运放选型 增益与偏置 采样窗口 ADC触发方式 多通道协调 输出:准确、低噪声的相电流采样值 核心逻辑: 1. 根据成本/性能选择采样方法(单/双/三电阻) 2. 设计运放电路:选型 → 增益计算 → 偏置 → 保护 3. 配置ADC触发时序:PWM中心对齐 → 采样窗口 → 多通道协调 4. 最终输出准确、低噪声的相电流值,供FOC算法使用

电流采样这件事,说难不难,说简单也不简单。关键是把每个环节都吃透:采样方法选对、运放电路设计好、ADC触发时序配准。这三步走稳了,你的FOC控制就成功了一半。