图2.17S函数构建的PMSM模块内部连接图
子系统内部使用s函数模块,设置s函数模块调用s函数名为PMSMdq,s函数的参数设为电动机的参数。
点击edit可以进入s函数编写界面,进行修改。
需要注意的是,s函数的文件必须和PMSM仿真的模型放在同一文件夹下,否则会出现仿真错误的情况。
图2.18S函数参数对话框
仿真时,PMSM的电动机参数设为:
定子绕组R1为0.875欧;直轴电感Ld为8.5mH;交轴电感Lq为8.5mH;转子永磁体在定子绕组中产生的磁链为0.175Wb;极对数np为4.负载转矩初始值为1N.m,在0.04s时阶跃为5N.m。
转矩的输入为阶跃函数。
参数设置如下
图2.19PMSM参数设置对话框
4、永磁同步电机控制模型仿真
将仿真时间设为0.06s,然后进行仿真,得到的仿真结果如下
图4.1输入的阶跃扭矩信号
图4.2输出的转矩信号
图4.3输出的三相相电流
图4.4输出的电角速度信号
图4.5输出的电机转速
可以看出在起动过程中,电动机转矩上升到最大值以后保持在限幅值,此过程中电动机的转速迅速上升。
加速结束后,电动机进入稳态运行,电动机的电磁转矩与负载转矩平衡。
在负载突加的时候,电动机转矩迅速上升并与负载相平衡,然后迪纳冬季又重新进入稳态运行。
电气传动系统的响应很快,这是因为控制系统中的电流闭环控制响应比较快,动态性能好。
附件
function[sys,x0,str,ts]=PMSMdq(t,x,u,flag,parameters,x0_in>
%PMSMmodel.
%parameters。
%ld,lq:
inductanceindpreferenceofframe
%r:
staterresistance
%psi_f:
fluxinwebersbyPMonrotor
%p:
numberofpolepairs
%j:
inertiaofmotorandload
%mu_f:
viscousfriction
%inputs:
%ud,uq:
voltagesindpreferenceofframe
%tl:
torqueofload
%innervariants:
%id,iqcurrentsindpreferenceofframe
%ud,uq:
voltageintdpreferenceofframe
%wr:
angularvelocityoftherotor
%te:
electronmagnetictorque
%theta:
positionofrotor
%outputs:
%wr:
angularvelocityoftherotor
%te:
electronmagnetictorque
%id,iqcurrentsindpreferenceofframe
%theta:
positionofrotor
%----------------------------
%u(123>=
%uduqtl
%parameters(1234567>=
%ldlqrpsi_fpjmu_f
%sys(12345>=
%wrteidiqtheta
%x(1234>=
%idiqwrtheta
switchflag
case0
[sysx0strts]=mdlInitializeSizes(x0_in>。
%iniatialization
case1
%calculatethederivatives
sys=mdlDerivatives(x,u,parameters>。
case3
%output
sys=mdlOutputs(x,u,parameters>。
case{2,4,9}
%unusedflags
sys=[]。
otherwise
%Errorhandling
error(['Unhandledflag=',num2str(flag>]>。
end
%endofPMSMdq
%-----------------------------------
%mdlInitializeSizes
%----------------------------------
function[sys,x0,str,ts]=mdlInitializeSizes(x0_in>
%-------------------------------------
%u(123>=
%uduqtl
%parameters(1234567>=
%ldlqrpsi_fpjmu_f
%x(1234>=
%idiqwrtheta
sizes=simsizes。
sizes.NumContStates=4。
sizes.NumDiscStates=0。
sizes.NumOutputs=5。
sizes.NumInputs=3。
sizes.DirFeedthrough=0。
sizes.NumSampleTimes=1。
sys=simsizes(sizes>。
x0=x0_in。
str=[]。
ts=[00]。
%EndofmdlInitializeSizes.
%---------------------------
%mdlDerivatives
%Returnthederivativesforthecontinuousstates
%-----------------------------
function[sys]=mdlDerivatives(x,u,parameters>
%-----------------------------
%u(123>=
%uduqtl
%parameters(1234567>=
%ldlqrpsi_fpjmu_f
%sys(12345>=
%wrteidiqtheta
%x(1234>=
%idiqwrtheta
%id'=ud/ld-r*iq/lq+lq*p*wr*iq/ld
sys(1>=u(1>/parameters(1>-parameters(3>*x(1>/parameters(1>+parameters(2>*parameters(5>*x(3>*x(2>/parameters(1>。
%iq'=uq/lq-r*iq/lq-ld*p*wr*id/lq-psi_f*p*wr/lq
sys(2>=u(2>/parameters(2>-parameters(3>*x(2>/parameters(2>-parameters(1>*parameters(5>*x(3>*x(1>/parameters(2>-parameters(4>*parameters(5>*x(3>/parameters(2>。
%te=1.5*p*[psi_f*iq+(ld-lq>*id*iq]
te=1.5*parameters(5>*(parameters(4>*x(2>+(parameters(1>-parameters(2>>*x(1>*x(2>>。
%wr'=(te-mu_f*wr-tl>/j
sys(3>=(te-parameters(7>*x(3>-u(3>>/parameters(6>。
%theta'=p*wr
sys(4>=parameters(5>*x(3>。
%EndofmdlDerivatives
%-------------------------------------------
%mdlOutputs
%Returntheblockoutputs.
%-----------------------------------------
functionsys=mdlOutputs(x,u,parameters,te>
%------------------------------------------
%u(123>=
%uduqtl
%parameters(1234567>=
%ldlqrpsi_fpjmu_f
%sys(12345>=
%wrteidiqtheta
%x(1234>=
%idiqwrtheta
%outputwr
sys(1>=x(3>。
%outputte
%te=1.5*p*[psi_f*iq+(ld-lq>*id*iq]
te=1.5*parameters(5>*(parameters(4>*x(2>+(parameters(1>-parameters(2>>*x(1>*x(2>>。
sys(2>=te。
%outputidq
sys(3>=x(1>。
%id
sys(4>=x(2>。
%iq
%outtheta
sys(5>=x(4>。
%EndofmdlOutputs