。
符号数学工具箱をを用して,simscapeライブラリにカスタム方程式に基因たコンポーネントを作物。
符号数学工具箱は,任意の空间次元において,工学院又驾驶からモデル开放を行うのなないいますますています。
コンポーネントに不可欠な物理特性を表す際に必要となる方程式を作成し,解を求めることができます。また,独自の低次元化されたモデルの,入力xと対象となる量f(x)との间のマッピングが可です。
ここで,fは,次の形式で支配方程式を表すことができるカスタムコンポーネントです。
数码
ODEとPDEの数値シミュレーション
この例の手順は,以下です。
symreadsscvariables.
を使用したSimscapeコンポーネントのパラメーター化
diff
をを用したsimscapeコンポーネントのカスタム式の定义
解决
とsubs
をを用した定常定常状态式の解析的な求解
matlabfunction.
とODE45.
を使用したMATLABにおける時間依存方程式の数値的な求解
Symwritessc.
をを用したsimscapeコンポーネントの作用
この例を実行するには,Simscapeおよび符号数学工具箱のライセンスが必要です。
DCモーターは电视エネルギーエネルギー机械エネルギーに(またその逆方向にも)変换変换デバイスです.dcモーターの概略図をに示します(左図).dcモーターのシミュレーションブロックはSimscape电气™(右図)で与えられており,これはsimscape.のの制品です。
このこのでは,支配方程の常微分类方程程(ode)をを使使しdcモーターの低低次元モデル表现导出ます.dcモーターのモーターモーターモーターモーターからから,机械はののから,机械械の式はニュートンの则则から导かれます。これらこれら方程式式式使使でで,カスタムカスタムパラメトリックなsimscapeコンポーネントコンポーネント実装。
在のフォルダーまたは既定のmatlabパスパスsimscapeコンポーネントMyMotorTemplate.ssc
があるとします。このこのコンポーネントのありませませはまだモーターのの発に発モーター発にににととととにパラメーターパラメーターといにパラメーターパラメーターと程テンプレートにパラメーター発类型
を使用すると,そのテンプレートのプレビューを表示できます。
类型MyMotorTemplate.ssc
组件MyMotortemplate%自定义直流电机%该块实现了自定义直流电机节点P =基础。电极;% +:左n = foundation.electric .electric;% -:左r = foundation.mechanical.rotation .rotation;c = foundation.mechanical. rotate . rotate;% C:右结束参数R ={3.9, '欧姆'};%电枢电阻L = {0.000012, 'H'};%电枢电感J = {0.000001, 'kg*m^2'};%惯性Dr = {0.000003, '(N*m*s)/rad'};%转子阻尼Ki = {0.000072, '(N*m)/A'};%转矩常数Kb = {0.000072, '(V*s)/rad'}; %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
テンプレートコンポーネントからパラメーターの名前,値および単位を読み取り。
[帕扣,帕拉瓦,褶皱] = SymReadsScParameters('mymotortemplate');
パラメーター,その値および対応する単位をベクトルで表示します。
vpa ([parNames;parValues;parUnits), 10)
ans =
関数Syms.
を使用してパラメーター名をMATLABワークスペースに追加します。パラメーターはワークスペースでシンボリック変数として表示されます。WHO
を使用すると,ワークスペースの変数のリストを表示できます。
syms(滞后)syms
您的符号变量是:J KB KI L r ANS博士
コンポーネント変数の名前を読み取って表示します。ReturnFunction
をを使用しし,これらこれらの数を数t
の关节数に変换します。
[varfuns,varvalues,amarunits] = symreadsscvariables('mymotortemplate','返回功能', 真的);VPA([varfuns; varvalues; amarkunits],10)
ans =
関数Syms.
をを用し源名称をmatlabワークスペースに追しますはワークスペースでシンボリック表示表示されます。Syms.
で宣言したことを确认します。
Syms(varfuns)syms
你的符号变量是,Dr, J, Ki, R, vt,扭矩I, Kb, lv, ans, w
機械トルクの微分方程式は,eq1
およびeq2
のように定义さますます。它)
は電流,w (t)
は角速度を表します。
eq1 =扭矩+ j * diff(w(t))== -dr * w(t)+ tau(t)
eq1 (t) =
= Ki*I(t)
EQ2 =
电气と电气の方向程は,eq3
およびeq4
です。V (t)およびvb(t)はそれぞれ印加電圧と逆起電力を表します。
eq3 = l * diff(i(t))+ r * i(t)== v(t) - vb(t)
EQ3 =
eq4 = vb(t)== kb * w(t)
EQ4 =
これらをまとめてリストにできます。ここで,モーターのトルクは、電流に比例すると仮定します。
EQS =公式([EQ1; EQ2; EQ3; EQ4])
eqs =
方程式の左辺と右辺を抽出します。
操作数=儿童(EQS);operlist = [操作数{:}];LHS = Operlist(1:2:结束)
lh =1×4单元阵列{1x1 sym} {1x1 sym} {1x1 sym} {1x1 sym}
rhs = operList(2:2:结束)
RHS =1×4单元阵列{1x1 sym} {1x1 sym} {1x1 sym} {1x1 sym}
2番目と4番目の方程式は,τ(t)
とvb(t)
の値を定义します.4つの方程式の系を2つの方程式の系にするするは,これらの値を1番目ととのととしししししししししししし
(1) = subs(eqs(1), lhs(2), rhs(2))
公式=
等式(2)=潜艇(EQS(3),LHS(4),RHS(4))
公式=
方程。
ans =
方程式を前にパラメーターパラメーター数码を代入し。また,V (t) = 1
を使用します。
等式=潜艇(方程,[滞后,v(t)],[剖视图,1]);等式=潜艇(方程,扭矩,0);VPA(方程式。,10)
ans =
ここここで,关节w (t)
と关节它)
の時間依存性を取り除きます。たとえば,それらにシンボリック変数WW.
および2
を代入します。
Syms.WW.2equations_steady = subs(equations, [w(t),I(t)], [ww,ii]);结果=解决(ww, equations_steady ii);steadyStateW = vpa (result.ww, 10)
stignedstatew =
steadyStateI = vpa (result.ii, 10)
stiefaseStatei =
matlabfunction.
とODE45.
をを用してmatlabでシンボリック式を数据的ににし。ODE45.
に有象なな力量をを方程式から作用成し。odetovectorfield.
を使用し,力学系
(初条件
)〖matlab〗制作成品。
[vfEquations, tVals] = odeToVectorField(equations)
vfEquations =
TVALS =
M = matlabFunction (vfEquations“var”,{“t”,“Y”})
M =function_handle具有值:@ (t、Y) [Y(1)。* (-3.25 e + 5) - Y (2) * 6.0 + 8.333333333333333 e + 4; Y(1)。* 7.2 e + 1 Y(2) * 3.0]。
初期条件w(0)= 0
とI.(0) = 0
をを用ししててます微解き解き解き解き解き式を解き解き
解= ode45(M,[0 3],[0 0])
解决方案=结构体字段:求解器:'ode45'extdata:[1x1结构] x:[1x293775双] y:[2x293775双]统计:[1x1 struct] iData:[1x1 struct]
t= [0.5,0.75,1]の时钟で解を评価ます.1番目の値は电阻它)
,2番目の値は角速度w (t)
です。角速度の解が定常状態steadyStateW
に近づき始めていることがわかります。
德瓦尔(解决方案,0.5),德瓦尔(解决方案,综合成绩),德瓦尔(解决方案,1)
ans =2×10.2563 - 4.7795
ans =2×10.2563 5.5034
ans =2×10.2563 5.8453
steadyStateW
stignedstatew =
解をプロットします。
时间= linspace (0, - 2.5);iValues = deval(solution, time, 1);wValues = deval(solution, time, 2);steadyStateValuesI = vpa (steadyStateI * (1100), 10);steadyStateValuesW = vpa (steadyStateW * (1100), 10);图;plot1 =次要情节(2,1,1);plot2 =次要情节(2,1,2);情节(wValues plot1,时间,'蓝色的',时间,steedstaltevaluesw,“——红”,'行宽', 1) plot(plot2, time, iValues,“绿色”、时间、steadyStateValuesI“——红”,'行宽'1)标题(plot1'直流电动机 - 角速度')标题(plot2“直流电机-电流”)Ylabel(Plot1,'角速度[rad / s]')Ylabel(Plot2,'当前[a]')Xlabel(Plot1,'时间[S]')Xlabel(Plot2,'时间[S]')传奇(Plot1,'w(t)','w(t):稳态','地点',“northeastoutside”)传奇(Plot2,'它)','我(t):稳态','地点',“northeastoutside”)
作物した方程式方程式
をを用してsimscapeコードコード生成します。
symWriteSSC (“MyMotor.ssc”,'mymotortemplate.ssc',eqs,......'h1header','%定制直流电机',......'helptext',{这个block实现了一个自定义的直流电机})
生成さされたコンポーネントコンポーネント类型
コマンドで表示します。
类型mymotor.ssc.
这个块实现了一个自定义直流电机节点p = foundation.electric .electrical;% +:左n = foundation.electric .electric;% -:左r = foundation.mechanical.rotation .rotation;c = foundation.mechanical. rotate . rotate;% C:右结束参数R ={3.9, '欧姆'};%电枢电阻L = {0.000012, 'H'};%电枢电感J = {0.000001, 'kg*m^2'};%惯性Dr = {0.000003, '(N*m*s)/rad'};%转子阻尼Ki = {0.000072, '(N*m)/A'};%转矩常数Kb = {0.000072, '(V*s)/rad'}; %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;
在当前目录'/ tmp万博1manbetx / bdoc20b_1448999_148027 / tp67801eb6 / symbolic-ex98670381'中生成Simulink Library'MyLib_lib'。