4. 电流采样原理:三相电流采样方法

好,咱们进入电流环调参前,有个绕不开的话题——电流采样。说白了,FOC 控制的核心就是电流。电流采不准,后面调得再好也是白搭。我见过不少工程师,花大把时间调 PI 参数,结果问题出在采样上,白白浪费了时间。

今天咱们就把三种采样方法掰开揉碎了讲清楚。单电阻、双电阻、三电阻,各有各的脾气。

4.1 三电阻采样法

这是最直观的方法。三个下桥臂各串一个采样电阻,分别测三相电流。你想想看,硬件上最完整,软件上也最简单。

优点:

  • 每相独立采样,互不干扰
  • 采样窗口宽,时序好安排
  • 低速、高速都能用

缺点:

  • 成本高,三个电阻加三个运放
  • PCB 面积大
  • 三路 ADC 同步要求高

采样时序要点:

三电阻采样通常在 PWM 中心对齐时触发。我习惯在 PWM 周期的中间点采样,这时候电流最稳定。具体来说,就是计数器上溢或下溢时触发 ADC。

我的经验: 三电阻采样时,三个 ADC 通道最好用同一个触发源。我在一个项目里吃过亏,三个通道分别触发,结果采样时刻差了几个微秒,电流波形看着就不对劲。

4.2 双电阻采样法

这是目前最常用的方案。只采样两相电流,第三相通过基尔霍夫电流定律算出来。Ia + Ib + Ic = 0,对吧?

优点:

  • 成本适中,两个电阻加两个运放
  • PCB 布局相对简单
  • 性能足够大多数应用

缺点:

  • 低调制比区域采样困难
  • 需要处理扇区切换时的盲区

这里有个关键问题——什么时候采不到?当 PWM 占空比接近 0% 或 100% 时,某个下桥臂导通时间太短,电流还没稳定,ADC 就触发了。这就是所谓的“采样盲区”。

避坑指南: 我曾经在一个伺服项目里,电机低速运行时电流噪声特别大。查了两天,最后发现是采样时刻刚好落在下桥臂关断的瞬间。后来我把采样点往中间移了移,问题就解决了。

双电阻采样时序:

// 伪代码示例:双电阻采样触发逻辑
if (PWM_Counter == PWM_Period/2) {
    // 中心对齐触发
    ADC_StartConversion(CH_A);
    ADC_StartConversion(CH_B);
    // CH_C = -(CH_A + CH_B)
}

4.3 单电阻采样法

单电阻采样,说白了就是只用一个电阻,通过在不同时刻采样来重构三相电流。成本最低,但难度最大。

原理: 母线电流在不同开关状态下,流经的相不同。通过在不同 PWM 状态切换时采样,就能推算出各相电流。

优点:

  • 成本极低,一个电阻一个运放
  • PCB 面积最小

缺点:

  • 采样时序极其复杂
  • 低速性能差
  • 对 ADC 采样速度要求高
  • 噪声大,精度低

采样时序分析:

单电阻采样需要在每个 PWM 周期内采样两次。第一次在状态切换后,第二次在另一个状态切换后。两次采样值通过矩阵运算,解出三相电流。

举个例子:在扇区 I 时,第一次采样得到 Ia,第二次采样得到 -Ic,然后算出 Ib = -(Ia + Ic)。

误差来源:

误差类型 原因 影响
采样时刻误差 ADC 触发延迟 电流相位偏移
振铃误差 开关管导通瞬间的振荡 采样值偏大或偏小
死区时间误差 上下桥臂切换时的死区 电流重构失真
ADC 量化误差 ADC 分辨率有限 低速时电流纹波大

我的建议: 如果你刚开始做 FOC,别碰单电阻。先老老实实用双电阻或三电阻。单电阻采样看着省钱,但调试时间成本高得多。我见过一个团队,单电阻方案调了三个月还没搞定,最后换回双电阻,一周就跑起来了。

4.4 三种方法对比

项目 三电阻 双电阻 单电阻
成本
精度 中高
采样时序复杂度
低速性能
高速性能
适用场景 高端伺服 工业驱动 低成本消费类

4.5 采样误差分析与补偿

不管用哪种方法,误差总是存在的。咱们得知道误差从哪来,怎么补。

主要误差源:

  1. 偏置误差: 运放的输入偏置电压。表现为电流零点偏移。
  2. 增益误差: 采样电阻精度、运放增益偏差。表现为电流幅值不准。
  3. 相位延迟: 从电流变化到 ADC 采样完成,存在延迟。
  4. 噪声干扰: 开关管动作产生的共模噪声。

注意: 偏置误差可以通过软件校准。我一般在电机静止时,连续采样 100 次取平均,作为零点偏置。然后每次采样都减去这个偏置值。增益误差嘛,需要外部标准电流源来标定。

补偿方法:

// 偏置校准示例
float offset_A = 0;
for (int i = 0; i < 100; i++) {
    offset_A += ADC_Read(CH_A);
}
offset_A /= 100;  // 零点偏置

// 实际使用时
float Ia = ADC_Read(CH_A) - offset_A;
float Ia_scaled = Ia * gain_A;  // 增益校准

我的习惯: 每次上电都做一次偏置校准。温度变化会影响运放的偏置,所以如果环境温度变化大,建议定期重新校准。嗯,这个细节很多人会忽略。

好了,电流采样这块就讲这么多。三种方法各有适用场景,我个人最推荐双电阻,性价比最高。下一节咱们开始讲电流环的 PI 参数整定,那才是真正考验功夫的地方。