六相永磁同步电机矢量控制仿真模型

六相永磁同步电机控制系统的Simulink模型正在跑着仿真,屏幕上的转矩波形突然出现高频毛刺。我盯着示波器界面挠头:"这玩意儿不是双Y结构吗?怎么转矩脉动比三相还大?" 突然想起早上喝的咖啡杯底还留着没洗的咖啡渍——可能和死区补偿参数有关?

先看看电机本体建模。六相绕组分两组Y接,每组相差30度电角度,这结构让建模有点特殊:

% 六相绕组磁链计算
psi_abc = Ls * [ia1; ib1; ic1; ia2; ib2; ic2] + PM_Flux * [sin(theta); sin(theta-2*pi/3); sin(theta+2*pi/3); 
          sin(theta-pi/6); sin(theta-2*pi/3-pi/6); sin(theta+2*pi/3-pi/6)];

这里的相位偏移参数pi/6就是关键,不注意的话磁链计算直接翻车。上次有个师弟把角度写成机械角度,仿真结果直接表演电机蹦迪。

坐标变换是重头戏,传统三相用Clarke-Park,六相得搞双d-q坐标系。建个自定义函数模块处理变换矩阵:

function [idq] = SixPhase_ClarkPark(ia1, ib1, ic1, ia2, ib2, ic2, theta)
    T6 = [1, -0.5, -0.5, sqrt(3)/2, -sqrt(3)/2, 0; 
          0, sqrt(3)/2, -sqrt(3)/2, 0.5, 0.5, -1;
          ... ]; % 完整矩阵太长占位置
    abc = [ia1; ib1; ic1; ia2; ib2; ic2];
    dq0 = T6 * abc;
    idq = dq0(1:2); % 取前两轴
end

注意看变换矩阵里那些sqrt(3)/2,这可不是随便凑的数。上次隔壁组用错矩阵版本,结果电流环震荡得像心电图。

六相永磁同步电机矢量控制仿真模型

SVPWM部分更刺激,六相系统有12个基本电压矢量。写状态机判断扇区时差点让我头秃:

% 简化版扇区判断
sector = 0;
if u_alpha > 0
    sector = sector + 1;
end
if u_beta > 0 
    sector = sector + 2;
end
if (sqrt(3)*u_alpha - u_beta) > 0
    sector = sector + 4; 
end
% 后续还有3个判断条件...

实际工程中这里要用查找表优化,不然仿真速度感人。有次忘记限制矢量作用时间,IGBT开关频率直冲20kHz,吓得我赶紧加了个rate limiter。

调完参数看动态响应,负载突变时双d-q轴电流解耦效果不错:

Scope截图显示:
时间: 0.5s 突加负载
iq1从0A → 25A (响应时间1.2ms)
iq2从0A → 25A (响应时间1.5ms) 
THD 2.3% vs 三相系统4.8%

但发现零序电流有点调皮,在母线电压波动时偶尔冒头。后来在电流环里加了个陷波器,专治各种不服。

最后说说死区补偿的坑。六相系统要补偿12个开关器件的死区效应,我写了段条件判断:

if (Ia1 > 0.1) && (Vdc > 0)
    compensation_time = dead_time * (1 - exp(-t/tau));
elseif (Ia1 < -0.1) && (Vdc < 0)
    compensation_time = dead_time * exp(-t/tau); 
end 

结果发现当两套绕组电流相位不一致时,这补偿反而引入新谐波。后来改成基于矢量作用时间的动态补偿,世界终于清净了。

模型跑通那天下班,发现仿真步长设的是1e-5秒——难怪吃了16G内存。改回变步长ode23t,速度直接起飞。所以说啊,搞电机控制,一半时间在调算法,另一半在跟仿真软件斗智斗勇。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