上周实验室又炸了个IGBT,这已经是本月第三个牺牲品了。作为过来人,我决定把SVPWM死区补偿和高频注入法测电感的那些坑都摊开来聊聊。这次咱们用Simulink模型说话,手把手带你避开那些新手必踩的雷区。
在Simulink里玩PWM Generator模块时,载波频率和采样时间必须严格匹配。我见过太多人在这里栽跟头——仿真波形要么像心电图一样抽搐,要么直接变成抽象派艺术画。
关键参数设置要点:
重要提示:哪怕采样时间差1μs,仿真结果都可能出现诡异的谐波分量。去年有个研究生因此多调了三个月,最后发现就是这个参数没对齐。
当你的模型要跑在dSPACE或Speedgoat这类实时系统上时,还需要考虑:
实测数据表明,当载波频率超过控制器处理能力时,波形失真度会指数级上升。我的经验公式是:
code复制最大安全频率 = 0.1 × (时钟频率/PWM分辨率)
以TI的C2000系列为例,150MHz主频下建议不超过15kHz。
那个烧IGBT的哥们用的代码是这样的:
matlab复制if Ia > 0
compensation_dir = 1;
else
compensation_dir = -1;
end
看起来没毛病?实际运行时会在电流过零点产生高频振荡。改进方案必须加入滞环比较:
matlab复制if Ia > 0.1
compensation_dir = 1;
elseif Ia < -0.1
compensation_dir = -1;
else
compensation_dir = 0;
end
这个0.1A的阈值不是随便定的,它应该大于:
当电流小于0.5A时,补偿脉冲可能窄到几十纳秒。这种脉冲会导致:
解决方案是在Simulink中添加最小脉宽限制模块,建议值:
注入500Hz电压信号时,必须遵守以下原则:
matlab复制Vh = 0.2*sin(2*pi*500*t); % 幅值≤20%额定电压
Vd = Vh; % 仅注入d轴
Vq = 0; % q轴保持零电压
为什么是500Hz?这个频率需要满足:
当电机存在参数不对称时,FFT频谱会出现边带效应。解决方法有:
电感计算公式看似简单:
matlab复制Ld = Vh_amp/(2*pi*500*Ih_amp);
但实际需要考虑:
Simulink自带的Parameter Estimation工具包存在以下问题:
手动扫频虽然麻烦,但可靠性更高。我的标准流程是:
当注入频率超过1kHz时,建议:
否则补偿谐波会:
采样不同步:有一次ADC采样时刻刚好在PWM跳变沿,结果电流波形出现周期性畸变。解决方案是在PWM周期中间位置触发采样。
地线环路:示波器探头地线形成环路,导致FFT频谱出现莫名尖峰。改用差分探头后问题消失。
温度漂移:早上测的电感值到下午能差5%。现在实验室标配恒温空调,测试前先热机30分钟。
IGBT导通压降:死区时间计算时漏算了Vce(sat),导致实际补偿量不足。后来在公式里补上了这个参数:
code复制死区时间 = 理论值 + Vce(sat)/gVdt
电机控制就像打地鼠,解决一个问题总会冒出新的挑战。但正是这些坑让我们的技术不断精进。下次准备聊聊在线参数辨识时,如何用扩展卡尔曼滤波对付参数时变问题——那又是另一个充满惊喜的战场了。