4、电流采样与重构:单电阻/双电阻/三电阻采样原理、采样时刻选择、电流重构算法及工程陷阱
电流采样,是FOC控制中最基础也最要命的一环。
我常说一句话:你算法写得再漂亮,电流采不准,一切都是白搭。电机控制说白了就是控制电流,电流都测不准,你还控个啥?
这一章,咱们就把电流采样这件事彻底聊透。单电阻、双电阻、三电阻,三种方案我都亲手调过,踩过的坑比走过的路还多。你想想看,一个采样时刻选错了,电机可能直接啸叫,甚至炸管——嗯,我确实炸过。
4.1 三种采样方案的基本原理
先说说这三种方案到底长什么样。
4.1.1 三电阻采样
这是最直观的方案。三个下桥臂的射极电阻,各采各的相电流。你只需要三个ADC通道,同时触发采样,完事。
优点很明显:精度高、延迟小、算法简单。每个周期都能拿到完整的ia、ib、ic,直接做Clark变换就行。
缺点呢?成本高。三个采样电阻,三个运放,三个ADC通道。对于大功率驱动器,电阻的功耗和散热也是麻烦事。
我个人习惯,在研发样机阶段一定用三电阻。为什么?因为调试方便,少了很多重构算法的干扰,能先把核心控制环路调通。
4.1.2 双电阻采样
双电阻只采两相电流,第三相通过基尔霍夫电流定律算出来:ic = -(ia + ib)。
这是目前工业伺服驱动器的主流方案。成本适中,精度也够用。
但有个坑:当某一相的占空比接近0%或100%时,该相的采样窗口会变得极窄,甚至消失。这时候你采到的电流就是错的。
我在项目中遇到过,电机低速运行时一切正常,一跑高速就开始抖动。查了两天,最后发现是双电阻在高速区采样失效了。
4.1.3 单电阻采样
单电阻只采直流母线上的电流。听起来很省成本对吧?但代价是——你得靠算法把三相电流"重构"出来。
单电阻的原理是这样的:母线电流在每一个PWM周期内,会依次流过不同的相。你只要在正确的时刻采样,就能还原出各相电流。
但说实话,单电阻是我最不推荐用在伺服驱动器上的方案。为什么?因为伺服要求低速大转矩、高速弱磁,工况太复杂了。单电阻在低速区和高速区都有盲区,重构算法再牛也救不回来。
4.2 采样时刻选择——这才是真正的技术活
很多人以为采样就是"到了时间点就采一下",太天真了。
采样时刻选不对,你采到的根本不是你想采的电流。
4.2.1 三电阻的采样时刻
三电阻最简单:在下桥臂导通的中点采样。为什么选这个点?因为此时流过采样电阻的电流就是相电流,而且没有开关噪声的干扰。
具体来说,PWM周期中间,所有下桥臂都处于导通状态,电流稳定。这时候触发ADC,信噪比最高。
我建议把ADC触发点设在PWM计数器的中点,也就是三角波的波谷位置。
4.2.2 双电阻的采样时刻
双电阻的采样时刻要讲究一些。你得保证两相的下桥臂同时导通,才能同时采样。
问题来了:当某一相的占空比接近0或1时,两相同时导通的时间窗口会变得非常短。短到ADC都来不及转换。
怎么办?一种做法是插入"测量矢量"。说白了,就是在PWM周期里故意插入一段特殊的开关状态,专门用来创造采样窗口。
嗯,这里要注意:插入测量矢量会带来额外的电流纹波和损耗。这是个trade-off。
4.2.3 单电阻的采样时刻
单电阻最麻烦。你需要在同一个PWM周期内,在母线电流流过不同相的时刻分别采样。
举个例子:当矢量处于扇区I时,母线电流先流过A相,再流过B相。你需要在两个不同的时间点采样,然后根据当前矢量的位置,反推出ia和ib。
我做过一次单电阻的伺服项目,调试了整整一个月。最后发现,在过零点附近,采样窗口小到只有几十纳秒,ADC根本来不及。后来不得不加硬件采样保持电路才勉强搞定。
4.3 电流重构算法
重构算法主要针对单电阻和双电阻。三电阻不需要重构,直接采就行。
4.3.1 双电阻的重构
双电阻的重构很简单:
// 假设采到了ia和ib
ic = -(ia + ib);
// 然后做Clark变换
i_alpha = ia;
i_beta = (ia + 2*ib) / sqrt(3);
就这么简单。但前提是——你采到的ia和ib是准确的。
4.3.2 单电阻的重构
单电阻的重构稍微复杂一点。核心思路是:
- 在PWM周期的不同时刻采样母线电流
- 根据当前电压矢量的扇区,判断母线电流对应哪一相
- 利用基尔霍夫定律补全第三相
举个例子,当矢量在扇区I时:
// 在t1时刻采样,此时母线电流 = ia
i_a_sample1 = i_bus_t1;
// 在t2时刻采样,此时母线电流 = -ic
i_c_sample2 = -i_bus_t2;
// 补全ib
i_b = -(i_a_sample1 + i_c_sample2);
你看,逻辑上没问题。但实际做起来,采样时刻的精度要求极高。PWM频率20kHz,一个周期才50微秒。你要在几十纳秒的窗口内准确采样——这已经不是软件能搞定的事了。
4.4 工程陷阱——我踩过的坑都在这儿了
我曾经用了一款便宜的采样电阻,结果高频时电流波形全是毛刺。查了半天,发现是电阻的寄生电感太大,和PCB走线形成了LC谐振。
建议:一定要用低感采样电阻,最好是四端开尔文结构的。别省这个钱。
很多MCU的ADC,采样保持时间是可以配置的。默认值往往偏小。如果你采到的电流值总是偏大或偏小,先检查采样保持时间。
我一般设到1微秒以上,具体看你的ADC输入阻抗和采样电容。
双电阻和三电阻方案中,采样电阻上的共模电压很高。如果运放的CMRR不够,共模电压会转化为差模误差。
我建议用差分运放,或者至少用CMRR在80dB以上的运放。
死区时间内,所有开关管都关断。这时候采样电阻上没有电流流过。如果你在死区时间内触发了ADC,采到的就是0。
解决办法:避开死区时间采样。把ADC触发点设在死区结束之后。
4.5 我的建议
说了这么多,最后给点实在的建议:
| 应用场景 | 推荐方案 | 理由 |
|---|---|---|
| 研发样机/调试 | 三电阻 | 精度高,排除采样干扰 |
| 工业伺服(通用) | 双电阻 | 成本与性能的平衡 |
| 低成本/小功率 | 单电阻 | 但要做好重构算法 |
| 高性能/大功率 | 三电阻 | 可靠性第一 |
如果你刚开始做FOC,先用三电阻把环路调通。等电流环跑顺了,再换成双电阻或单电阻。这样出了问题,你能快速定位是采样的问题还是控制算法的问题。
我曾经带过一个新人,一上来就用单电阻,结果电机转都转不起来。我让他换成三电阻,半天就调通了。这就是典型的"省了不该省的成本"。
好了,电流采样这块就聊到这儿。下一章咱们讲位置传感器——编码器和霍尔,那又是另一堆坑等着你。