主要内容

。

カスタム直流モーターのsimscapeライブラリのカスタマイズと拡张

符号数学工具箱をを用して,simscapeライブラリにカスタム方程式に基因たコンポーネントを作物。

はじめに

符号数学工具箱は,任意の空间次元において,工学院又驾驶からモデル开放を行うのなないいますますています。

コンポーネントに不可欠な物理特性を表す際に必要となる方程式を作成し,解を求めることができます。また,独自の低次元化されたモデルの,入力xと対象となる量f(x)との间のマッピングが可です。

ここで,fは,次の形式で支配方程式を表すことができるカスタムコンポーネントです。

  • 数码

  • ODEとPDEの数値シミュレーション

この例の手順は,以下です。

  • symreadsscvariables.を使用したSimscapeコンポーネントのパラメーター化

  • diffをを用したsimscapeコンポーネントのカスタム式の定义

  • 解决subsをを用した定常定常状态式の解析的な求解

  • matlabfunction.ODE45.を使用したMATLABにおける時間依存方程式の数値的な求解

  • Symwritessc.をを用したsimscapeコンポーネントの作用

この例を実行するには,Simscapeおよび符号数学工具箱のライセンスが必要です。

DCモーターモデル

DCモーターは电视エネルギーエネルギー机械エネルギーに(またその逆方向にも)変换変换デバイスです.dcモーターの概略図をに示します(左図).dcモーターのシミュレーションブロックはSimscape电气™(右図)で与えられており,これはsimscape.のの制品です。

このこのでは,支配方程の常微分类方程程(ode)をを使使しdcモーターの低低次元モデル表现导出ます.dcモーターのモーターモーターモーターモーターからから,机械はののから,机械械の式はニュートンの则则から导かれます。これらこれら方程式式式使使でで,カスタムカスタムパラメトリックなsimscapeコンポーネントコンポーネント実装。

J t w t Ki t - 博士 w t l t t + R t V t - Kb w t

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 =

博士 J Kb Ki l R 0.000003 0.000001 0.000072 0.000072 0.000012 3.9 1 N “牛顿 - 一种力量的力量。” 米——长度的物理单位。 年代 “第二 - 一个物理单位。” rad “弧度 - 平面角度的物理单位”。 1 公斤 “千克 - 物理单位的质量。” 米——长度的物理单位。 2 1 V “伏 - 电势的物理单元。” 年代 “第二 - 一个物理单位。” rad “弧度 - 平面角度的物理单位”。 1 N “牛顿 - 一种力量的力量。” 米——长度的物理单位。 一个 “安培 - 电流的物理单元。” H “亨利 - 电感的物理单位。” ω. “欧姆 - 抵抗物理单位”。 [博士,j,kb,ki,l,r;VPA('0.000003'),VPA('0.000001'),VPA('0.000072'),VPA('0.000072'),VPA('0.000012'),VPA('3.9');sym(1)*((symunit('n')* symunit('m')* symunit('s')/ symunit('rad'),1 * symit('kg')* symunit('m')^ sym(2),sym(1)*((symunit('v')* symunit('s')/ symunit('rad')),sym(1)*((symunit('n'))* symit('m'))/ symunit('a')),symunit('h'),symunit('ohm')]

関数Syms.を使用してパラメーター名をMATLABワークスペースに追加します。パラメーターはワークスペースでシンボリック変数として表示されます。WHOを使用すると,ワークスペースの変数のリストを表示できます。

syms(滞后)syms
您的符号变量是:J KB KI L r ANS博士

コンポーネント変数の名前を読み取って表示します。ReturnFunctionをを使用しし,これらこれらの数を数tの关节数に変换します。

[varfuns,varvalues,amarunits] = symreadsscvariables('mymotortemplate''返回功能', 真的);VPA([varfuns; varvalues; amarkunits],10)
ans =

t V t VB. t τ. t 扭矩 t w t 0 0 0 0 0 0 一个 “安培 - 电流的物理单元。” V “伏 - 电势的物理单元。” V “伏 - 电势的物理单元。” 1 N “牛顿 - 一种力量的力量。” 米——长度的物理单位。 1 N “牛顿 - 一种力量的力量。” 米——长度的物理单位。 1 rad “弧度 - 平面角度的物理单位”。 年代 “第二 - 一个物理单位。”

関数Syms.をを用し源名称をmatlabワークスペースに追しますはワークスペースでシンボリック表示表示されます。Syms.で宣言したことを确认します。

Syms(varfuns)syms
你的符号变量是,Dr, J, Ki, R, vt,扭矩I, Kb, lv, ans, w

simscapeコンポーネントコンポーネントのカスタム式式の

DCモーターモーターをモデルモデルモデルするため方程式系を定义

機械トルクの微分方程式は,eq1およびeq2のように定义さますます。它)は電流,w (t)は角速度を表します。

eq1 =扭矩+ j * diff(w(t))== -dr * w(t)+ tau(t)
eq1 (t) =

J t w t + 扭矩 t τ. t - 博士 w t J*diff(w(t), t) +扭矩(t) == tau(t) - Dr*w(t)

= Ki*I(t)
EQ2 =
                 
                  
                   
                    
                     
                      
                       τ.
                     
                     
                      
                      
                       
                        
                         t
                       
                      
                      
                     
                    
                    
                    
                     
                      
                       Ki
                      
                      
                      
                       
                        
                       
                       
                        
                        
                         
                          
                           t
                         
                        
                        
                       
                      
                     
                    
                   
                  
                 

电气と电气の方向程は,eq3およびeq4です。V (t)およびvb(t)はそれぞれ印加電圧と逆起電力を表します。

eq3 = l * diff(i(t))+ r * i(t)== v(t) -  vb(t)
EQ3 =

l t t + R t V t - VB. t

eq4 = vb(t)== kb * w(t)
EQ4 =
                 
                  
                   
                    
                     
                      
                       
                        VB.
                      
                      
                       
                       
                        
                         
                          t
                        
                       
                       
                      
                     
                     
                     
                      
                       
                        Kb
                       
                       
                       
                        
                         
                          w
                        
                        
                         
                         
                          
                           
                            t
                          
                         
                         
                        
                       
                      
                     
                    
                   
                   
                    vb(t)== kb * w(t)
                  
                 

これらをまとめてリストにできます。ここで,モーターのトルクは、電流に比例すると仮定します。

EQS =公式([EQ1; EQ2; EQ3; EQ4])
eqs =

J t w t + 扭矩 t τ. t - 博士 w t τ. t Ki t l t t + R t V t - VB. t VB. t Kb w t

方程式の左辺と右辺を抽出します。

操作数=儿童(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))
公式=

