SVPWM+死区补偿(基于电流极性)+高频注入法辨识PMSM的dq轴电感(离线辨识)—simulink
先说说SVPWM的实现。在Simulink里用PWM Generator模块生成六路PWM信号时,记得把载波频率设成和实际硬件一致。比如我用的是20kHz,这时候采样时间得老老实实填0.00005秒。有个细节容易被忽略——模块里的"Sample time"参数必须和整个模型的固定步长一致,不然仿真结果能跑出外星人波形。
![SVPWM模块参数设置截图]
(想象这里有个截图:Carrier frequency=20kHz,Sample time=0.00005s)
SVPWM+死区补偿(基于电流极性)+高频注入法辨识PMSM的dq轴电感(离线辨识)—simulink
死区补偿这块儿最有意思。上周实验室有个哥们烧了IGBT,后来发现是补偿方向反了。咱们的补偿策略基于电流极性判断,关键代码长这样:
if Ia > 0.1 compensation_dir = 1; elseif Ia < -0.1 compensation_dir = -1; else compensation_dir = 0; end这段代码的核心就是设置0.1A的滞环阈值,防止电流过零点时的震荡。实际调试时发现,当电流小于0.5A时补偿效果会变差,这时候得在Simulink里加个最小脉宽限制模块,防止出现纳秒级的脉冲。
重点来了——高频注入法测dq轴电感。离线状态下给电机注入500Hz的高频电压信号,这时候的响应电流跟电感值直接相关。在Simulink里搞了个信号注入模块:
Vh = 0.2*sin(2*pi*500*t); % 注入电压幅值别超过额定电压20% Vd = Vh; Vq = 0; // 保持q轴电压为零采集三相电流做CLARK变换后,重点看高频分量的幅值衰减。处理数据时用FFT模块抓取500Hz处的幅值,电感计算公式直接焊在Matlab Function里:
Ld = Vh_amp/(2*pi*500*Ih_amp);有个坑爹的地方:当电机参数不对称时,FFT频谱会出现边带效应。这时候得在信号采集环节加个滑动平均滤波器,或者直接上锁相环跟踪特定频率。
最后在参数辨识环节,发现用Simulink的Parameter Estimation工具包反而没有手动扫频靠谱。特别是当电压注入频率超过1kHz时,死区补偿引起的谐波会污染采样数据,这时候需要临时关闭补偿功能。
整完这套流程最大的感悟是:电机控制就是个不断填坑的过程。上周刚搞定电感辨识,这周又发现温度变化导致参数漂移...算了,先去喝杯奶茶压压惊,下回再唠在线辨识的那些破事。