4. 电流采样与调理:采样电阻、霍尔电流传感器、隔离运放、ADC采样时序与滤波
电流采样,说白了就是电机的“眼睛”。你算法算得再好,电流反馈不准,一切都是白搭。我见过太多工程师在仿真里跑得飞起,一上硬件就抓瞎,十有八九是电流采样这关没过。
这一节,咱们就把电流采样这事儿彻底聊透。从最基础的采样电阻,到隔离方案,再到ADC怎么采、采完怎么滤波,一条龙讲清楚。
4.1 采样电阻:最直接,也最“坑”
采样电阻,也叫分流器。原理就是欧姆定律,V = I × R。简单吧?但实际用起来,坑不少。
选型要点:
- 阻值选择: 阻值越大,信号越强,但发热也大。我个人习惯,让采样电阻上的压降在满量程时控制在50mV~100mV之间。比如你最大电流10A,选5mΩ的电阻,满量程压降就是50mV。这个范围,既好放大,发热也能接受。
- 功率与温漂: 功率要留余量,至少2倍。温漂是关键指标,我建议用±50ppm/℃以内的。有一次我在项目里用了便宜的±100ppm的电阻,结果电机跑热了,电流反馈飘了5%,查了一整天。
- 布局布线: 采样电阻要用开尔文接法(四线制)。把采样信号线和功率电流路径分开走,别让大电流的铜箔压降干扰到你的小信号。嗯,这里要注意,很多新手直接焊两根线上去,那测出来的根本不是电阻两端的真实电压。
避坑指南: 我曾经在一个量产项目里,采样电阻的焊盘设计得太小,回流焊后电阻立了起来(墓碑效应),导致开路。从那以后,我要求采样电阻的焊盘尺寸必须比规格书推荐的大20%,并且要开钢网检查。
4.2 霍尔电流传感器:隔离与便利
如果你需要隔离,或者电流太大(比如几十安培以上),采样电阻就不太合适了。这时候霍尔电流传感器上场。
霍尔传感器分两种:开环和闭环。
| 类型 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 开环 | 成本低、体积小、不饱和 | 精度一般、温漂大 | 对精度要求不高的场合 |
| 闭环 | 精度高、线性度好、响应快 | 成本高、体积大 | 伺服驱动、高性能控制 |
我个人做伺服驱动时,偏爱闭环霍尔。虽然贵一点,但精度和稳定性确实好。开环的,你想想看,温度一变,零点就飘,你还得做软件校准,麻烦。
使用注意:
- 霍尔传感器输出的是电压信号,通常要加一级运放做缓冲和偏置调整。
- 安装时,要尽量远离电机绕组的强磁场干扰。我见过有人把传感器紧贴着电机壳装,结果噪声大得没法看。
4.3 隔离运放:安全第一
在高压电机驱动里(比如母线电压超过60V),采样电路必须隔离。隔离运放就是干这个的。
常用的隔离方案有两种:
- 隔离运放 + 隔离电源: 比如AMC1200、ISO124。信号和电源都隔离,安全可靠。
- 隔离式ADC: 比如ADuM7701,直接把模拟量转成数字量再隔离。抗干扰能力更强。
我建议,如果你的ADC是片内的,用隔离运放就行。如果ADC是外置的,可以考虑隔离式ADC,省掉一级模拟传输的麻烦。
警告: 隔离运放的前端供电,必须用隔离电源模块。千万别从主控板的5V直接拉过去,那样隔离就白做了。我曾经见过一个工程师,隔离运放用了,但供电没隔离,结果高压侧一打火,整个控制板全烧了。
4.4 ADC采样时序:别让“同时”变成“先后”
电机控制里,三相电流需要“同时”采样。但ADC通常只有一个,怎么办?
有两种主流做法:
- 三路同步采样: 用三个独立的ADC,或者一个三通道同步采样的ADC(比如AD7606)。每个通道有自己的采样保持器,可以同时采样。这是最理想的方式。
- 单ADC轮询: 如果MCU只有一个ADC,那就只能轮流采。但要注意,三相电流变化很快,轮询会引入相位误差。我一般会在PWM的载波周期中点触发采样,这时候电流纹波最小,三相电流也最接近“同时”。
时序要点:
- 采样触发点:通常选在PWM的三角波顶点或底点。这时候开关噪声最小。
- 采样窗口:ADC的采样时间要足够长,让采样电容充满。我习惯设成1μs以上。
- 转换时间:转换完成后,要及时读取结果,别被中断打断。
小技巧: 如果你用单ADC轮询,可以在软件里做插值补偿。比如先采A相,再采B相,最后采C相。根据时间差,估算出“同时刻”的电流值。虽然不完美,但比直接用好很多。
4.5 滤波:硬件滤波与软件滤波
采样回来的电流信号,噪声很大。不滤波,你的PI控制器会疯掉。
硬件滤波:
- 在ADC输入端加RC低通滤波器。截止频率我一般设在开关频率的1/10左右。比如开关频率10kHz,截止频率就设1kHz。
- 电阻电容要选精密元件,别用普通的。R用1kΩ,C用100nF,算下来截止频率约1.6kHz,够用。
软件滤波:
- 均值滤波: 连续采N次,取平均。简单有效,但会引入延迟。N越大,延迟越大。
- 一阶低通滤波: 公式:y[n] = α × x[n] + (1-α) × y[n-1]。α越小,滤波越强,延迟也越大。我一般设α=0.1~0.3。
- 中值滤波: 对突发的尖峰噪声特别有效。采3~5次,取中间值。
// 一阶低通滤波示例
#define ALPHA 0.2f
float lowpass_filter(float current_raw, float current_prev) {
return ALPHA * current_raw + (1.0f - ALPHA) * current_prev;
}
我个人习惯,硬件滤波做粗滤,软件滤波做精滤。硬件滤掉高频开关噪声,软件滤掉低频纹波和毛刺。两者结合,效果最好。
避坑指南: 我曾经在一个项目里,软件滤波的系数设得太小,导致电流环响应极慢,电机一加速就过流保护。后来把α从0.05调到0.2,问题就解决了。滤波不是越强越好,要平衡响应速度和噪声抑制。
好了,电流采样这块就聊到这儿。说白了,采样电阻、霍尔传感器、隔离运放,是硬件层面的选择。ADC时序和滤波,是软件层面的配合。两者缺一不可。你想想看,硬件选得再好,软件采不准,也是白费功夫。反过来,软件再牛,硬件噪声大得离谱,神仙也救不了。
下一节,咱们聊聊电流环的PI参数整定。那又是一个大坑,到时候我把我压箱底的经验都抖出来。