第四章 电流采样与重构:从物理量到控制信号的桥梁

电流采样,说白了就是FOC控制的眼睛。眼睛不好使,后面算法再牛也白搭。我刚开始做电机驱动时,就吃过采样不准的亏——电机嗡嗡响,转速还抖得厉害。后来才发现,是采样时序没调好。

这一章,我们就把电流采样这件事彻底讲透。从硬件原理到软件实现,再到Simulink建模,一条龙搞定。

4.1 相电流采样方法概述

FOC控制需要知道两相电流(通常是A相和B相),第三相可以通过基尔霍夫定律算出来。采样方法主要有三种:单电阻、双电阻、三电阻。

你可能会问:为什么不用三电阻?简单啊。但成本、体积、功耗,这些工程现实问题会让你不得不选更少的电阻。

采样方式 电阻数量 成本 采样精度 适用场景
单电阻 1个 最低 中等(需重构) 低成本、小体积
双电阻 2个 中等 较高 主流方案
三电阻 3个 最高 最高 高精度、大功率

4.2 单电阻采样原理与电流重构

单电阻采样,只在直流母线上放一个采样电阻。听起来很省,但有个大问题:你只能测到母线电流,不是相电流。

那怎么得到相电流?靠重构。

基本原理是这样的:在PWM周期的不同时刻,母线电流反映的是不同相的电流。比如,当A相上管导通、B相下管导通时,母线电流就是A相电流。通过在不同时刻采样,就能拼出三相电流。

核心要点:单电阻采样的关键在于采样时刻的选择。必须在非零电压矢量作用期间采样,且采样窗口要避开开关噪声。

我在项目中遇到过一个问题:当调制比很低时,非零电压矢量的持续时间太短,根本来不及采样。这时候电流重构就会失败,电机直接抖起来。

避坑指南:我曾经因为没处理好低调制比区域的重构,导致电机在低速时剧烈抖动。后来加了最小脉宽限制和重构失败处理,才算搞定。

4.3 双电阻采样原理

双电阻采样,在下桥臂的A相和B相各放一个电阻。这是目前最主流的方案。

为什么主流?因为简单可靠。你只需要在PWM周期的中点,同时采样两相电流就行。不需要重构,不需要复杂的时序计算。

采样时机:当所有下管都导通时(零矢量000),电流从下管流过采样电阻。这时候采样,得到的就是真实的相电流。

个人经验:我习惯在PWM定时器计数到0时触发ADC采样。这时候所有下管都导通,采样窗口最稳定。记得要避开死区时间,否则采到的电流是错的。

4.4 三电阻采样原理

三电阻采样,每相下桥臂各放一个电阻。精度最高,但成本也最高。

它的好处是:任何时候都能采样,不受PWM状态限制。而且可以检测三相电流的平衡性,对故障诊断很有帮助。

不过说实话,对于大多数应用,双电阻已经足够了。三电阻更多用在伺服驱动器、大功率变频器这些对精度要求极高的场合。

4.5 电流重构算法详解

单电阻采样的核心,就是电流重构算法。我把它拆成三步:

  1. 确定采样时刻:根据当前PWM占空比,找到两个非零电压矢量的作用区间
  2. 采集母线电流:在两个时刻分别采样,得到I1和I2
  3. 重构相电流:根据电压矢量与相电流的对应关系,反推出Ia、Ib、Ic

举个例子,假设当前是扇区I,电压矢量是V1(100)和V2(110):

  • 在V1作用期间采样,母线电流 = Ia
  • 在V2作用期间采样,母线电流 = -Ic
  • 然后通过Ia + Ib + Ic = 0,算出Ib

嗯,这里要注意:采样顺序不能搞反。我刚开始就犯过这个错,把V1和V2的采样值搞混了,结果重构出来的电流相位全反了。

4.6 采样时序设计

采样时序设计,是电流采样中最容易出问题的地方。我总结了一个口诀:避开死区,对齐中点,留足窗口

具体来说:

  • 避开死区:死区时间内上下管都关断,电流路径不确定。采样必须避开死区
  • 对齐中点:双电阻采样时,在PWM周期中点采样最稳定
  • 留足窗口:ADC采样需要时间(通常几百ns到几us),要确保采样窗口足够

采样时序参数参考(以10kHz PWM为例):

  • PWM周期:100us
  • 死区时间:2us
  • ADC采样时间:1us
  • 采样窗口:在周期中点前后各5us
  • 触发方式:PWM定时器计数到0时触发

你想想看,如果采样窗口只有0.5us,而ADC需要1us才能完成采样,那采到的数据肯定是错的。所以设计时序时,一定要算好时间余量。

4.7 Simulink建模实现

在Simulink中建模电流采样,我一般分三步走:

  1. PWM生成模块:产生三相PWM波形,包含死区时间
  2. 采样触发模块:根据PWM状态,生成ADC触发信号
  3. 电流重构模块:实现单电阻或双电阻的电流重构算法

下面是一个双电阻采样的Simulink模型核心代码:

function [Ia, Ib, Ic] = CurrentSampling(PWM_A, PWM_B, PWM_C, ADC_Val_A, ADC_Val_B)
    % 双电阻采样:在PWM周期中点采样
    % 输入:PWM信号,ADC采样值
    % 输出:三相电流
    
    % 判断是否在采样窗口内
    if (PWM_A == 0 && PWM_B == 0 && PWM_C == 0)
        % 所有下管导通,采样有效
        Ia = ADC_Val_A * CurrentScale;
        Ib = ADC_Val_B * CurrentScale;
        Ic = -(Ia + Ib);  % 基尔霍夫定律
    else
        % 不在采样窗口,保持上次值
        Ia = Ia_prev;
        Ib = Ib_prev;
        Ic = Ic_prev;
    end
    
    % 更新保持值
    Ia_prev = Ia;
    Ib_prev = Ib;
    Ic_prev = Ic;
end

建模技巧:我习惯在Simulink中用Stateflow来实现采样时序逻辑。这样时序控制更直观,而且代码生成时效率也高。

4.8 知识体系总览

为了让你对整个电流采样体系有个全局认识,我画了一张图:

电流采样与重构知识体系 电流采样方法 单电阻采样 双电阻采样 三电阻采样 核心技术 电流重构算法 采样时序设计 ADC触发配置 实现工具:Simulink + 嵌入式代码生成

这张图把整个知识体系串起来了。从顶层的采样方法选择,到中间的核心技术,再到底层的实现工具,每一步都环环相扣。

最后说一句:电流采样看起来简单,但真正做好不容易。我建议你在实际项目中,先用双电阻方案起步,等把时序和重构都吃透了,再考虑单电阻降成本或者三电阻提精度。

本章小结:

  • 单电阻采样成本低,但需要电流重构,低调制比区域容易出问题
  • 双电阻采样是主流方案,简单可靠,适合大多数应用
  • 三电阻采样精度最高,适合高要求场合
  • 采样时序设计要避开死区、对齐中点、留足窗口
  • Simulink建模时,用Stateflow实现时序逻辑最方便

专注资料整理