基于DTC-SVM卡尔曼滤波的矩阵变换器,感应电机扭矩,速度控制,simulink仿真模型

最近在搞工业电机控制的仿真项目,接触到了个挺有意思的方案——基于DTC-SVM和卡尔曼滤波的矩阵变换器驱动系统。这玩意儿在感应电机控制上表现挺稳,特别是应对突加负载或者转速突变这种工况。今天咱们拆开看看它的实现逻辑,顺便用Simulink跑个实例。

先说说核心架构。传统DTC(直接转矩控制)简单粗暴但转矩脉动大,加上SVM(空间矢量调制)后相当于给油门装了个线性控制器。这里矩阵变换器直接替代了普通逆变器,不仅省了直流母线电容,还能实现四象限运行。不过系统多了九个双向开关,状态观测就变得特别关键。

卡尔曼滤波在这里主要负责实时估算磁链和转速。Matlab里写观测器的时候得特别注意过程噪声矩阵Q和测量噪声矩阵R的调参。下面这段代码是我在Function模块里写的核心迭代逻辑:

function [x_hat, P] = KalmanUpdate(A, H, Q, R, y, x_pred, P_pred)
    K = P_pred * H' / (H * P_pred * H' + R);  % 卡尔曼增益计算
    x_hat = x_pred + K*(y - H*x_pred);        % 状态修正
    P = (eye(2) - K*H)*P_pred;                % 协方差更新
    x_hat = A*x_hat;                          % 状态预测
    P = A*P*A' + Q;                           % 协方差预测
end

这里有个坑:电机模型离散化时如果采样周期设置不当,A矩阵的特征值会跑出单位圆导致发散。我上次仿真时发现转速估算总漂移,后来发现是Q矩阵对角项比例没设好——磁链误差项要比转速误差项小两个数量级才稳定。

转矩控制环有个很骚的操作:把传统DTC的滞环比较改成了SVM占空比调制。这么做虽然增加了开关频率,但转矩脉动能从±5%降到±1.2%左右。Simulink里实现时要注意SVPWM模块的扇区判断逻辑,特别是当α-β坐标系分量接近边界时的处理。

基于DTC-SVM卡尔曼滤波的矩阵变换器,感应电机扭矩,速度控制,simulink仿真模型

贴个SVPWM生成的片段代码:

function [T1, T2, sector] = CalcSVPWM(u_alpha, u_beta, Ts)
    Vref = sqrt(u_alpha^2 + u_beta^2);
    theta = atan2(u_beta, u_alpha);
    sector = floor(theta/(pi/3)) + 1;  % 确定扇区
    
    % 计算作用时间
    k = sqrt(3)*Ts/Vdc;
    T1 = k*Vref*sin(sector*pi/3 - theta);
    T2 = k*Vref*sin(theta - (sector-1)*pi/3);
    T0 = Ts - T1 - T2;
    
    % 七段式分配
    if sector == 1
        PWM = [T0/4, T1/2, T2/2, T0/2, T2/2, T1/2, T0/4];
    end
    % 其他扇区类似...
end

实际调试时发现,当电机低速运行时,反电势太小会导致磁链观测器收敛困难。这时候需要给电压模型加权,我在Simulink里用了个一阶惯性环节做电流模型和电压模型的融合,混合系数设为转速的函数——低于5%额定转速时主要用电流模型。

速度环的PID参数整定也有讲究。因为矩阵变换器没有中间储能环节,响应速度比普通变频器快,比例增益可以适当调大。不过积分时间常数不能太小,否则遇到负载突变会引起超调震荡。建议先用Ziegler-Nichols法初调,再根据实际响应微调。

最后放个仿真结果:空载启动到1500rpm时转速上升时间约0.2秒,突加额定负载后转速跌落控制在3%以内。转矩波形在0.18秒完成重建,整体来看比传统DTC方案动态性能提升明显。不过开关损耗会比普通方案高20%左右,这在设计散热时要特别注意。

想复现的兄弟注意几个点:1. 卡尔曼滤波的初值别设成全零 2. SVM模块的dead time至少要留2μs 3. 磁链滞环宽度建议设额定值的±2%。仿真文件已经传到GitHub(地址马赛克),里面有个隐藏菜单——按Ctrl+Shift+M可以调出自动调参脚本,亲测能省半天调试时间。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