3、单电阻采样原理:单电阻采样在FOC中的应用与采样窗口设计

单电阻采样,说白了就是只用一个电流传感器,去把电机三相电流都“算”出来。很多刚入行的朋友一听就觉得:这怎么可能?一个电阻怎么测三路电流?

我刚开始做FOC驱动时也有这个疑问。后来才明白,单电阻采样的核心秘密,就藏在母线电流的瞬时重构里。你想想看,电机三相电流在任何时刻都满足基尔霍夫电流定律:Ia + Ib + Ic = 0。只要我们能抓住两个关键时刻的母线电流,第三相自然就出来了。

3.1 单电阻采样的基本原理

单电阻采样通常把采样电阻放在逆变器的直流母线上,位置在下桥臂MOSFET的源极和地之间。当某一相的下桥臂导通时,该相的相电流就会流过这个电阻。我们只需要在PWM周期的特定时刻采样,就能得到对应相的电流值。

核心思想:利用PWM开关状态,在母线电阻上依次“看到”两相电流,再通过Ia+Ib+Ic=0计算出第三相。

具体来说,单电阻采样依赖的是空间矢量调制(SVPWM)的开关序列。在一个PWM周期内,会有两个非零电压矢量和一个零矢量。两个非零矢量分别对应两相下桥臂导通,这时候我们就能采样到这两相的电流。

我记得第一次在示波器上看到这个波形时,心里还挺震撼的——原来电流信号是“躲”在PWM开关噪声里的。你得找准那个采样窗口,不然读出来的全是毛刺。

3.2 采样窗口的时序设计

采样窗口设计是单电阻采样最关键的环节。窗口开得太早,电流还没建立稳定;开得太晚,下一个开关状态又来了。我见过不少工程师在这上面栽跟头。

一个典型的PWM周期里,采样窗口需要满足以下条件:

  • 最小建立时间(t_setup):下桥臂导通后,电流需要时间从振荡中稳定下来,通常需要1-2μs
  • 最小采样时间(t_sample):ADC采样保持时间,取决于ADC转换速率,一般0.5-1μs
  • 安全裕量(t_margin):防止开关噪声干扰,建议留0.5μs以上
参数 典型值 说明
t_setup 1.0 - 2.0 μs 电流建立稳定时间,与母线电压和电机电感有关
t_sample 0.5 - 1.0 μs ADC采样保持时间,12位ADC通常需要
t_margin 0.5 - 1.0 μs 安全裕量,防止开关噪声干扰
总窗口 2.0 - 4.0 μs 三者之和,决定了PWM最小占空比限制

注意:采样窗口的总时间直接限制了PWM的最小占空比。如果窗口需要3μs,PWM周期是50μs(20kHz),那么占空比不能低于6%。低于这个值,窗口就放不下了。

3.3 单电阻采样的三大痛点

单电阻采样虽然省成本,但坑也不少。我总结了一下,主要有三个老大难问题:

3.3.1 不可采样区域

当电压矢量落在扇区边界附近时,两个非零矢量的作用时间会变得很短。短到连采样窗口都放不下。这时候你就没法同时采到两相电流了。

我曾经在一个风机项目上遇到过这个问题。电机在低速轻载时,电流很小,矢量作用时间也短,采样窗口根本不够用。结果电流重构出来的波形全是锯齿,FOC根本跑不稳。

解决办法通常有两种:

  • 移相法:在不可采样区域,人为调整PWM波形,把采样窗口“挤”出来
  • 预测法:利用上一周期的电流值,结合电机模型预测当前电流

3.3.2 电流重构噪声

单电阻采样的电流信号是从母线电阻上取的,这个信号非常微弱,而且叠加了PWM开关噪声。如果PCB布局不好,采样回路里还会串入功率级的di/dt噪声。

我的经验是:采样电阻一定要用四端开尔文连接,把采样回路和功率回路分开。另外,在ADC输入端加一个RC低通滤波器,截止频率设在1-2MHz左右,能有效滤掉高频噪声。

3.3.3 零点漂移与偏置

