3. 电流采样技术:从电阻到磁通门
电流采样,是三环控制里最基础也最容易被忽视的一环。你想想看,电流环要是采不准,后面的速度环、位置环全是空中楼阁。我这些年调试过的驱动器,十有八九的奇怪抖动问题,追根溯源都是电流采样埋的坑。
这一节,咱们就把电流采样的几种主流方案掰开揉碎讲清楚。采样电阻、霍尔传感器、磁通门传感器,各自适合什么场景,电路上要注意什么,抗混叠滤波怎么做。嗯,都是实战里每天要面对的东西。
3.1 电流采样电阻(Shunt)原理
采样电阻,也叫分流器(Shunt),说白了就是欧姆定律的直接应用。电流流过已知阻值的电阻,测它两端的电压,I = V / R。简单粗暴,但非常有效。
我最早做低压伺服驱动时,用的就是Shunt方案。成本低、线性度好、响应快,对于大多数电机控制场景,它都是首选。
关键参数选型:
- 阻值选择: 不能太大,否则发热严重;不能太小,否则信噪比不够。一般按满载时压降50~100mV来选。比如额定电流10A,选5mΩ电阻,满载压降50mV。
- 功率额定: P = I²R,留2倍以上余量。10A电流、5mΩ电阻,理论功耗0.5W,选1W或2W的稳妥。
- 温漂系数: 尽量选±50ppm/℃以内的。我吃过亏,用了±100ppm的电阻,电机跑热后电流读数漂了5%。
- 寄生电感: 高频应用要关注。贴片电阻的寄生电感比插件式小,适合PWM开关频率高的场合。
采样电阻的布局也有讲究。我建议把它放在下桥臂MOS管的源极和地之间,这样共模电压低,运放好处理。当然,也有放在母线侧的,但那样共模电压高,对运放的共模抑制比要求就上去了。
3.2 霍尔电流传感器
霍尔电流传感器,利用的是霍尔效应。电流流过导体,产生磁场,霍尔元件感应磁场强度,输出与电流成比例的电压。它最大的优点是——隔离。不需要像Shunt那样直接接入主回路。
我做过一个项目,母线电压高达600V,用Shunt的话隔离成本太高。后来换了霍尔传感器,一片ACS712就搞定了,省了不少事。
| 对比项 | 采样电阻(Shunt) | 霍尔电流传感器 |
|---|---|---|
| 隔离方式 | 无隔离,需额外隔离电路 | 自带隔离 |
| 带宽 | 高(可达MHz级) | 中等(典型100kHz以内) |
| 精度 | 高(0.1%~1%) | 中等(1%~5%) |
| 成本 | 低 | 中等 |
| 功耗 | 有发热 | 几乎无发热 |
| 体积 | 小 | 中等 |
霍尔传感器有个天生的短板——零点漂移。温度变化、应力变化都会让零点跑偏。我建议在软件里做零点校准,每次上电时采样一次零电流输出,作为偏置减掉。
注意: 霍尔传感器对安装位置敏感。如果旁边有大电流母线,漏磁场会干扰测量。布局时尽量远离变压器、电抗器等强磁场源。
3.3 磁通门传感器
磁通门传感器,精度最高的电流测量方案,没有之一。它利用磁芯的饱和特性,通过激励线圈和检测线圈来测量电流产生的磁场。精度能做到0.1%以内,温漂极低。
但代价也很明显——贵,体积大,电路复杂。我只有在精密实验室电源和高端伺服驱动上才舍得用。一般工业应用,说实话,用Shunt或霍尔就够了。
磁通门的工作原理有点绕,我简单说:激励线圈让磁芯交替饱和,外电流产生的磁场会打破正负半周的对称性,检测线圈感应出差值信号,这个差值正比于被测电流。嗯,理解到这个程度就够了,具体电路设计交给硬件同事去搞。
3.4 采样电路设计与抗混叠滤波
采样电路设计,核心就两件事:把信号调理到ADC能接受的范围内,把高频噪声滤掉。
先说调理电路。Shunt出来的信号是双极性的(电流正反向),而大多数ADC是单极性输入。所以需要加一个偏置电压,把信号抬到ADC的中间电平。比如ADC参考电压3.3V,偏置到1.65V,这样±50mV的信号就变成1.6V~1.7V。
运放选型上,我推荐用零漂移运放,比如OPA333、AD8628。它们的失调电压只有微伏级,不会吃掉小信号。
我的习惯: 在运放输入端加一对背靠背的钳位二极管(如BAT54S),把输入电压钳在VCC+0.3V和GND-0.3V以内。万一电机反电动势把电压打高了,运放不会烧。
接下来是抗混叠滤波。这是个大坑,我见过太多人忽略它。
为什么要抗混叠?因为ADC采样是离散的,根据奈奎斯特定理,高于采样频率一半的信号会被混叠到低频段,变成虚假的电流信息。你想想看,PWM开关频率20kHz,采样频率40kHz,如果20kHz的开关噪声没滤干净,混叠下来就是直流分量——电流环会莫名其妙地偏掉。
抗混叠滤波器一般用二阶低通有源滤波器,截止频率设在采样频率的1/5到1/3。比如采样频率40kHz,截止频率设在8kHz~13kHz。
// 二阶低通滤波器系数计算示例
// 采样频率 fs = 40kHz
// 截止频率 fc = 10kHz
// 品质因数 Q = 0.707(巴特沃斯响应)
// 预扭曲频率
float w0 = 2 * PI * fc;
float T = 1.0 / fs;
// 双线性变换系数
float a0 = 4 + 2 * w0 * T / Q + w0 * w0 * T * T;
float b0 = w0 * w0 * T * T / a0;
float b1 = 2 * w0 * w0 * T * T / a0;
float b2 = w0 * w0 * T * T / a0;
float a1 = (2 * w0 * w0 * T * T - 8) / a0;
float a2 = (4 - 2 * w0 * T / Q + w0 * w0 * T * T) / a0;
// 滤波函数
float lowpass_filter(float input) {
static float x1 = 0, x2 = 0, y1 = 0, y2 = 0;
float output = b0 * input + b1 * x1 + b2 * x2 - a1 * y1 - a2 * y2;
x2 = x1; x1 = input;
y2 = y1; y1 = output;
return output;
}
这段代码我用了很多年,双线性变换法,稳定可靠。注意系数要在初始化时算好,不要在中断里实时算,浪费CPU。
我曾经踩过的坑: 滤波器阶数不是越高越好。二阶滤波的相位延迟大约90°,四阶就到180°了。电流环对相位敏感,延迟太大会影响带宽。我一般只用二阶,最多三阶。
3.5 三种方案的选择策略
说了这么多,到底怎么选?我总结了一张决策图,帮你快速判断。
这张图我画了好几个版本,最后定下来这个决策逻辑。你照着走,基本不会选错。
3.6 实战中的几个细节
最后聊几个容易忽略的细节,都是我拿板子换来的经验。
- 采样时刻要避开PWM开关边沿: PWM开关瞬间,电流有尖峰。我习惯在PWM周期的中间点采样,避开上升沿和下降沿。如果ADC支持定时触发,配合PWM定时器做同步采样,效果最好。
- 差分走线: 从Shunt到运放的信号线,必须差分走线,等长等距,远离高频开关节点。我见过有人把信号线走在PWM线旁边,结果采出来的全是噪声。
- PCB开窗: Shunt电阻下面不要铺铜,留出散热空间。大电流时电阻发热,PCB铜皮会传导热量到运放,导致温漂。
- 多相电流采样: 三相电机至少采两相电流,第三相通过KCL算出来。但要注意,如果两相采样时刻不同步,算出来的第三相会有误差。我建议用三个采样保持器同时采样,或者用双ADC交替采样。
一个小技巧: 如果ADC分辨率不够(比如12位),可以用过采样技术。以4倍过采样为例,每采4个点平均一次,等效分辨率提高1位。代价是采样率降低,但很多场合够用了。