永磁同步电机的仿真模型Word格式.docx
《永磁同步电机的仿真模型Word格式.docx》由会员分享,可在线阅读,更多相关《永磁同步电机的仿真模型Word格式.docx(16页珍藏版)》请在冰豆网上搜索。
FOC控制技术的原理:
原理图中涉及到双反馈,第一层反馈为转速反馈:
设定电机转速初始值作为给定值,然后与反馈的实际值(位置传感器采集到的位移微分得到)进行比较,得到的差值输入PI控制器进行控制,得到交轴电流iq。
同时三相绕组输出的电流iA,iB,iC经过clarke变换和park变化得到iq和id的实际值,分别与给定值进行比较,将比较后的值再进行park转换,得到的结果经过SVPWM技术调制之后输入到逆变器,继而可以驱动三相电机。
图2.1磁场定向矢量控制技术原理
3、基于FOC技术的永磁同步电机建模
在这里采用的是最简单的id=0的控制方法。
Id=0时,从电动机端口看,永磁同步电机相当于一台他励的直流电动机,定子电流中只有交轴分量,而且定子磁动势空间矢量与永磁体磁动势空间矢量正交,电动机转矩中只有永磁转矩分量。
因为电磁转矩仅仅依赖交轴电流,从而实现了转矩表达式中的交直轴电流解耦。
下图为建立的基于FOC控制技术的永磁同步电机SIMULINK仿真模型
图2.2基于FOC技术的永磁同步电机SIMULINK模型
控制模型主要包括转速给定部分,比例积分(PI)模块,坐标转换模块,逆变器控制模块,以及电动机模块。
下面进行一一介绍。
3.1转速给定部分
转速给定模块使用SIMULINK中的常数(constant)模块,单位为rpm。
给定的速度要输入到电角速度计算模块(Gain)中,以得到给定转速的电角速度(单位为rad/s)。
设定电动机极对数为4,则其参数为2*pi*4/60。
图2.3速度给定部分
图2.4电角速度计算模块的参数设定
3.2比例积分(PI)模块
调速系统实施转速闭环控制,转速比例积分调节器中的比例模块设置比例参数,积分模块设置积分参数。
调节器内同时设置了内限幅和外限幅模块(saturation)。
设定的PI参数如下图。
图2.5PI模块的参数设定
图2.6PI模块的内部结构
图2.7Saturation的参数设置
3.3坐标转换模块
在三相静止坐标系下分析永磁同步电机的数学模型存在着许多难以克服的困难,引入空间矢量坐标变换理论可以简化其数学模型,并能够很容易的分析永磁同步电机的动态特性,空间坐标变换矢量图如图2-4所示,图中fs为空间矢量,可为电压、电流、磁链等空间物理量,ωe为转子旋转角速度,θe为转子轴线与A相绕组轴线的夹角。
图2.8空间坐标变换矢量图
按照f不变的原则,可得到三相静止坐标系abc变换到两相静止坐标系αβ的clark变换矩阵为:
clark逆变换矩阵为:
同理若以转子磁链轴线方向为坐标系的横轴,称为直轴(d轴),以垂直转子磁链轴线方向90°
为纵轴,称为交轴(q轴),可建立与转子同步旋转的坐标系dq,简称同步旋转坐标系,将两相静止坐标系αβ变换到同步旋转坐标系dq的park变换矩阵为:
park逆变换矩阵为:
根据上述坐标转换原理,我们建立dq到abc坐标系和abc到dq坐标系的转换模块。
如下图:
图2.9dq坐标系到三相静止坐标系变换模块
图2.10dq坐标系到三相静止坐标系变换模块内部实现
图2.11三相静止坐标系到dq坐标系变换模块
图2.12三相静止坐标系到dq坐标系变换模块的内部实现
3.4逆变器控制模块
采用电流滞环脉冲宽度调制方法,该模块输入为三相相电流给定值和三相相电流实际值,输出为三相相电压。
其内部连接图如图所示:
图2.13CHBPWM逆变器模块内部连接图
三相比较模块相同,其中比较模块通过比较A相给定的电流值和A相实际电流得出逆变器输出的A相相电压值,其内部连接图如图所示:
图2.14比较模块内部连接图
其中,传递函数模块(transferfcn)对相电流进行滤波,可以滤去A相反馈电流中的高次谐波。
继电器(relay)模块实现的是电流滞环控制功能。
其输入为给定电路与实际电流的差值,输出为A相相电压。
其参数对话框如下图所示,主要有4个参数:
开通动作值(switchonpoint)、关断动作值(switchoffpoint)、开通时输出值(outputwhenon)、关断时输出值(outputwhenoff)。
实现的功能是:
当给定的电流值大于实际电流值的差达到开通动作值时,输出的A相相电压为155V,当给定的电流值小于实际电流值达到关断动作值时,输出A相电压为-155V。
图2.15继电器参数设置
3.5电动机模型
在SIMULINK中对永磁同步电机进行仿真建模通常采用以下三种方法:
(1)在SIMULINK中内部提供的PMSM模型,它包含在电力系统库的电动机库中。
这种方法简单,方便,适于快熟创建永磁同步电动机调速系统,但由于模型已经封装好,不能随意修改,同时也不方便研究PMWM内部的建模方法。
(2)使用SIMULINKlibrary库里已有的分离模块进行组合搭建电机模型,该方法思路清晰、简单、直观,但需要较多的模块,连线较多且不利于差错,油漆是复杂的数学模型。
因此,本方法适用于简单的、小规模系统的仿真系统建模。
(3)用s-函数模块构造模型。
该方法基于数学表达式,容易修改,方式灵活。
这种模型处理能力强,可以方便地构建复杂的动态系统,非常适合PMSM的访真分析。
我们采用第三种方法进行建模
S函数模块位于SIMULINK模块库的用户自定义函数子目录下,s函数可以用MATLAB语言编写,也可以用C,C++等语言编写。
它有特定的结构形式。
这里用MATLAB语言编写,此时S函数与MATLAB函数不同的只是其特定的结构模式。
具体的s函数见附件。
图2.16永磁同步电机模型
为使用方便,把整个模型建成子系统,同时为方便输入电动机的各项参数,使用风转子系统(masksubsystem)为电动机参数输入提供对话框。
图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
voltageintdpreferenceofframe
%wr:
angularvelocityoftherotor
%te:
electronmagnetictorque
%theta:
positionofrotor
%outputs:
%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)
%-------------------------------------
%uduqtl
%parameters(1234567)=
%x(1234)=
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)=
%parameters(1234567)=
%sys(12345)=
%wrteidiqtheta
%x(1234)=
%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)
%------------------------------------------
%ldlqrpsi_fpjmu_f
%outputwr
sys
(1)=x(3);
%outputte
sys
(2)=te;
%outputidq
sys(3)=x
(1);
%id
sys(4)=x
(2);
%iq
%outtheta
sys(5)=x(4);
%EndofmdlOutputs