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 三种方案的选择策略

说了这么多,到底怎么选?我总结了一张决策图,帮你快速判断。

电流采样方案决策流程 需要隔离? 是 精度要求高? 是 磁通门传感器 否 霍尔电流传感器 否 采样电阻 决策说明: 1. 不需要隔离 → 采样电阻(成本最低,性能最好) 2. 需要隔离 + 精度要求高 → 磁通门(0.1%级精度) 3. 需要隔离 + 精度要求一般 → 霍尔传感器(性价比之选) 4. 如果预算充足且对体积不敏感,磁通门是终极方案 5. 低压(<60V)且追求极致性能,采样电阻+隔离运放

这张图我画了好几个版本,最后定下来这个决策逻辑。你照着走,基本不会选错。

3.6 实战中的几个细节

最后聊几个容易忽略的细节,都是我拿板子换来的经验。

  • 采样时刻要避开PWM开关边沿: PWM开关瞬间,电流有尖峰。我习惯在PWM周期的中间点采样,避开上升沿和下降沿。如果ADC支持定时触发,配合PWM定时器做同步采样,效果最好。
  • 差分走线: 从Shunt到运放的信号线,必须差分走线,等长等距,远离高频开关节点。我见过有人把信号线走在PWM线旁边,结果采出来的全是噪声。
  • PCB开窗: Shunt电阻下面不要铺铜,留出散热空间。大电流时电阻发热,PCB铜皮会传导热量到运放,导致温漂。
  • 多相电流采样: 三相电机至少采两相电流,第三相通过KCL算出来。但要注意,如果两相采样时刻不同步,算出来的第三相会有误差。我建议用三个采样保持器同时采样,或者用双ADC交替采样。

一个小技巧: 如果ADC分辨率不够(比如12位),可以用过采样技术。以4倍过采样为例,每采4个点平均一次,等效分辨率提高1位。代价是采样率降低,但很多场合够用了。