创建自定义公式使用符号数学工具箱中的Simscape库基于组件。
该符号数学工具箱提供了开发从第一工程原理模型中的任何空间维度的灵活方式。您可以开发用于稳态或瞬态物理数学模型。
你可以开发和求解方程来表示所需要的物理为您的组件需要;并执行输入之间你自己的降阶模型映射X和感兴趣的数量F(X)。
这里F是可以表示的形式控制方程定制组件:
数学公式
常微分方程和偏微分方程的数值模拟
在这个例子中的步骤
参数化使用的Simscape部件symReadSSCVariables
定义自定义公式使用您的Simscape组件DIFF
解决解析使用稳态方程解决
和潜艇
通过使用数值求解与时间相关的等式在MATLABmatlabFunction
和ODE45
创建使用的Simscape组件symWriteSSC
要运行这个例子,你必须拥有的Simscape和符号数学工具箱许可证。
一种直流电动机为将电能转换为机械能,并且反之亦然的装置。DC电机的示意图如下所示(左图)。在所提供的模拟直流电动机块的Simscape电气™(右图),这是一个可选产品的Simscape。
在这个例子中,我们将使用管理常微分方程(常微分方程)推导出直流电动机的降阶模型表示。用于DC马达,所述电压和电流从基尔霍夫定律导出和机械转矩的公式从牛顿定律的。使用这些公式,我们可以实现自定义和参数的Simscape组件。
假设你有一个的Simscape组件MyMotorTemplate.ssc
在当前文件夹或默认的MATLAB的路径。该组件没有公式呢。模板记录将被用于开发我们的电机参数和变量。您可以使用类型
提供该模板的预览。
类型MyMotorTemplate.ssc
部件MyMotorTemplate%定制直流电动机%该块实现一个定制的DC马达的节点P = foundation.electrical.electrical;%+:左N = foundation.electrical.electrical;% - :左R = foundation.mechanical.rotational.rotational;%R:右C = foundation.mechanical.rotational.rotational;%C:右端参数R = {3.9, '欧姆'};%电枢阻抗L = {0.000012, 'H'};%电枢电感J = {0.000001, '公斤*平方公尺'};%惯性DR = {0.000003, '(N * M * S)/弧度'};%转子阻尼的Ki = {0.000072, '(N * M)/ A'};%转矩常数KB = {0.000072, '(V * S)/弧度'}; %Back-emf constant end variables torque = {0, 'N*m'}; %Total Torque tau = {0, 'N*m'}; %Electric Torque w = {0, 'rad/s'}; %Angular Velocity I = {0, 'A'}; %Current V = {0, 'V'}; %Applied voltage Vb = {0, 'V'}; %Counter electromotive force end function setup if(R<=0) error('Winding resistance must be greater than 0.'); end end branches torque : r.t -> c.t; % Through variable tau from r to c I : p.i -> n.i; % Through variable i from p to n end equations w == r.w -c.w; % Across variable w from r to c V == p.v -n.v; % Across variable v from p to n end end
念,价值观,以及从模板组件的参数的单位。
[parNames,parValues,parUnits] = symReadSSCParameters('MyMotorTemplate');
显示参数,它们的值,并且作为矢量对应的单元。
VPA([parNames; parValues; parUnits],10)
ANS =
通过添加参数名称到MATLAB工作区SYMS
功能。参数显示为工作区中的符号变量。您可以使用WHO
在工作区列表的变量。
SYMS(parNames)SYMS
你象征性的变量是:J-博士KB文L R ANS
读取和显示组件变量的名称。用ReturnFunction
同时这些变量转换成变量的函数Ť
。
[varFuns,varValues,varUnits] = symReadSSCVariables('MyMotorTemplate','ReturnFunction',真正的);VPA([varFuns; varValues; varUnits],10)
ANS =
通过使用添加变量名到MATLAB工作区SYMS
功能。变量出现在工作区中的符号的功能。确认您已声明使用所有必需的符号变量和函数SYMS
。
SYMS(varFuns)SYMS
您的符号变量是:斯基博士řVb的吨扭矩我KB L V ANS的tau瓦特
用于机械扭矩的微分方程被定义为EQ1
和EQ2
。它)
代表当前和值w(t)
角速度。
EQ1 =扭矩+ J *的diff(值w(t))== -Dr *值w(t)+ tau蛋白(t)的
EQ1(T)=
EQ2 = tau蛋白(吨)==基* I(t)的
EQ2 =
用于电电压和电流的方程是EQ3
和EQ4
。V(t)的和VB(t)的分别表示所施加的电压和反电动势。
EQ3 = L *的diff(I(t))的+ R * I(t)的== V(吨) - VB(t)的
EQ3 =
EQ4 = VB(吨)== KB *值w(t)
EQ4 =
我们可以列出他们在一起。在这里,电机的扭矩被认为是成正比的电流。
方程=式([EQ1; EQ2; EQ3; EQ4])
公式=
解方程的左右两边。
操作数=儿童(方程);operList = [操作数{:}];LHS = operList(1:2:结束)
LHS =
RHS = operList(2:2:结束)
RHS =
第二和第四方程定义的值tau蛋白(t)的
和VB(t)的
。为了简化四个方程的系统在两个方程的系统,这些值替换到第一和第三个方程。
等式(1)=潜艇(方程(1),左轴(2),右轴(2))
公式=
等式(2)=潜艇(方程(3),左轴(4),右轴(4))
公式=
方程“。
ANS =
之前使用其数值求解方程,替代参数。此外,使用V(t)的= 1
。
方程=潜艇(方程,[parNames,V(T)],[parValues,1]);方程=潜艇(方程,扭矩,0);VPA(方程。',10)
ANS =
为此,删除的功能与时间的关系值w(t)
和它)
。例如,替换它们与符号变量WW
和二
。
SYMSWW二equations_steady =潜艇(方程,[W(T),I(T)],[WW,II]);导致=解决(equations_steady,WW,ⅱ);steadyStateW = VPA(result.ww,10)
steadyStateW =
steadyStateI = VPA(result.ii,10)
steadyStateI =
matlabFunction
和ODE45
。创建一个有效的输入ODE45
从符号方程。用odeToVectorField
创建表示动态系统的MATLAB程序
初始条件
。
[vfEquations,tVals] = odeToVectorField(方程式)
vfEquations =
tVals =
M = matlabFunction(vfEquations,“瓦尔”{'T','Y'})
M =与价值function_handle:@(T,Y)[Y(1)*( - 3.25e + 5)-Y(2)* 6.0 + 8.333333333333333e + 4; Y(1)* 7.2E + 1-Y(2)。* 3.0]
使用初始条件求解微分方程W(0)= 0
和我(0)= 0
。
溶液= ODE45(M,[0 3],[0 0])
溶液=同场的结构:求解器: 'ODE45' 扩展数据:[1x1的结构]×:[1x293775双] Y:[2x293775双]统计:[1x1的结构] IDATA:[1x1的结构]
评估解决方案在该时间点之后Ť= [0.5,0.75,1]。所述第一值是当前它)
和所述第二值是角速度值w(t)
。我们看到,对于角速度的解决方案已经开始接近稳定状态steadyStateW
。
德瓦尔(溶液,0.5),德瓦尔(溶液,0.75),德瓦尔(溶液,1)
ANS =2×10.2563 4.7795
ANS =2×10.2563 5.5034
ANS =2×10.2563 5.8453
steadyStateW
steadyStateW =
画出的解决方案。
时间= linspace(0,2.5);iValues =德瓦尔(溶液,时间,1);wValues =德瓦尔(溶液,时间,2);steadyStateValuesI = VPA(steadyStateI *酮(1100),10);steadyStateValuesW = VPA(steadyStateW *酮(1100),10);数字;plot1 =副区(2,1,1);plot2 =副区(2,1,2);图(plot1,时间,wValues,'蓝色',时间,steadyStateValuesW,' - 红色','行宽',1)情节(plot2,时间,iValues,'绿色',时间,steadyStateValuesI,' - 红色','行宽',1)标题(plot1,“直流电动机 - 角速度”)标题(plot2,“直流电动机 - 当前”)ylabel(plot1,“角速度[弧度/秒]”)ylabel(plot2,'电流[A]')xlabel(plot1,'时间[s]')xlabel(plot2,'时间[s]')图例(plot1,'值w(t)','值w(t):稳定状态','位置','northeastoutside')图例(plot2,'它)','I(t)为稳定状态','位置','northeastoutside')
使用原来的公式产生的Simscape代码公式
。
symWriteSSC('MyMotor.ssc','MyMotorTemplate.ssc',均衡器,...'H1Header',“%定制直流电动机,...“帮助文件”{“%此块实现了定制的DC马达”})
通过使用显示所生成的成分类型
命令。
类型MyMotor.ssc
部件MyMotor%定制直流电动机%该块实现一个定制的DC马达的节点P = foundation.electrical.electrical;%+:左N = foundation.electrical.electrical;% - :左R = foundation.mechanical.rotational.rotational;%R:右C = foundation.mechanical.rotational.rotational;%C:右端参数R = {3.9, '欧姆'};%电枢阻抗L = {0.000012, 'H'};%电枢电感J = {0.000001, '公斤*平方公尺'};%惯性DR = {0.000003, '(N * M * S)/弧度'};%转子阻尼的Ki = {0.000072, '(N * M)/ A'};%转矩常数KB = {0.000072, '(V * S)/弧度'}; %Back-emf constant end variables torque = {0, 'N*m'}; %Total Torque tau = {0, 'N*m'}; %Electric Torque w = {0, 'rad/s'}; %Angular Velocity I = {0, 'A'}; %Current V = {0, 'V'}; %Applied voltage Vb = {0, 'V'}; %Counter electromotive force end function setup if(R<=0) error('Winding resistance must be greater than 0.'); end end branches torque : r.t -> c.t; % Through variable tau from r to c I : p.i -> n.i; % Through variable i from p to n end equations w == r.w -c.w; % Across variable w from r to c V == p.v -n.v; % Across variable v from p to n torque+J*w.der == tau-Dr*w; tau == Ki*I; L*I.der+R*I == V-Vb; Vb == Kb*w; end end
构建从生成分量的Simscape库。
如果〜ISDIR('+ MyLib中')MKDIR+ MyLib中;结束拷贝文件MyMotor.ssc+ MyLib中;ssc_buildMyLib中;
在当前目录 '的/ t万博1manbetxmp / Bdoc20a_1326390_83879 / tp12bdb807 /符号,ex98670381' 生成的Simulink库 'MyLib_lib' ...