4. 电流采样与调理电路:采样电阻、运放选型、电流重构技术、ADC配置
电流采样是FOC控制中最关键的一环。说白了,你算法写得再好,电流采不准,一切都是白搭。我刚开始做FOC时,就吃过这个亏——电机转得挺顺,一加负载就抖,查了三天才发现是采样电路噪声太大。
这一章,咱们把电流采样的每个环节都掰开揉碎讲清楚。
4.1 采样电阻:位置与选型
采样电阻放在哪?这是个经典问题。常见的方案有三种:
| 方案 | 位置 | 优点 | 缺点 |
|---|---|---|---|
| 三电阻 | 下桥臂GND侧 | 采样精度高,适合大电流 | 需要3个运放,成本高 |
| 单电阻 | 直流母线 | 成本最低,PCB面积小 | 重构算法复杂,低速性能差 |
| 双电阻 | 两相下桥臂 | 性价比高,应用最广 | 需要电流重构 |
我个人习惯用双电阻方案。为什么?因为它在成本和性能之间取得了很好的平衡。STM32的FOC库原生支持双电阻重构,省心不少。
4.1.1 电阻值怎么选?
选电阻值,核心就一句话:在最大电流时,采样电压不超过运放的输入范围。
举个例子:
- 电机峰值电流:10A
- 运放输入范围:0~3.3V
- 增益:50倍
那么采样电阻最大压降 = 3.3V / 50 = 66mV。电阻值 = 66mV / 10A = 6.6mΩ。我一般选5mΩ,留点余量。
4.2 运放选型:关键参数
运放是采样电路的核心。选型时,我重点关注这几个参数:
- 失调电压:最好小于1mV。失调大了,小电流采样误差会很大。
- 共模抑制比:至少80dB。电机驱动是强干扰环境,共模抑制比不够,采样信号会被共模噪声污染。
- 带宽:至少1MHz。FOC的PWM频率一般在10~20kHz,运放带宽不够,信号会失真。
- 压摆率:至少1V/μs。电流变化很快,压摆率低了,运放跟不上。
我常用的运放型号:
| 型号 | 失调电压 | CMRR | 带宽 | 压摆率 |
|---|---|---|---|---|
| LMV321 | 1mV | 85dB | 1MHz | 1V/μs |
| MCP6002 | 0.5mV | 90dB | 1MHz | 0.6V/μs |
| OPA2333 | 0.01mV | 130dB | 2MHz | 5V/μs |
OPA2333性能最好,但价格也贵。如果成本敏感,MCP6002是个不错的选择。
4.3 电流重构技术
双电阻方案只能采样两相电流,第三相电流需要重构。原理很简单:三相电流之和为零。
即:Ic = -(Ia + Ib)
但这里有个坑:采样窗口。PWM开关瞬间,电流会有尖峰,必须避开这段时间采样。
关键点:采样时刻必须选在PWM导通中间,避开开关噪声。我一般设置采样点在PWM周期的25%和75%位置。
STM32的定时器支持这个功能。配置如下:
// 配置ADC触发源为TIM1的TRGO
TIM1->CR2 |= TIM_CR2_MMS_1; // 更新事件触发
// 设置采样点偏移
TIM1->CCR1 = PWM_PERIOD / 4; // 25%处采样
TIM1->CCR2 = PWM_PERIOD * 3 / 4; // 75%处采样
4.3.1 重构的边界条件
电流重构不是万能的。当占空比接近0%或100%时,采样窗口会变得非常窄,甚至消失。这就是所谓的不可观测区域。
解决办法:
- 使用移相PWM,让采样窗口错开
- 在不可观测区域使用预测算法,根据上一周期的电流值估算
- 实在不行,切换到三电阻方案
4.4 ADC配置:精度与速度的平衡
ADC配置直接影响采样精度。STM32的ADC有12位分辨率,但实际有效位数(ENOB)往往只有10~11位。
配置要点:
- 采样时间:至少1μs。采样时间太短,电容充不满,精度下降。
- 时钟频率:不要超过14MHz。频率高了,ADC内部比较器来不及响应。
- 转换模式:使用注入组或规则组。我习惯用注入组,因为它可以打断规则组的转换,保证采样时刻精确。
- DMA传输:必须用DMA。CPU去读ADC数据,效率太低。
配置代码示例:
// ADC1初始化
ADC1->CR2 |= ADC_CR2_ADON; // 使能ADC
ADC1->SMPR2 |= ADC_SMPR2_SMP0_0 | ADC_SMPR2_SMP0_1; // 采样时间:28.5个周期
ADC1->SQR3 |= 0; // 规则组通道0
// 注入组配置
ADC1->JSQR |= (1 << 20); // 注入组长度1
ADC1->JSQR |= (0 << 15); // 注入组通道0
4.4.1 校准
ADC有偏移误差和增益误差。STM32提供了内置校准功能:
ADC1->CR2 |= ADC_CR2_CAL; // 启动校准
while(ADC1->CR2 & ADC_CR2_CAL); // 等待校准完成
但内置校准只能消除芯片本身的误差。如果采样电阻和运放有偏差,还需要软件校准。
4.5 整体架构图
下面这张图展示了电流采样到ADC的完整链路:
4.6 实战中的坑
最后,分享几个我踩过的坑:
- 地线环路:采样电路的地和功率地必须分开,单点接地。否则,大电流会在GND上产生压降,导致采样误差。
- 滤波电容:运放输出端加一个100pF的电容,滤除高频噪声。但电容不能太大,否则会引入相位延迟。
- PCB布局:采样电阻到运放的走线要短,远离PWM信号线。我见过有人把采样线走在PWM线下面,结果采样信号全是开关噪声。