4、电流采样与重构:单电阻、双电阻、三电阻采样原理,相电流重构算法
电流采样,说白了就是FOC控制的眼睛。眼睛不好使,算法再牛也白搭。
我刚开始做无传感器FOC时,踩过最大的坑就是电流采样。当时板子转起来好好的,一加载就抖得跟筛子似的。查了三天,最后发现是采样时序差了那么几个微秒。嗯,从那以后,我对电流采样这块就特别较真。
4.1 三种采样方案,怎么选?
目前主流的电流采样方案就三种:单电阻、双电阻、三电阻。各有各的脾气,我一个个说。
4.1.1 三电阻采样——最直接,也最贵
三电阻采样,就是在电机三相的下桥臂各串一个采样电阻。三个ADC通道同时采,三相电流直接读出来。
优点:
- 三相电流同时获取,不需要重构
- 采样窗口宽,时序压力小
- 低速、零速性能好
缺点:
- 成本高(三个电阻+三个运放+三个ADC通道)
- PCB面积大
- 三路增益需要匹配,否则有偏置误差
4.1.2 双电阻采样——性价比之王
双电阻采样只采两相电流,第三相通过基尔霍夫电流定律算出来:Iu + Iv + Iw = 0,所以 Iw = -(Iu + Iv)。
这是目前工业界最主流的方案。我做过的大部分项目都用的它。
优点:
- 成本适中(两个电阻+两个运放)
- 重构算法简单
- 性能均衡
缺点:
- 存在不可观测区域(低调制比区域)
- 需要处理采样死区
4.1.3 单电阻采样——最省钱,也最折腾
单电阻采样只在下桥臂公共端放一个采样电阻。通过在不同PWM状态下采样,重构出三相电流。
说实话,我一般不建议新手上来就搞单电阻。除非成本压得特别死,比如几十块钱的电动工具、风扇驱动这类产品。
优点:
- 成本最低(一个电阻+一个运放)
- PCB面积最小
- 没有增益匹配问题
缺点:
- 重构算法复杂
- 存在大量不可观测区域
- 低速性能差
- 对PWM同步要求极高
4.2 相电流重构算法——单电阻的核心
既然单电阻这么坑,为什么还要讲?因为理解了单电阻的重构原理,你就真正理解了电流采样的本质。
4.2.1 基本原理
单电阻采样的核心思想:在一个PWM周期内,不同开关状态下,流过采样电阻的电流对应不同的相电流。
举个例子,当U相上桥臂导通、V相和W相下桥臂导通时,电流路径是:U相上桥臂 → 电机 → V相和W相下桥臂 → 采样电阻。此时采样电阻上的电流就是U相电流。
同理,通过切换不同的开关状态,我们可以依次采样到两相电流,第三相用基尔霍夫定律算出来。
4.2.2 采样时序与不可观测区域
这里有个关键问题:每次切换开关状态后,电流需要一段时间才能稳定下来。这个时间叫「采样建立时间」,一般需要1-2μs。
如果PWM占空比太靠近0%或100%,有效采样窗口就太短了,根本来不及采。这就是所谓的「不可观测区域」。
4.2.3 重构算法实现
下面给一个简单的单电阻重构伪代码。实际项目中还要加滤波、补偿、异常处理,这里只展示核心逻辑。
// 单电阻相电流重构
// 假设PWM采用中心对齐模式
void CurrentReconstruction(void)
{
// 获取当前PWM比较值
uint16_t cmp1 = TIM1->CCR1; // U相
uint16_t cmp2 = TIM1->CCR2; // V相
uint16_t cmp3 = TIM1->CCR3; // W相
// 判断当前有效的采样状态
// 状态1: U上桥臂导通,V、W下桥臂导通 → 采样U相电流
// 状态2: V上桥臂导通,U、W下桥臂导通 → 采样V相电流
if (cmp1 > cmp2 && cmp1 > cmp3) {
// U相占空比最大,在PWM周期中间采样U相
sample_phase = PHASE_U;
adc_value = ReadADC();
Iu = adc_value * current_scale;
}
else if (cmp2 > cmp1 && cmp2 > cmp3) {
// V相占空比最大,采样V相
sample_phase = PHASE_V;
adc_value = ReadADC();
Iv = adc_value * current_scale;
}
// 计算第三相电流
Iw = -(Iu + Iv);
// Clarke变换
Ialpha = Iu;
Ibeta = (Iu + 2*Iv) / 1.732f;
}
4.3 采样误差分析与补偿
采样误差这东西,你不管它,它就会在控制环路里放大,最后表现为转矩脉动、噪音、甚至震荡。
4.3.1 常见误差来源
| 误差类型 | 原因 | 影响 |
|---|---|---|
| 偏置误差 | 运放输入偏置、ADC偏移 | 产生直流分量,导致转矩脉动 |
| 增益误差 | 采样电阻精度、运放增益偏差 | 相电流幅值不匹配,产生2次谐波 |
| 时序误差 | PWM与ADC触发不同步 | 采样点偏移,电流畸变 |
| 噪声干扰 | 开关噪声、地弹 | 采样值抖动,控制不稳定 |
4.3.2 我的补偿策略
我一般会在初始化阶段做一次自动校准。电机不转的时候,采100次电流取平均,作为偏置值存起来。后面每次采样都减去这个偏置。
增益误差嘛,我习惯用硬件解决——选1%精度的电阻,运放用零漂移的。软件补偿太麻烦,而且效果有限。
4.4 知识体系总览
下面这张图,把电流采样与重构的核心逻辑串起来了。你照着这个思路去理解,就不会乱。
电流采样这块,说白了就是「成本」和「性能」的博弈。三电阻省心但费钱,单电阻省钱但费心,双电阻是大多数人的选择。
我个人建议:如果你刚开始做FOC,先拿双电阻方案练手。等把电流环调顺了,再考虑要不要为了省几毛钱去折腾单电阻。毕竟,项目进度比那几毛钱值钱多了。
公众号:蓝海资料掘金营,微信deep3321