J t w t + 扭矩 t Ki t - 博士 w t

等式(2)=潜艇(EQS(3),LHS(4),RHS(4))
公式=

J t w t + 扭矩 t Ki t - 博士 w t l t t + R t V t - Kb w t

方程。
ans =

J t w t + 扭矩 t Ki t - 博士 w t l t t + R t V t - Kb w t

方程式を前にパラメーターパラメーター数码を代入し。また,V (t) = 1を使用します。

等式=潜艇(方程,[滞后,v(t)],[剖视图,1]);等式=潜艇(方程,扭矩,0);VPA(方程式。,10)
ans =

0.000001 t w t 0.000072 t - 0.000003 w t 0.000012 t t + 3.9 t 1.0 - 0.000072 w t

定常状态方程式のの的な求解

定常状態の方程式を解く

ここここで,关节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 =
                 
                  
                   
                    
                     6.151120734
                   
                   
                    VPA('6.151120734')
                  
                 
steadyStateI = vpa (result.ii, 10)
stiefaseStatei =
                 
                  
                   
                    
                     0.2562966973
                   
                   
                    vpa(“0.2562966973”)
                  
                 

时间依存方程式の数码的な求解

matlabfunction.ODE45.をを用してmatlabでシンボリック式を数据的ににし。

ODE45.に有象なな力量をを方程式から作用成し。odetovectorfield.を使用し,力学系 dY dt f t Y (初条件 Y t 0 Y 0 )〖matlab〗制作成品。

[vfEquations, tVals] = odeToVectorField(equations)
vfEquations =

147573952589676412928 1770887431076117 - 6 Y 2 - 2877692075498690052096. Y 1 8854437155380585 83010348331692984375 Y 1 1152921504606846976 - 27670116110564328125 Y 2 9223372036854775808 [sym('147573952589676412928/1770887431076117') - 6*Y(2) - (sym('2877692075498690052096')*Y(1))/sym('8854437155380585');(信谊(83010348331692984375)* Y(1)) /符号(' 1152921504606846976 ')-(信谊(27670116110564328125)* Y(2)) /信谊(9223372036854775808)]

TVALS =

w

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 =
                 
                  
                   
                    
                     6.151120734
                   
                   
                    VPA('6.151120734')
                  
                 

解をプロットします。

时间= 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コンポーネントの作物

Simscapeでで用する作物

作物した方程式方程式をを用して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'。