4、电流采样与调理电路:相电流采样方法
电流采样,是FOC控制里最关键的硬件环节之一。说白了,你算法写得再漂亮,电流采不准,那全是白搭。我刚开始做FOC驱动时,就在这上面栽过跟头——电机转起来嗡嗡响,力矩输出跟狗啃的一样,查了三天才发现是采样电阻的布局引入了一堆噪声。
这一章,咱们就把电流采样这件事彻底讲透。从采样方法的选择,到运放电路的设计,再到ADC触发的时序配合,一条线串下来。
4.1 三种相电流采样方法
目前主流的采样方案有三种:单电阻、双电阻、三电阻。它们各有各的适用场景,没有绝对的好坏,关键看你的成本、性能和复杂度要求。
| 采样方案 | 电阻数量 | 成本 | 采样精度 | 适用场景 |
|---|---|---|---|---|
| 单电阻采样 | 1个(下桥臂公共端) | 最低 | 中等(需重构) | 低成本、小功率、对纹波不敏感 |
| 双电阻采样 | 2个(两相下桥臂) | 中等 | 较高 | 主流方案,性价比高 |
| 三电阻采样 | 3个(三相下桥臂) | 最高 | 最高 | 高性能、伺服、大功率 |
4.1.1 单电阻采样
单电阻采样,只在直流母线的下桥臂公共端放一个采样电阻。它的优点是省成本、省PCB面积。但缺点也很明显——你只能采到母线电流,需要根据当前PWM状态去重构出三相电流。
我在一个风扇项目里用过单电阻方案。当时为了省两毛钱,选了它。结果调试时发现,在低调制比区域,重构出来的电流波形简直没法看。后来加了电流重构补偿算法,才算勉强能用。
4.1.2 双电阻采样
双电阻采样是目前最主流的方案。在两相下桥臂各放一个采样电阻,第三相电流通过基尔霍夫电流定律计算得到:I_c = -(I_a + I_b)。
为什么说它性价比高?因为只需要两个运放通道,ADC也只需要两个通道,成本增加不多,但采样精度比单电阻好太多了。我大部分项目都优先选双电阻方案,除非客户明确要求极致成本。
这里有个坑:双电阻采样在PWM占空比接近100%或0%时,也会出现采样盲区。不过比单电阻好很多,通常通过调整PWM中心对齐模式就能解决。
4.1.3 三电阻采样
三电阻采样,三相各放一个采样电阻。精度最高,没有电流重构误差,也没有采样盲区。但成本也最高——三个运放、三个ADC通道,PCB面积也大一圈。
我一般在伺服驱动器或大功率电机控制里用三电阻方案。比如之前做的一个750W伺服项目,力矩环带宽要求做到2kHz以上,双电阻的噪声和延迟已经满足不了了,果断上了三电阻。
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Ω
4.2.3 偏置与保护
电机电流是双向的(正转和反转),而大多数ADC只能采正电压。所以需要给运放输出加一个偏置电压,把双极性信号抬升到ADC的输入范围内。
比如ADC输入范围0-3.3V,偏置到1.65V。这样-10A对应0V,0A对应1.65V,+10A对应3.3V。
另外,运放输出端一定要加钳位二极管,防止过压损坏ADC。我见过不止一次,因为没加钳位,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选择:更新事件
4.3.4 多电阻采样的时序协调
如果你用的是双电阻或三电阻采样,需要同时触发多个ADC通道。这时候要注意ADC的采样保持时间是否足够,以及多个通道之间的串扰问题。
我一般会错开几个纳秒触发不同通道,避免同时采样时ADC内部的模拟多路开关切换引入干扰。当然,如果你的ADC支持同步采样(比如STM32G4的ADC可以配置为双ADC同步模式),那就更好了。
4.4 本章知识体系
下面这张图,把电流采样与调理电路的核心逻辑串起来了。从采样方法选择,到运放电路设计,再到ADC触发时序,一条线走到底。
电流采样这件事,说难不难,说简单也不简单。关键是把每个环节都吃透:采样方法选对、运放电路设计好、ADC触发时序配准。这三步走稳了,你的FOC控制就成功了一半。