简介:面向电机控制工程师和电气工程高年级学生的六相永磁同步电机矢量控制MATLAB/Simulink仿真资源,可用于学习多相电机解耦控制、谐波抑制与故障容错设计。六相电机由两套三相绕组组成,相比传统三相电机具备更高功率密度和更优容错性,矢量控制通过坐标变换将定子电流分解为励磁与转矩分量,实现磁场与转矩的独立调节。资源包共2个文件,包含一个Simulink仿真模型文件和一个MATLAB绘图脚本,压缩包仅21KB,下载后可直接运行和修改。模型涵盖电机参数定义、静止-同步坐标变换模块、PI调节器,并针对启动、加速、恒速、制动等典型工况进行仿真,能够清晰展示六相电流对称谐波抑制效果,帮助读者将矢量控制理论落地为可复现的仿真程序。已有1144人学习下载,适合需要快速验证控制算法、完成课程设计或开展多相电机预研的读者。
1. 六相永磁同步电机矢量控制:为什么三相不够用
一台普通三相永磁同步电机要跑高性能伺服,基本上离不开矢量控制:把定子电流分解成励磁分量和转矩分量,各自闭环。六相永磁同步电机(六相PMSM)表面看只是多了三个绕组、多了一组桥臂,但真正动手搭仿真时会发现,三相那一套直接搬过来并不能正常工作。原因是六相绕组不再是一个三维电流空间,它有五个可控自由度,甚至还要额外处理两组中性点之间的零序问题。常见做法是先把六相电流通过一种特定的数学变换解耦到不同平面,再在旋转坐标系下做环流控制,这就是六相永磁同步电机的矢量控制。这篇文章将把理论模型、MATLAB/Simulink建模仿真、PI参数设计和验证方法一次讲透,适合正在做多相电机课题的学生,以及想从三相方案迁移到多相平台的工程师。
2. 不变量解耦:六相PMSM数学模型与VSD坐标变换
2.1 双Y移30°绕组结构与五个独立电流平面
六相PMSM最常见的拓扑是双Y移30°:两组三相绕组在空间上错开30°电角度,中性点分离。设计成这个角度不是拍脑袋,而是为了让6k±1(k为奇数)次谐波磁势在两个Y之间互相抵消,从而显著降低电机的转矩脉动和噪声。
既然有六个相电流,能否直接按两个三相系统分别做Clark变换?不能。两组绕组之间不仅存在互感,而且在同一个定子铁心上共享磁路,必须把整台电机作为一个六维系统处理。最干净的数学工具是变量解耦变换,又称VSD变换(Vector Space Decomposition)。它用一个6×6正交矩阵把六相电流分解到三个子平面:
| 子平面 | 电流分量 | 物理含义 | 控制目标 |
|---|---|---|---|
| αβ平面 | iα、iβ | 基波磁动势,产生电磁转矩 | 参与转矩闭环 |
| z1z2平面 | iz1、iz2 | 5、7次等谐波电流所在空间,只产生损耗和脉动 | 闭环给定为0 |
| 零序平面 | i0x、i0y | 与两个中性点连接方式相关 | 中性点隔离时可忽略 |
其中转矩的产生完全由αβ平面的两个分量决定,其余平面的电流不参与机电能量转换。这正是六相PMSM矢量控制的核心思路:通过坐标变换把原来耦合的六维系统解耦,然后像控制三相电机一样控制αβ平面里的两个电流。
2.2 从六相到旋转dq坐标系:电压方程与转矩方程
取幅值不变约束下的VSD变换矩阵,T6矩阵的前四行可以表示为:
% T6 矩阵(前4行),列顺序按 A B C U V W a = sqrt(3)/2; T6 = [1, -1/2, -1/2, a, -a, 0; 0, a, -a, 1/2, 1/2, -1; 1, -1/2, -1/2, -a, a, 0; 0, -a, a, 1/2, 1/2, -1];这里第一行和第三行对应α轴和z1轴的分量,第二行和第四行对应β轴和z2轴的分量。各文献对z1z2行的系数定义略有差异,但只要保证变换矩阵行间正交,且与逆变换配合时保持幅值或功率约束一致,仿真结果就不会偏离。
得到静止αβ分量后,再做旋转坐标变换进入dq同步旋转坐标系:
% 从αβ到旋转dq,theta为转子电角度 ud = u_alpha * cos(theta) + u_beta * sin(theta); uq = -u_alpha * sin(theta) + u_beta * cos(theta);经过这两步变换,六相PMSM的定子电压方程在dq轴下退化成和三相PMSM几乎一样的形式。电磁转矩为:
Te = 3np[ψf·iq + (Ld - Lq)·id·iq]
从公式中能清楚看到,转矩只由dq轴电流决定,z1z2平面的电流在转矩公式中根本不出现。也就是说,如果模型里不把z1z2平面做闭环,那些电流就处在开环状态,会在铜耗和转矩脉动上“偷走”系统效率。
2.3 六相PMSM矢量控制与三相控制的本质差异
不少从三相迁移过来的人会直接把两套三相PI并联使用,每组控制一个Y的abc电流,但这样做实际上是控住了相电流的“总量”,没有真正控制z1z2平面的分量。仿真里最常见的现象是:转速能跟上,转矩波形也“看起来正常”,但一测相电流就有明显谐波,细看是5次和7次谐波没有被闭环抑制。
差异的本质可以归结为三点。第一,受控变量数量不同,三相系统只有两个独立电流分量需要闭环,六相系统在忽略零序后仍有四个分量需要闭环。第二,非理想因素映射到的子空间不同,逆变器死区时间、导通压降在六相系统里会产生z1z2平面电压分量,这些分量若不补偿或闭环抑制,最终以低次电流谐波的形式暴露出来。第三,PWM调制策略不同,两个三相SVPWM直接对各自Y发波虽然实现简单,但会在z1z2平面产生明显的电压纹波,实际工程里常需要专门选择六相SVPWM或带零序注入的载波PWM。
3. MATLAB/Simulink搭建六相PMSM矢量控制模型的思路
3.1 先从初始化脚本固定电机参数
在MATLAB/Simulink里搭建六相PMSM矢量控制模型,第一步不是拖模块,而是把电机参数用一个初始化脚本固化下来。后续所有PI参数、PWM周期、仿真步长都会引用这些变量,避免模型里到处写魔法数字。
% pmsm_six_phase_init.m % 六相永磁同步电机双Y移30°矢量控制仿真参数 Rs = 0.303; % 定子相电阻,Ω Ld = 0.0035; % d轴电感,H Lq = 0.0035; % q轴电感,H,表贴式可近似相同 Lz = 0.0006; % z1z2平面漏感,H Flux = 0.0743; % 永磁磁链,Wb J = 0.002; % 转动惯量,kg·m^2 B = 0.0002; % 摩擦系数,N·m·s np = 4; % 极对数 Udc = 200; % 直流母线电压,V fsw = 10e3; % 逆变器开关频率,Hz Tpwm = 1/fsw; % PWM周期,s Tstep = 1e-5; % 仿真步长,s,约为PWM周期的1/10这个脚本在模型回调的InitFcn里执行,也可以在打开模型前手动运行一次。需要注意Lz这个参数在三相模型里不存在,它代表谐波平面电流对应的等效漏感,直接决定z1z2电流环PI参数的可调范围。仿真步长设置成1e-5是因为后续PWM模块会在Tpwm周期内更新占空比,步长取PWM周期的十分之一以下,电流波形才不会被离散化毛刺淹没。
3.2 VSD变换的Simulink实现
坐标变换是整个模型的承重墙。在MATLAB Function块里写一个函数,把六相电流或者六相参考电压一次性完成VSD和旋转坐标变换,会比串联多个Gain模块更容易排查。
function [id, iq, iz1, iz2] = abcuvw_to_dqz(ia, ib, ic, iu, iv, iw, theta) % 六相电流经过VSD变换后再转到旋转dq坐标系 % 列顺序:A B C U V W,双Y移30° a = sqrt(3)/2; v_alpha = ia - 0.5*ib - 0.5*ic + a*iu - a*iv; v_beta = a*ib - a*ic + 0.5*iu + 0.5*iv - iw; z1 = ia - 0.5*ib - 0.5*ic - a*iu + a*iv; z2 = -a*ib + a*ic + 0.5*iu + 0.5*iv - iw; id = v_alpha*cos(theta) + v_beta*sin(theta); iq = -v_alpha*sin(theta) + v_beta*cos(theta); iz1 = z1; iz2 = z2; end这段代码里的第一行到第四行就是T6矩阵前四行点乘电流向量,第五行和第六行做Park变换。id和iq进入电流环,iz1和iz2被单独引出来,这是为了后续观察谐波平面电流是否被抑制到零。逆变换方向相反:把ud、uq旋转回αβ,然后组合成六相参考电压,送给PWM模块。
3.3 电流内环和转速外环的连接方式
六相PMSM矢量控制系统通常采用转速外环加电流内环的双闭环结构。转速环输出iq_ref,id_ref赋零或者按最大转矩电流比分配,z1z2平面的参考电流则直接给0。电流内环一共需要四个PI控制器,分别为d轴、q轴、z1轴、z2轴各一个,而且两个谐波平面的PI结构完全一样。
转速外环和电流内环连接时要注意信号维度匹配。电流采样输出是6×1的信号,把它按顺序接入MATLAB Function块后,函数输出的就是4×1的电流反馈向量,再拆成单路送给各轴PI。PI控制器的输出限幅值不是电机额定电压,而是受Udc约束的最大相电压。六相PMSM两个Y之间没有直接把各相电压加起来抵消,所以限幅值记得留10%~15%的裕量给谐波平面的调制波动。
3.4 PWM生成方式的选型
PWM调制在六相PMSM仿真里是最容易“带崩”整体模型的一环。按照实现从简到繁,常见做法有三种:
| 调制方式 | 实现复杂度 | z1z2电压畸变 | 直流电压利用率 | 适用场合 |
|---|---|---|---|---|
| 两套标准三相SVPWM独立发波 | 低 | 较大 | 约1.0 | 先跑通控制算法 |
| 六相载波PWM注入零序分量 | 中 | 中 | 接近SVPWM | 工程验证和电机测试 |
| 考虑64个开关矢量的全局六相SVPWM | 高 | 小 | 更高 | 性能优先的驱动系统 |
如果刚搭好控制算法,建议先采用两套标准三相SVPWM独立发波,把每个桥臂的占空比单独算出来,加在比较合适的载波上。这样能快速排除“坐标变换正确但PWM有错”的干扰项。再往工程效果靠时,换成载波PWM注入零序分量的方案,代码改动量不大,但能明显改善z1z2平面的电压纹波。
4. foc矢量控制在六相PMSM上的参数设计与谐波抑制
4.1 电流环带宽和转速环带宽怎么取
六相PMSM矢量控制的参数设计仍然沿用三相foc矢量控制的基本方法,但多了z1z2两个电流环需要整定。最早可用的参数可以按频带分离法确定。电流环带宽取开关频率的1/10到1/5,转速环带宽再取电流环带宽的1/10到1/5,这样时间尺度拉开,调试时可以先让电流快速稳定,再处理转速动态。
% pi_tune.m % 电流环按典型I型系统近似设计 w_ci = 2*pi*fsw/10; % 电流环带宽,rad/s Kp_d = w_ci * Ld; % d轴电流环比例系数 Kp_q = w_ci * Lq; % q轴电流环比例系数 Ki_d = Kp_d * Rs / Ld; % d轴积分系数,按极点对消配置 Ki_q = Kp_q * Rs / Lq; % q轴积分系数 % 转速环带宽 w_cn = w_ci / 10; % 转速环带宽,rad/s Kp_n = J * w_cn / (1.5 * np * Flux); Ki_n = Kp_n * B / J; % 积分系数,补偿摩擦项这段脚本里的关键是电流环比例系数由电感和带宽相乘得到,而不是凭感觉调。把积分系数用Rs/Ld和Rs/Lq计算,等效于把电流环被控对象的极点对消掉,零点和极点重合后电流响应更接近一阶惯性。转速环带宽的推导来自运动方程,J和Flux是主要因素,转动惯量太大会让转速环的比例系数算出来偏大,实际调试时往往要再除以2到3倍。
4.2 z1z2子平面的谐波电流抑制
六相PMSM在中高速运行时,由于反电动势里存在5次、7次谐波,z1z2平面会出现显著谐波电压。这个平面并不参与转矩产生,但电流流经定子电阻会产生损耗,还可能在齿槽里叠加出额外振动。抑制方法分为两个层面:坐标变换层面,必须把z1z2平面的参考电流钳到0,并且用独立的电流PI闭环控制;调制层面,避免采用会让z1z2电压侵占量过大的PWM策略。
从仿真调参角度看,z1z2平面电流环的带宽可以和dq轴电流环保持一致,但比例增益往往要小一些。因为z1z2平面的等效阻抗主要体现为漏感Lz,而Lz通常只有Ld的十分之一,同样带宽下算出来的Kp会偏大,容易在高频噪声下放大电流采样误差。更稳妥的做法是把z1z2电流环带宽降到开关频率的1/20,只要它的响应速度仍比谐波频率快一个数量级以上,就能把5、7次谐波电流压制住。
调试时把iz1和iz2的波形拉出来看,正常情况下稳态平均值应当接近0,在其上叠加的交流纹波越小,说明谐波平面闭环效果越好。如果iz1或iz2出现明显的直流量且有纹波,先查坐标变换角度theta是否正确,尤其是角度过零处的符号是否突变,这是z1z2平面发生“假偏置”的常见来源。
4.3 逆变器死区带来的5/7次谐波
仿真模型里如果使用理想开关,看不到死区效应,但实际样机验证时必须考虑。每个桥臂插入的死区时间会导致实际输出电压偏离参考值,这种偏差在六相PMSM的VSD变换下会同时映射到αβ平面和z1z2平面,而后者影响更大。映射到z1z2平面上的死区误差不是直流量,而是与基波同步变化的谐波电压,它会激励起5次、7次谐波电流。
处理办法常见有两种。一种是在电流环输出后叠加死区补偿电压,根据相电流极性确定补偿方向,这是三相系统常用的方案;另一种是把死区时间造成的谐波电压当作扰动,靠提高z1z2电流环的开环增益来抑制。仿真阶段建议把死区时间保留在逆变器模型里,即使只设置一个很小的1μs死区,也能暴露“控制器参数看着合理、但FFT里谐波超限”的真实问题。
5. 转速阶跃与FFT验证六相PMSM矢量控制模型是否可靠
5.1 阶跃响应中看什么
模型是否跑通,先做一次转速阶跃仿真。给定转速从0阶跃到1000r/min,记录转速响应、iq电流和iz1、iz2电流。转速响应上主要看三个指标:上升时间是否在几十毫秒到几百毫秒量级,超调量是否在5%以内,稳态时是否无静差。如果转速发散或者振荡剧烈,先停止调参,回头检查坐标变换的theta角度是否为电角度,六相系统的theta要乘极对数,漏掉这一步几乎是六相PMSM矢量控制新模型的首发故障。
对iq曲线的要求是启动阶段出现一个上升沿,之后平滑回到稳态,而不是出现等幅振荡。如果闭环增益过大,iq会以电流环带宽的频率反复冲击限幅值,这时候减小Kp_q,同时保持积分时间常数不变,分两轮调参。Iz1和Iz2在转速阶跃期间允许有短暂的过渡冲击,但必须在到达稳态后的几十毫秒内衰减到0附近,否则说明PI参数中积分项偏弱或模型位置存在错误。
5.2 电流FFT定量验证
波形只能说明“没炸”,能不能说明控制质量好,需要做一次定量谐波分析。取稳态阶段的A相电流,用MATLAB自带fft函数计算频谱,重点看基波幅值、5次和7次谐波幅值,以及总谐波畸变率。
% analyze_current_fft.m % 取稳态段做FFT谐波分析 ia = logsout.get('ia').Values.Data; ta = logsout.get('ia').Values.Time; idx = find(ta > 0.5 & ta < 0.7); % 稳态时间段 ia_ss = ia(idx); N = 2^nextpow2(length(ia_ss)); Y = fft(ia_ss, N); f = (0:N-1) * (1/mean(diff(ta))) / N; mag = abs(Y) / N * 2; mag = mag(1:N/2+1); f = f(1:N/2+1); % 提取基波和5、7次谐波幅值 [~, k1] = min(abs(f - 100)); % 基波频率按电频率调整 [~, k5] = min(abs(f - 500)); % 5次谐波 5*f1 [~, k7] = min(abs(f - 700)); % 7次谐波 7*f1 fprintf('基波幅值: %.3f A\n5次谐波: %.3f A\n7次谐波: %.3f A\n', ... mag(k1), mag(k5), mag(k7));运行这段脚本时,基波频率要按实际转速换算,转速1000r/min、极对数4时电频率约66.7Hz,把100改成对应值即可。FFT分析前取整周期数据会得到更干净的频谱,但取0.2s稳态段时数据量足够,不影响判断谐波量级。如果5次谐波幅值超过了基波的3%,基本可以断定z1z2平面的PI闭环没有真正生效,优先检查iz1和iz2的反馈信号是不是被总线信号合并时无意中截断了。
把这些验证点跑完,六相PMSM矢量控制模型的“能转”和“转得好”就有了第一条分界线:转速能跟上、电流环稳定,只能说明模型结构正确;z1z2电流接近零、相电流FFT里谐波分量低于基准值,才算控制真正起效。后续再往硬件迁移时,把PWM死区时间调大一点重新跑同一套FFT脚本,对比谐波增量,就能直接评估死区补偿环节该投入多少资源。
本文还有配套的精品资源,点击获取