采样电阻本身有温漂,运放也有偏置电压。这些误差在低速大电流时会特别明显。我建议在每次电机启动前,做一次零电流校准——让逆变器输出零矢量,然后读ADC值作为偏置。

小技巧:零电流校准最好做多次取平均,比如采64次。这样能有效抑制随机噪声对偏置值的影响。

3.4 单电阻采样的FOC应用流程

下面这张图展示了单电阻采样在FOC中的完整数据流。从PWM触发采样,到电流重构,再到Clark/Park变换,最后进入电流环。

单电阻采样FOC应用流程图 单电阻采样FOC应用流程图 PWM触发采样 ADC采样母线电流 电流重构 (Ia, Ib, Ic) Clark变换 (Iα, Iβ) Park变换 (Id, Iq) 采样窗口要求 • 最小建立时间: 1-2μs • 最小采样时间: 0.5-1μs • 安全裕量: 0.5-1μs 常见问题 • 不可采样区域 • 电流重构噪声 • 零点漂移与偏置

3.5 采样窗口的软件实现

在实际代码中,采样窗口的配置通常和PWM定时器紧密绑定。以STM32为例,我一般用高级定时器的触发事件来启动ADC采样。

// 伪代码示例:单电阻采样窗口配置
void SingleResistorSampling_Init(void) {
    // 1. 配置PWM定时器,中心对齐模式
    TIM1->CR1 |= TIM_CR1_CMS_1;  // 中心对齐模式2
    
    // 2. 配置ADC触发源为TIM1_TRGO
    TIM1->CR2 |= TIM_CR2_MMS_1;  // 更新事件作为触发输出
    
    // 3. 配置ADC采样时间
    ADC1->SMPR2 |= ADC_SMPR2_SMP0_0 | ADC_SMPR2_SMP0_1;  // 采样周期 = 28个ADC时钟
    
    // 4. 配置采样窗口偏移(在PWM周期的特定位置触发)
    // 假设PWM周期为1000个定时器时钟
    // 第一次采样在计数值=200时触发(下桥臂导通后)
    // 第二次采样在计数值=800时触发(另一个下桥臂导通后)
    TIM1->CCR1 = 200;  // 第一次采样触发点
    TIM1->CCR2 = 800;  // 第二次采样触发点
}

经验之谈:采样触发点的位置不是固定的。我一般会在电机启动后,先跑一段开环,观察示波器上电流建立的时间,然后动态调整CCR的值。不同电机、不同负载下,最优采样点会不一样。

3.6 单电阻采样的局限性

单电阻采样虽然便宜,但也不是万能的。我把它和双电阻、三电阻采样做了个对比:

对比项 单电阻 双电阻 三电阻
成本 最低 中等 最高
采样精度 中等(受重构误差影响) 较高 最高
低速性能 较差(不可采样区域大) 较好 最好
PCB布局难度 低 中等 高
适用场景 低成本、中高速应用 通用FOC驱动 高性能伺服、机器人

我个人习惯是:如果项目对成本敏感,而且电机主要运行在中高速区间(比如风机、水泵),单电阻采样完全够用。但如果是做伺服驱动器,要求零速大扭矩,那我建议还是上双电阻或三电阻,省得后面调试到崩溃。

避坑指南:我曾经在一个电动工具项目上硬用单电阻采样做低速大扭矩控制,结果电流重构出来的波形全是毛刺,FOC根本锁不住转子位置。后来换了双电阻,问题立刻解决。所以,选型时一定要评估好你的工况范围。

3.7 小结

单电阻采样是FOC电流采样方案里最“抠门”的一种,但也是最能考验工程师功底的一种。它要求你吃透PWM时序、ADC采样窗口、电流重构算法这三者的配合。只要把采样窗口设计好了,单电阻采样完全可以在中高速应用中交出满意的答卷。

嗯,这一章的内容就到这里。采样窗口的时序参数、不可采样区域的应对策略、以及代码实现中的细节,都是实际项目中绕不开的坎。希望你能把这些原理吃透,后面做项目时少走弯路。