基于Matlab的变压器仿真模型的建模方法(2):单相双绕组变压器的状态方程和仿真模型(附源代码)
前言:
分享全网最全面最详细的基于Matlab的电力变压器建模方法,经验和技巧。对电力变压器(包括单相自耦变压器、单相双绕组变压器、单相三绕组变压器以及由它们组成的三相变压器组)从数学模型、仿真模型和仿真实例三个层面为研究和教育目的提供电力变压器瞬态分析的经验、方法和技巧,其内容经过适当扩展可以形成多篇电气工程及其自动化专业的本科毕业论文。
1. 单相双绕组变压器的状态方程
状态方程非常适合用计算机进行数值计算和模拟,它以简洁的形式描述变压器的瞬态行为,通过将变压器的瞬态过程用一组一阶微分方程来表示,可以方便地对电机的瞬态特性进行分析和计算。
状态方程是描述动态系统状态变量随时间变化的数学模型。在控制理论和系统工程中,状态方程通常用来表示系统的内部状态与外部输入之间的关系,它通常由一组一阶微分方程或差分方程组成,这些方程描述了系统状态变量的动态行为。
对于一个线性时不变系统,状态方程可以表示为:
(1)
x(t) 是状态向量,包含了系统在时间t的所有状态变量。
A 是系统矩阵,描述了状态变量之间的动态关系。
B 是输入矩阵,描述了外部输入如何影响状态变量。
u(t) 是输入向量,表示系统的外部控制或干扰。
y(t) 是输出向量,表示系统的输出。
C 是输出矩阵,描述了状态变量如何影响输出。
D 是直通矩阵,描述了外部输入如何直接影响输出。
上一节已经推导出了单相双绕组的微分方程:
(2)
变压器的瞬态过程是变压器运行状态的变化过程,是从一种稳态运行到另一种稳态运行的过渡过程,它是变压器内的一种电磁场储能随时间而变化的过程。变压器的状态变量就是反映电磁场储能变化的电感电流或磁链以及电容电压或电荷。下面导出以电感电流为状态变量和以混合磁链作为状态变量的状态方程。
1.1以电流为状态变量的状态方程
假定变压器二次侧带等效的电阻
和电感
相串联的感性负载,选取原、副边电流为状态变量,对式(2)加以整理,得以电流为状态变量的状态方程:
(3)
将式(3)与式(1)对比,可知
。
考虑主磁路饱和时,上述方程中的激磁电感是激磁电流的函数,有
(4)
1.2以混合磁链作为状态变量的状态方程
以混合磁链为状态变量的数学模型与以电流为状态变量的数学模型相比,在瞬变过程中变化相对较小,或者说较为稳定,这种模型有助于获得紧凑和稳定的瞬态过程解答。
将二次绕组折算到一次绕组,考虑式(6)并令混合磁链:,可得
(5)
这里,
(6)
(7)
(8)
(9)
磁链的饱和值与不饱和值之间的关系为:
(10)
式(10)式代入(9),可得
令
(11)
上式中,
(12)
则有
(13)
式(10)、(11)、(12)和(13)就是以混合磁链为状态变量的单相双绕组变压器的瞬态数学模型。
2. 基于状态方程的单相双绕组变压器的仿真模型
2.1 基于状态方程的单相双绕组变压器仿真模型之一
根据方程(3)直接用Simulink模块库中的功能模块State-Space搭建的单相双绕组变压器仿真模型如图1所示。其中State-Space模块的参数设置见图2(左边)所示。将图1所示的模型进行封装,然后在模型的桌面上点击鼠标右键找到模型属性点击打开,在模型属性窗口点击“回调”,找到InitFcn*打开模型初始化函数窗口进行变量设置和初始化命令设置,见图2(右边)所示。
图1. 基于状态方程的单相双绕组变压器仿真模型之一
图2. State-Space模块的参数设置和模型初始化函数设置
下面根据方程(3)再给出两种建模方法。
2.2. 基于状态方程的单相双绕组变压器仿真模型之二
直接根据方程(3)用simulink最基本的功能模块Level-2 MATLAB S-Function,用S函数建立单相双绕组变压器的仿真模型。
设变压器带电阻、电感性负载,根据式(3)建立的基于S函数的单相双绕组变压器的线性模型如图3所示。设S函数名为linear_transformer_level2,源程序如下:
function linear_transformer_level2(block)
setup(block);
function setup(block)
% Register the number of ports
block.NumInputPorts = 1;
block.NumOutputPorts =1;
% Set up the input port properties
block.InputPort(1).Dimensions = [2,1];
block.InputPort(1).DirectFeedthrough = true;
block.InputPort(1).DatatypeID = 0;
block.InputPort(1).Complexity = 'Real';
block.InputPort(1).SamplingMode = 'Sample';
% Set up the output port properties
block.OutputPort(1).Dimensions = [2,1];
block.OutputPort(1).DatatypeID = 0; % double
block.OutputPort(1).Complexity = 'Real';
block.OutputPort(1).SamplingMode = 'Sample';
% Register the parameters
block.NumDialogPrms = 7;
block.DialogPrmsTunable = {'Tunable','Tunable','Tunable','Tunable',...
'Tunable','Tunable','Tunable'};
% Set up the continuous states
block.NumContStates = 2;
% Register the continuous states
block.RegBlockMethod('InitializeConditions', @InitializeConditions);
block.RegBlockMethod('Outputs', @Outputs);
block.RegBlockMethod('Derivatives', @Derivatives);
block.RegBlockMethod('SetInputPortSamplingMode', @SetInputPortSamplingMode);
%endfunction
block.RegBlockMethod('Outputs',@Outputs);
block.RegBlockMethod('SetInputPortSamplingMode', @SetInputPortSamplingMode);
%endfunction
function SetInputPortSamplingMode(block, port, mode)
% Set the input port sampling mode
block.InputPort(port).SamplingMode = mode;
%endfunction
function InitializeConditions(block)
% Initialize the state variables
block.ContStates.Data(1) = 0; % initial condition for x(1)
block.ContStates.Data(2) = 0; % initial condition for x(2)
%endfunction
% Calculate the derivatives of the state variables
function Derivatives(block)
% 获取参数值
r1 = block.DialogPrm(1).Data; % Primary resistance
r2 = block.DialogPrm(2).Data; % Secondary side resistance
Ll1 = block.DialogPrm(3).Data; % Primary leakage inductance
Ll2 = block.DialogPrm(4).Data; % Secondary leakage inductance
Lm = block.DialogPrm(5).Data; % Mutual inductance between primary and secondary sides
RL = block.DialogPrm(6).Data; % load resistance
LL = block.DialogPrm(7).Data; % load inductance
% 获取输入向量 u
u = block.InputPort(1).Data; % 获取输入向量 u
u1=block.InputPort(1).Data(1);
u2=block.InputPort(1).Data(2);
x1 = block.ContStates.Data(1); % x(1)
x2 = block.ContStates.Data(2); % x(2)
L1=Ll1+Lm;
L2=Ll2+Lm;
G=1/(L1*(L2+LL)-Lm*Lm);
A=[-r1*(L2+LL) (r2+RL)*Lm;r1*Lm -(r2+RL)*L1].*G;
B=[L2+LL -Lm;-Lm L1].*G;
U=[u1;u2];
x=[x1;x2];
f=A*x+B*U;
block.Derivatives.Data(1) = f(1);
block.Derivatives.Data(2) = f(2);
% Output the state variables
function Outputs(block)
% Output the state variables
block.OutputPort(1).Data = [block.ContStates.Data(1);
block.ContStates.Data(2)]; % y= [x(1);x(2)]
%endfunction
图3. 基于Level-2 MATLAB S-Function的单相双绕组变压器仿真模型
(单相双绕组变压器仿真模型之二)
2.3. 基于状态方程的单相双绕组变压器仿真模型之三
上面基于Level-2 MATLAB S-Function的单相双绕组变压器仿真模型,仿真模型和S函数代码文件是分开的,有时候会感觉不太方便,如仅仅是为了仿真,那么可以使用MATLAB Function模块来建模。
仍然设变压器带电阻、电感性负载,根据式(3)建立的基于MATLAB Function模块的单相双绕组变压器的线性模型如图4所示。
图4.基于MATLAB Function的单相双绕组变压器仿真模型
(单相双绕组变压器仿真模型之三)
2.4. 基于混合磁链作为状态变量的单相双绕组变压器仿真模型
上面三个仿真模型都是以标准的状态方程建立的仿真模型,这里以混合磁链为状态变量的电压方程(11)构造的仿真模型如图4的品红色部分;以磁链方程(12)来建立仿真模型,如图5所示的深绿色部分;以电流方程(14)搭建的仿真模型如图4的橙色部分所示。可见,这个仿真模型具有很好的对称性。
图5. 以混合磁链为状态变量的单相双绕组变压器(升压)仿真模型之一
以混合磁链为状态变量的电压方程(11)和磁链方程(12)来建立线性仿真模型,如图6所示。其中,矩阵[x1,xm;xm,x2]在模型属性的初始化函数窗口里设置。
图6. 以混合磁链为状态变量的单相双绕组变压器(升压)仿真模型之二
3. 仿真结果
对上面图1、图3、图4、图5和图6的仿真模型进行了仿真(仿真参数见图2),仿真结果都是一样的,如图7所示。
图7. 以电流和混合磁链为状态变量构造的仿真模型的仿真结果
4. 小结
本节导出了单相双绕组变压器以电流和混合磁链为状态变量的单相双绕组变压器的数学模型,并据此搭建了相应的仿真模型,总共给出5个非常有特色和启发因子的仿真模型,值得所有电机构造仿真模型时借鉴。
参考文献:
(1)B. S. Guru, "Electric machinery and transformers," 3ed ed., vol. 726. Oxford university press, 2001.
(2)Paul C.Krause.Analasis of electric machinery. McGraw-Hill Book Company,1986
(3)黄守道,邓建国,罗德荣. 电机瞬态过程分析的Matlab建模与仿真. 2013,电子工业出版社,北京