3、电流采样与调理电路设计
电流采样,是FOC控制里最关键的环节之一。你想想看,整个算法闭环依赖的就是电流反馈的准确性。采样不准,后面的PI调得再好也没用。这一章,我把自己这些年踩过的坑、积累的经验,都摊开来跟你聊聊。
核心观点:电流采样电路的设计,本质是在信噪比、成本、PCB面积三者之间找平衡。没有完美的方案,只有最适合你项目的方案。
3.1 采样电阻选型:别小看这颗电阻
采样电阻,说白了就是一颗精密电阻。但它的选型直接影响整个采样链路的精度。
选型时我主要看这几个参数:
- 阻值:太小了,信号幅度低,容易被噪声淹没;太大了,功耗和发热受不了。一般取几十到几百毫欧。
- 功率:按最大电流的平方乘以阻值,再留1.5~2倍余量。我习惯按2倍算,心里踏实。
- 温漂(TCR):这是个大坑。普通电阻温漂几十甚至上百ppm/°C,温度一上来,采样值就飘了。我建议用±50ppm/°C以下的,最好是金属箔或锰铜材质。
- 寄生电感:高频电流下,寄生电感会产生额外压降,导致采样失真。选低电感封装(比如2512、1206)或者四端开尔文连接的电阻。
我的经验:曾经在一个项目里,为了省几毛钱,用了普通厚膜电阻。结果电机带载跑半小时后,电流反馈值漂了5%以上。后来换成锰铜采样电阻,问题立刻解决。嗯,有些钱不能省。
3.2 运放电路设计:把微弱的信号放大
采样电阻两端的压降通常只有几十毫伏,必须经过运放放大到ADC的输入范围(一般是0~3.3V或0~5V)。
常用的运放电路结构:
| 结构类型 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 差分放大 | 电路简单,成本低 | 共模抑制比(CMRR)受电阻匹配精度限制 | 对成本敏感、精度要求不高的场合 |
| 仪表放大器 | CMRR高,输入阻抗高 | 价格贵,体积大 | 高精度、强噪声环境 |
| 电流检测放大器(CSA) | 集成度高,外围元件少 | 增益固定,灵活性差 | 批量产品,设计周期短 |
我个人比较推荐用电流检测放大器(CSA),比如TI的INA240或ADI的AD8418。它们内部已经做好了匹配和滤波,用起来省心。当然,如果你对成本极度敏感,用分立元件搭差分放大也行,但电阻必须用0.1%精度的。
3.3 共模电压抑制:别让噪声混进来
电机驱动是典型的强干扰环境。母线电压高,开关频率快,共模噪声非常大。如果运放的共模抑制比(CMRR)不够,这些噪声就会耦合到采样信号里,导致电流波形乱七八糟。
提高共模抑制的几个手段:
- 选高CMRR的运放:至少80dB以上,最好100dB。
- PCB布局要讲究:采样电阻到运放的走线尽量短,而且要走差分对,避免形成地环路。
- 加共模扼流圈:在采样信号进入运放之前,串一个小共模扼流圈,能有效滤除共模噪声。
我曾经踩过的坑:有次调试,发现电流波形在PWM开关时刻出现巨大的尖刺。查了半天,发现是运放输入端的走线太长,而且没有做差分走线,导致共模噪声直接耦合进来。后来把走线缩短并改成差分对,尖刺立刻消失。所以,布局真的不能马虎。
3.4 采样窗口与PWM同步:时机决定一切
FOC里,电流采样必须在PWM周期的特定时刻进行。为什么?因为MOS管开关瞬间会产生巨大的电流尖峰,如果采样窗口刚好落在那个时刻,采到的值就是错的。
常见的同步策略:
- 单电阻采样:在PWM周期的中间时刻采样,此时两相电流同时流过采样电阻。
- 双电阻采样:在PWM周期的开始和中间各采一次,分别对应两相电流。
- 三电阻采样:每相独立采样,采样窗口可以灵活设置,但成本高。
我习惯用双电阻采样,性价比最高。具体做法是:让PWM定时器在计数到中间值时触发ADC采样,这样就能避开开关噪声。
// 以STM32为例,配置PWM触发ADC采样
// 设置TIM1的TRGO事件为更新事件(Update Event)
TIM1->CR2 |= TIM_CR2_MMS_1; // 选择更新事件作为TRGO
// 配置ADC为外部触发,触发源为TIM1_TRGO
ADC1->CR2 |= ADC_CR2_EXTSEL_0 | ADC_CR2_EXTSEL_2; // 选择TIM1_TRGO
ADC1->CR2 |= ADC_CR2_EXTTRIG; // 使能外部触发
小技巧:如果PWM频率很高(比如20kHz以上),采样窗口时间很短,这时候要确保ADC的采样时间足够。我一般把ADC采样周期设为最快,然后用硬件触发来保证同步。
3.5 硬件滤波与软件滤波的取舍
滤波是必须的,但怎么滤,是个问题。
硬件滤波:
- 在运放输出端加RC低通滤波器,截止频率一般设为PWM频率的1/10左右。
- 优点:实时性好,不占用CPU资源。
- 缺点:会引入相位延迟,影响电流环的动态响应。
软件滤波:
- 在ADC采样值上做数字滤波,比如滑动平均、中值滤波、一阶低通滤波。
- 优点:灵活,可以随时调整参数。
- 缺点:占用CPU时间,而且如果滤波深度太大,会降低控制带宽。
我的做法是:硬件滤波做基础,软件滤波做补充。硬件上先滤掉高频噪声,软件里再用一阶低通把残余的毛刺平滑掉。这样既能保证实时性,又能得到干净的信号。
// 一阶低通软件滤波实现
float current_filtered = 0.0f;
float alpha = 0.2f; // 滤波系数,越小越平滑,但响应越慢
float low_pass_filter(float raw_value) {
current_filtered = alpha * raw_value + (1.0f - alpha) * current_filtered;
return current_filtered;
}
注意:软件滤波的系数不能设得太小,否则电流环的响应速度会变慢,电机在动态工况下会感觉“肉肉的”。我一般把alpha设在0.1~0.3之间,具体要看你的PWM频率和电机电感大小。
本章知识体系
下面这张图,把电流采样与调理电路的核心流程串起来了。你可以把它当作设计时的检查清单。