4、电流采样与重构:单电阻/双电阻/三电阻采样原理、电流重构算法、采样噪声滤波
好,咱们进入FOC控制里最“接地气”的一环——电流采样。
说实话,我在刚入行那会儿,觉得SVPWM和坐标变换才是核心技术,电流采样嘛,不就是用ADC读个电压吗?后来被现实狠狠教育了一顿。你算法写得再漂亮,电流采不准,整个FOC就是空中楼阁。电机转起来嗡嗡响、力矩抖得像筛子,十有八九是采样环节出了问题。
今天咱们就把电流采样这事儿彻底聊透。从硬件拓扑到软件重构,再到滤波处理,一条线串下来。
4.1 三种采样电阻拓扑:选型与原理
先看硬件。电流采样最常用的方式,是在逆变器的电流回路上串联精密电阻,测电阻两端的压降,再用ADC读回来。根据电阻数量和位置的不同,分三种方案。
4.1.1 三电阻采样
这是最“老实”的方案。在逆变器下桥臂的三个发射极,各接一个采样电阻到地。每个电阻负责一相电流。
- 优点:三相电流独立测量,没有重构延迟,精度最高。
- 缺点:三个电阻、三个运放、三个ADC通道,成本高、PCB面积大。
- 适用场景:伺服驱动器、高端机器人关节,对电流纹波和动态响应要求极高的场合。
我在做一款20kW的伺服驱动器时,用的就是三电阻方案。当时电机在低速重载下要求力矩波动小于1%,双电阻重构出来的电流波形实在达不到要求,只能上三电阻。嗯,成本翻了一倍,但效果确实立竿见影。
4.1.2 双电阻采样
这是工业界最主流的方案。只在V相和W相下桥臂放采样电阻,U相电流通过基尔霍夫电流定律算出来:Iu = -(Iv + Iw)。
- 优点:比三电阻少一个通道,成本适中。
- 缺点:在SVPWM某些扇区,有一相电流无法直接采样,需要重构。
- 适用场景:大部分通用变频器、电动工具、家电驱动。
说白了,双电阻是性价比之王。我个人的习惯是,只要成本允许,优先选双电阻。重构算法虽然麻烦点,但做熟了也就那么回事。
4.1.3 单电阻采样
这个就有点“极限运动”的味道了。只在直流母线上放一个采样电阻,通过在不同PWM开关状态下采样,反推出三相电流。
- 优点:成本最低,一个电阻、一个运放搞定。
- 缺点:重构算法极其复杂,在低调制比区域(比如电机刚启动时)几乎无法准确采样。
- 适用场景:成本极度敏感的消费类产品,比如小风扇、低端水泵。
我曾经在一个吸尘器项目里被迫用单电阻方案,BOM成本压到极致。结果调试重构算法调了整整两周,最后还是加了个小技巧——在低调制区主动注入一个“测量脉冲”才搞定。你想想看,为了省几毛钱,多花了多少开发时间?
4.2 电流重构算法:从硬件到软件的桥梁
好,硬件选型定了,接下来就是软件怎么把ADC读到的电压值变成真正的电流值。
这里有个核心概念:采样时刻。你必须在PWM周期的特定时刻去采样,才能采到正确的电流。
4.2.1 双电阻重构原理
双电阻采样,为什么需要重构?
因为SVPWM的每个扇区里,总有一相下桥臂的导通时间非常短(甚至为零)。如果那个时刻去采样,电流还没建立起来,读到的值就是错的。
举个例子,在扇区I(0°~60°),U相上桥臂一直导通,下桥臂一直关断。这时候U相下桥臂的采样电阻上根本没有电流流过。你采U相干嘛?
所以双电阻重构的思路是:
- 在每个PWM周期内,只采样V相和W相下桥臂的电流。
- 利用
Iu = -(Iv + Iw)算出U相电流。 - 但要注意,V相和W相也不是随时都能采。必须等到两相下桥臂都导通的时候,才能同时采样。
这个“同时导通”的时间窗口,就是SVPWM里两个非零矢量的作用时间。说白了,你需要在PWM周期的中间点(通常是计数器归零或达到峰值时)触发ADC。
// 伪代码:双电阻采样触发逻辑
// 假设PWM中心对齐模式
if (PWM_CNT == 0) // 周期起始点
{
// 此时所有下桥臂导通,采样V相和W相
ADC_StartConversion(CH_V, CH_W);
}
4.2.2 单电阻重构的“三态采样”
单电阻就更有意思了。你只有一个电阻在直流母线上,母线电流在不同开关状态下,对应的是不同相的电流。
- 当U上、V下、W下导通时,母线电流 = Iu
- 当U下、V上、W下导通时,母线电流 = Iv
- 当U下、V下、W上导通时,母线电流 = Iw
所以,你需要在同一个PWM周期内,至少采样两次(甚至三次)母线电流,每次对应不同的开关状态,然后拼出三相电流。
这里有个大坑:采样窗口太短。当调制比很低时,某些开关状态的持续时间可能只有几百纳秒,ADC根本来不及建立。我当年就掉进过这个坑,电机一转起来电流波形就跟鬼画符一样。
解决办法?要么加硬件——用更快的ADC和运放;要么改软件——在低调制区主动插入一个“测量矢量”,人为拉长采样窗口。当然,这会增加谐波,属于“两害相权取其轻”。
4.3 采样噪声滤波:别让ADC毁了你的FOC
电流采回来了,但ADC读到的值里全是噪声。开关管的开关噪声、电机反电动势的耦合、地弹……随便哪个都能让你的电流波形抖成心电图。
我见过很多新手,一上来就上卡尔曼滤波,觉得高大上。其实没必要。对于电流采样,简单粗暴的方法往往最有效。
4.3.1 硬件滤波
在ADC输入端加RC低通滤波器。截止频率一般设在开关频率的1/10左右。
比如你的PWM开关频率是10kHz,那RC滤波器的截止频率设在1kHz左右。R取1kΩ,C取0.1μF,算下来截止频率约1.6kHz,够用。
4.3.2 软件滤波
软件上,我推荐用滑动平均滤波或一阶低通滤波。
滑动平均滤波:取最近N次采样值的平均值。N一般取4~16。优点是平滑效果好,缺点是会引入N个采样周期的延迟。
// 滑动平均滤波示例
#define FILTER_LEN 8
static int16_t buffer[FILTER_LEN];
static uint8_t index = 0;
static int32_t sum = 0;
int16_t moving_average(int16_t new_sample)
{
sum -= buffer[index];
sum += new_sample;
buffer[index] = new_sample;
index = (index + 1) % FILTER_LEN;
return (int16_t)(sum / FILTER_LEN);
}
一阶低通滤波:y[n] = α * x[n] + (1-α) * y[n-1]。α越小,滤波越强,延迟越大。我一般取α=0.1~0.3。
4.3.3 采样时序与PWM同步
最后说一个容易被忽略的点:采样时刻必须与PWM同步。
你想想看,PWM开关瞬间,母线上会有巨大的电流尖峰。如果你恰好在那个时刻采样,读到的值肯定是错的。所以ADC触发必须避开开关沿。
我一般把采样点设在PWM周期的正中间(中心对齐模式),或者紧挨着开关沿之后(等振铃衰减完)。具体延迟多少,要看你的硬件设计。我习惯在示波器上抓一下开关波形,看看振铃持续多久,然后设置一个死区时间。
| 采样方案 | 推荐采样时刻 | 注意事项 |
|---|---|---|
| 三电阻 | PWM周期中点 | 各相独立,无需重构 |
| 双电阻 | PWM周期中点 | 需避开最小脉宽区域 |
| 单电阻 | 多个开关状态切换点 | 需保证采样窗口足够宽 |
好了,电流采样这块儿就聊到这儿。总结一句话:采样是FOC的“眼睛”,眼睛花了,算法再强也白搭。下一章咱们聊聊电流环的PI参数整定,那又是一个“调参调到头秃”的环节。