第四章 电流采样与重构:从物理量到控制信号的桥梁
电流采样,说白了就是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 电流重构算法详解
单电阻采样的核心,就是电流重构算法。我把它拆成三步:
- 确定采样时刻:根据当前PWM占空比,找到两个非零电压矢量的作用区间
- 采集母线电流:在两个时刻分别采样,得到I1和I2
- 重构相电流:根据电压矢量与相电流的对应关系,反推出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中建模电流采样,我一般分三步走:
- PWM生成模块:产生三相PWM波形,包含死区时间
- 采样触发模块:根据PWM状态,生成ADC触发信号
- 电流重构模块:实现单电阻或双电阻的电流重构算法
下面是一个双电阻采样的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 知识体系总览
为了让你对整个电流采样体系有个全局认识,我画了一张图:
这张图把整个知识体系串起来了。从顶层的采样方法选择,到中间的核心技术,再到底层的实现工具,每一步都环环相扣。
最后说一句:电流采样看起来简单,但真正做好不容易。我建议你在实际项目中,先用双电阻方案起步,等把时序和重构都吃透了,再考虑单电阻降成本或者三电阻提精度。
本章小结:
- 单电阻采样成本低,但需要电流重构,低调制比区域容易出问题
- 双电阻采样是主流方案,简单可靠,适合大多数应用
- 三电阻采样精度最高,适合高要求场合
- 采样时序设计要避开死区、对齐中点、留足窗口
- Simulink建模时,用Stateflow实现时序逻辑最方便