3、电流采样与调理电路:单电阻/双电阻/三电阻采样原理、运放选型与电路设计、采样电阻计算、共模电压与偏置、采样时序与ADC触发
电流采样,是FOC控制中最关键的一环。说白了,你算法写得再漂亮,电流采不准,一切都是白搭。我刚开始做FOC时,就吃过这个亏——明明PI参数调得挺好,电机一转起来就嗡嗡响,查了三天才发现是采样电路上的共模噪声在捣鬼。
今天咱们就把电流采样这件事彻底讲透。从采样拓扑到运放选型,从电阻计算到ADC触发时序,一步不落。
3.1 三种采样拓扑:单电阻、双电阻、三电阻
先看大框架。FOC里常用的电流采样方案有三种:单电阻、双电阻、三电阻。它们各有各的脾气,选哪个取决于你的成本、性能和PCB空间。
3.1.1 单电阻采样
单电阻采样,只在直流母线负端放一个采样电阻。它的优点是省钱、省PCB面积。但缺点也很明显——你只能在一个PWM周期内重构出三相电流。
怎么重构?靠的是不同开关状态下母线电流等于某一相电流的原理。比如当上管A、下管B导通时,母线电流就等于A相电流。通过在不同时刻采样,就能拼出三相电流。
但这里有个坑:当占空比接近0%或100%时,采样窗口会变得极短,甚至消失。我遇到过这种情况,电机低速轻载时电流波形乱成一团,后来加了移相PWM才解决。
适用场景:低成本、小体积、对低速性能要求不高的场合,比如风机、水泵。
3.1.2 双电阻采样
双电阻采样,在下桥臂的两个相上各放一个采样电阻。这是目前工业界最主流的方案。为什么?因为它能直接测出两相电流,第三相通过基尔霍夫定律算出来就行。
双电阻采样的好处是:采样窗口宽,对PWM占空比的限制小。你想想看,只要保证两相下管同时导通的时间足够长,就能采到电流。这个条件比单电阻宽松多了。
我个人习惯在双电阻方案里,把采样电阻放在V相和W相,U相空着。这样布局方便,走线也干净。
我的经验:双电阻采样时,采样电阻的接地端一定要用Kelvin连接,单独走线回到ADC参考地。否则地线上的压降会让你怀疑人生。
3.1.3 三电阻采样
三电阻采样,三个下桥臂各放一个电阻。这是性能最好的方案,也是成本最高的方案。它能同时采样三相电流,不需要重构,也没有占空比限制。
三电阻采样常用于伺服驱动器、机器人关节等对动态响应要求极高的场合。我记得有一次做六轴机器人驱动,客户要求电流环带宽做到5kHz,二话不说就上了三电阻方案。
不过要注意,三电阻方案需要三个独立的运放通道,对ADC的同步采样能力也有要求。如果你的MCU只有一路ADC,那就得用三个采样保持器同时锁存,否则相位差会让你算错。
| 方案 | 电阻数量 | 成本 | 性能 | 典型应用 |
|---|---|---|---|---|
| 单电阻 | 1 | 低 | 中 | 风机、水泵 |
| 双电阻 | 2 | 中 | 高 | 通用伺服、电动工具 |
| 三电阻 | 3 | 高 | 极高 | 机器人、高端伺服 |
3.2 采样电阻计算:选大了还是选小了?
采样电阻的阻值选择,是个权衡游戏。阻值大了,信号强,但发热也大;阻值小了,发热小,但信号弱,容易被噪声淹没。
一般按这个思路来算:先确定你需要的最大电流Imax,再确定运放输入端的满量程电压Vfs。比如你的ADC是3.3V参考,运放增益是50倍,那运放输入端的满量程就是3.3V/50 = 66mV。
采样电阻Rshunt = Vfs / Imax。假设Imax = 10A,那Rshunt = 66mV / 10A = 6.6mΩ。实际取6mΩ或5mΩ都行。
然后算功耗:P = I²R。10A时,6mΩ电阻上的功耗是0.6W。选个1W的电阻,留点余量。
注意:采样电阻要用低感抗的型号,比如金属箔电阻或锰铜电阻。普通贴片电阻的寄生电感在高频PWM下会产生尖峰,严重干扰采样。我曾经用普通1206电阻做采样,结果波形上全是毛刺,换了锰铜电阻后世界清净了。
3.3 运放选型与电路设计
运放是电流采样的核心器件。选型时我主要看这几个参数:
- 输入失调电压Vos:最好小于1mV。否则你采小电流时,误差会大得离谱。
- 共模抑制比CMRR:至少80dB以上。电机驱动是强噪声环境,共模干扰很大。
- 带宽GBW:至少10MHz。PWM频率一般是10-20kHz,运放带宽不够的话,信号会失真。
- 摆率SR:至少10V/μs。采样信号是脉冲状的,摆率不够会拖慢响应。
常用的运放型号有:TI的INA240、ADI的AD8418、ST的TSV99x系列。我个人偏爱INA240,它的共模抑制比能做到120dB以上,而且内置了PWM抑制滤波器,省了不少外围器件。
电路设计上,要注意几个细节:
- 运放输入端加RC低通滤波器,截止频率设在PWM频率的1/10左右。比如PWM是20kHz,RC截止频率就设在2kHz。
- 运放输出端加一个钳位二极管,防止ADC输入过压。
- 运放的供电要干净,最好用LDO单独供电,别跟功率级共用一个电源。
3.4 共模电压与偏置
共模电压是电流采样里最容易忽略的问题。你想想看,采样电阻是串在电机相线上的,而电机相线上的电压是高压摆动的——母线电压300V,PWM开关时相电压在0V和300V之间来回跳。
运放要能承受这个共模电压范围。普通运放只能承受电源轨附近的共模电压,而电机驱动需要的是高压侧电流检测运放,它们能承受几十伏甚至上百伏的共模电压。
偏置电压也很关键。FOC需要双向电流检测(正转和反转),所以运放输出要偏置到ADC参考电压的一半。比如ADC是3.3V,那偏置就是1.65V。这样0A时输出1.65V,正向电流时输出大于1.65V,反向电流时小于1.65V。
偏置电路一般用电阻分压加电压跟随器实现。注意分压电阻的精度要高,1%是底线,0.1%更好。
3.5 采样时序与ADC触发
采样时序是FOC里最容易出bug的地方。你想想看,电流信号在PWM开关瞬间会有很大的尖峰,如果ADC刚好在那个时刻采样,采到的就是噪声而不是真实电流。
正确的做法是:在PWM周期的中间时刻触发ADC采样。为什么是中间时刻?因为此时开关管已经稳定导通,电流纹波也处于平均值附近。
对于双电阻采样,需要在下管导通期间采样。一般做法是:用PWM定时器的比较匹配事件来触发ADC。比如设置PWM中心对齐模式,在计数值等于周期值的一半时触发ADC。
我分享一个实际配置的例子:
// 以STM32G4为例,配置PWM和ADC触发
// PWM频率20kHz,中心对齐模式
// 在PWM计数器达到周期值的一半时触发ADC
TIM1->CR1 |= TIM_CR1_CMS_1; // 中心对齐模式
TIM1->ARR = 3000; // 20kHz @ 60MHz时钟
TIM1->CCR1 = 1500; // 50%占空比示例
// 配置ADC触发源为TIM1的TRGO
// 设置TIM1在更新事件时产生TRGO
TIM1->CR2 |= TIM_CR2_MMS_2; // 更新事件作为TRGO
// ADC配置
ADC1->CFGR |= ADC_CFGR_EXTEN_0; // 上升沿触发
ADC1->CFGR |= 0x0A; // 触发源选择TIM1_TRGO
这里要注意一个细节:ADC采样时间要足够长,让采样电容充分充电。一般设置3-5个ADC时钟周期的采样时间就够了。如果采样时间太短,采到的电压会偏低,导致电流计算偏小。
避坑指南:我曾经在调试时发现电流波形有周期性抖动,查了半天发现是ADC采样窗口刚好落在了PWM死区时间里。死区时间里没有电流流过采样电阻,采到的当然是0。后来把采样触发点往后移了200ns,问题就解决了。
3.6 知识体系总览
下面这张图总结了电流采样与调理电路的核心逻辑,从采样拓扑到ADC触发,每一步都环环相扣。
从这张图可以看得很清楚:采样拓扑决定了你能采到什么信号,电阻计算决定了信号的大小,运放决定了信号的质量,共模和偏置决定了信号的参考点,而采样时序决定了你什么时候去读这个信号。每一步都缺一不可。
好了,电流采样这部分就讲到这里。记住一句话:采样电路是FOC的基石,花再多时间在上面都不为过。下次调试时如果遇到电流波形异常,先别急着调PI参数,回头检查一下采样电路,往往能事半功倍。