12
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

MATLAB/Simulink Advent Calendar 2022Advent Calendar 2022

Day 2

コンバータ制御設計に役立つ状態平均化モデルをsimulinkで書いてみた3

Last updated at Posted at 2022-12-01

前回までのあらすじ

この記事では2つ前の記事 https://qiita.com/griffin921/items/47c4efe95550b36f15d1
で取得した代数式モデルを
伝達関数モデルに変換した1つ前の記事 https://qiita.com/griffin921/items/53dc2f3218bcd8d8c188
の内容をもとに遂にSimulink の世界にその結果を持ち込むところを実際にやってみた。

つづきはこちら
記事その4https://qiita.com/griffin921/items/87dcda9ba1879cca1181

Simulinkによる微分方程式モデルの記述と線形化

本スクリプトでは記事その2で導出した伝達関数をSimulink Control Designの線形化機能を用いて導出する。

異なるアプローチで同じ伝達関数を導出し、それぞれを比較することで立式が妥当であるかを検証することができる。

Simulinkで作成したモデルをシミュレーション・線形化処理を行うことで
1つ前の記事で手計算で導出した伝達関数を異なるアプローチで導出できることを理解する。
これにより代数式モデルの結果とSimulinkモデルからの結果両者を比較することで立式の妥当性検証が行えることを確認する。

1. 状態平均化モデルの呼び出し

その1の最後で.matファイルに保存しておいた
代数式演算結果をワークスペースに展開します

Code
clear variables
load('Parameters/AveragedState-SapaceModel.mat')

2. Simulinkモデルによる微分方程式記述

ここでその1の式(4.1)に着目すると

\frac{d}{\mathrm{d}t}\mathit{\mathbf{x}}\left(t\right)=\textrm{Ax}\left(t\right)+\textrm{Bu}\left(t\right)\cdots \left(4\ldotp 1\textrm{@Script01}\right)

Symbolic Math Toolboxによってこれらの式を計算することで状態空間モデルを各微分項の微分方程式に変換できる。

Code
%シンボルを追加定義
syms x u dxdt vout iL vc Vin
x = [iL; vc] 

x =

 \left(\begin{array}{c}
\textrm{iL}\\
\textrm{vc}
\end{array}\right)
Code
u = Vin

u =

 \textrm{Vin}
Code

dxdt = simplify(A*x + B*u)

dxdt =

 \left(\begin{array}{c}
-\frac{\textrm{vc}-\textrm{Duty}\,\textrm{Vin}}{L_1 }\\
-\frac{\textrm{vc}-\textrm{Ro}\,\textrm{iL}}{C_1 \,\textrm{Ro}}
\end{array}\right)
Code

vout = C*x + D*u

vout =

 \textrm{vc}

dxdtの第一要素は$\frac{{\textrm{di}}_L }{\textrm{dt}}$、第二要素は$\frac{{\textrm{dv}}_c }{\textrm{dt}}$なので

Code
syms diLdt dvcdt

diLdt = dxdt(1)

diLdt =

 -\frac{\textrm{vc}-\textrm{Duty}\,\textrm{Vin}}{L_1 }
Code
dvcdt = dxdt(2)

dvcdt =

 -\frac{\textrm{vc}-\textrm{Ro}\,\textrm{iL}}{C_1 \,\textrm{Ro}}

上記式をSimulinkモデルで記述することで時系列シミュレーションとして動作する式モデルを構築できる。

※1ここで議論されるiL,vcは瞬時値ではなくあくまで"サンプリング周期において平均化された値"であることに注意する必要がある。
即ち、ここで議論される微分や積分は実コンバータにおけるリプルが重畳した電流、電圧を平均化した値に対しての積分、微分であり、瞬時値に対する積分・微分とは異なる。

※2ここで出力方程式(4.4@その1)の議論をしていないのはVo=VcであるのでvcをVoとして扱えば今回の場合は問題ないためである。これはいくつかのパラメータ要素を省略しているため(インダクタの直流抵抗成分、コンデンサのESR等)であるため、より詳細なモデリングを行う場合はSimulinkの記述モデルに出力方程式の演算も含めなければならない。

2.1. iLに対する微分方程式のSimulink記述

いかなるツールを使ったとしても、コンピュータでシミュレーションする際には常に有限の数しか扱うことができないため、

インパルス応答、ステップ応答のような立ち上がりを示すような時系列信号に対して微分を施すと、

無限大の値に発散するため、多くの場合、近似微分と言うかたちで高周波のゲイン上昇を任意の周波数で抑制するような形で扱う。

そのため、実際の微分値に対して誤差を含んでしまうため、

Simulinkで微分方程式を記述する際は積分系に式を変換して記述することが一般的である。

$\frac{{\textrm{di}}_L \left(t\right)}{\textrm{dt}}$、$\frac{{\textrm{dv}}_c \left(t\right)}{\textrm{dt}}$を積分することで$i_L \left(t\right)$,$v_c \left(t\right)$とすることができる。

その際式の右辺にも積分する必要がある。

この微分方程式をラプラス変換すると、積分は$\frac{1}{s}$で表すことができるため、Symbolic式の diLdtを$s$で割って$i_L \left(s\right)$,$v_c \left(s\right)$の式にすると

Code
syms s iL_s
iL_s = diLdt / s

iL_s =

 -\frac{\textrm{vc}-\textrm{Duty}\,\textrm{Vin}}{L_1 \,s}

上記式をSimulinkモデルで記述する。

Symbolic式ではすべて変数として扱ったが、厳密には$L_1$だけが時間に依存しない定数でありその他の変数は時間の関数で表せる。

最終的な式の出力は$i_L$(t),

式に対する入力変数は$V_{\textrm{in}} \left(t\right)$,$\textrm{Duty}\left(t\right)$,$v_c \left(t\right)$とし

$L_1$は式の定数とする。

2.1.1 Simulinkモデル編集ウィンドウの表示

Simulinkモデルを新規作成する。

簡潔なSimulinkの基本操作を説明するが、

Web上解説資料が存在するためそちらを合わせて確認してほしい。

■Youtube

今から始めるSimulink https://youtu.be/em73agWEUuo

Simulink入門 プログラミング不要な数値シミュレーション

https://www.youtube.com/watch?v=oPsdCH-dXL0&ab_channel=MATLABJapan

■自己学習コンテンツ

Simulink入門

https://jp.mathworks.com/learn/tutorials/simulink-onramp.html

MATLAB コマンドウィンドウで"simulink"と入力するか

MATLABのGUI上部のSimulinkアイコンをクリックすることで Simuinkは起動する。

2.1.2 Subsystemの作成

状態空間モデルは2つの微分方程式で表現されるが、まずiLについての式について記載する。

Simulinkにはサブシステムという機能があり、ある数式の処理をひとまとまりのサブシステムブロックとして記述ができる。

キャンパスにサブシステムを下記の通り作成する

image_2.png

  1. ダブルクリックで水色の検索ダイアログを表示させる
  2. "subsystem"と記述する
  3. Enterキーを入力する

サブシステムブロックに入力端子を追加する

image_3.png

  1. Subsystemブロックの端をクリックして水色のダイアログを表示させる
  2. ”入力信号端子の作成”をクリックして端子を増やす

入出力端子に名前を付ける

image_4.png

  1. Subsystemブロックをダブルクリックして一階層下のレイヤーに移動する
  2. 入力ブロックをクリックすると、In1,In2等デフォルトのブロック名が水色で表示されるので、その名前をクリック
  3. キーボード入力ができるようになるのでDuty,Vin,vcの式にとっての入力変数の名前に変更する
  4. 同様に出力ポートブロック名をiLに変更する

2.1.3 式をブロック線図として記述する

image_5.png

ライブラリブラウザボタンをクリックして
提示されるブロックを組み合わせて微分方程式を記述していく。

もはやこのアドカレで言及することもないかもしれないけれど
ブロックをSimulinkのモデルに配置するには、該当ブロックをライブラリブラウザからドラッグ・アンド・ドロップするだけである。

またブロックの端子をドラッグすることでブロック間の結線が可能である。
image_8.png

今一度iLの式を思い出してみると

Code
iL_s

iL_s =

 -\frac{\textrm{vc}-\textrm{Duty}\,\textrm{Vin}}{L_1 \,s}

これをSimulinkモデルで記述すると下記のとおりになる。

image_9.png

赤く表示がされているブロックはパラメータL1が

MATLABワークスペースに定義されていないことを示す警告であるので、

下記のコードを実行することで、パラメータを定義しておきエラーを解消する。

Code
 
L1 = 200e-6 %[H]
Output
L1 = 2.0000e-04

式との対応がわかりやすいよう信号線に演算過程を示す信号名を付与している。

信号線に名前を付与する場合は、下記のとおりに行う。

  1. 信号線をダブルクリック
  2. キーボードで信号名を入力

このように左から右に信号が流れる形で微分方程式を立式できる。

2.1.4 微分方程式のシミュレーション

下記ボタンをクリックし一階層上のレイヤーに移動する。

image_11.png

Commonly Used Blocksの中から Constant ブロック、Scopeブロックを用いて下記図のように配置・接続する

  1. 定数を出力するConstant ブロックを3つ配置しSubsystemの入力に接続
  2. Constantブロックをダブルクリックし、各定数を下記図に従って入力する
  3. 信号を観測するScopeブロックを1つ配置しSubsystemの出力に接続
  4. Subsystemをクリックする
  5. Subsystemブロック下部に表示される青い"Subsystem"テキストをクリック
  6. "CurrentEquation"とキーボードで入力しサブシステムに名前をつける

image_12.png

これにより、微分方程式について記述した関数 $i_L \left(t\right)=\textrm{CurrentEquation}\left(\textrm{Duty}\left(t\right),V_{\textrm{in}} \left(t\right),v_c \left(t\right)\right)$をサブシステムとしてモデリングができ、シミュレーションが実行できる状態になった。ヤッタ━━━( p゚∀゚)q━━━━!!

さっそく0.1sという時間でシミュレーションしてみる。

  1. ”シミュレーション”タブをクリック
  2. Simulationの"終了時間"を0.1[s]と設定
  3. "実行"ボタンをクリック

すると先程定義した微分方程式が演算され、下記のような出力を取得できる。

image_15.png

ポエム

どうでもいいけどなんでもっかい同じ式をSimulink とやらで書く必要がある訳?というコメントに対してのお気持ち表明

正直にいうとまぁ気持ちはわかる。だるい。
しかもシミュレーションしてもこの時点では正直面白くない。
だってインダクタに電圧かけたら一定の傾きで電流が上昇していくなんて当たり前すぎるからだ。(言い過ぎかしら)

とはいえブロック線図というのが制御設計する上で結構大事である。
例えば、インダクタの値は実際の世界では電流に対して非線形特性を持ち、変動してしまうが
「このインダクタンスの変動を補償するようなアイディアは無いだろうか?」
とか考えるときに 式の途中経過のどの信号を利用しようかなどあれこれ考えるときに
整理がおわった式全体としてではなく、
式の演算過程の関係性や途中の信号をいじったり、取り出したりできるブロック線図は非常に都合がいい。

そういう意味であえてブロック線図にかく意義ってのはあるのではないかと思う。


あと、シミュレーション実行可能ってのも、今は考えたらわかるやろ、って式だけど
実際コンバータをガチで設計しようと思うとたいていこの例題のモデリングでは全然ダメで
もっと複雑な形でモデリングしようとするはずだ。
そういう場合は自分の考えが正しいかを確認する拠り所として改めてSimulink でモデリングするのは悪くないと思う。

個人的には制御工学においてブロック線図とそれが直ちにシミュレーションできるという環境がが好まれるのはこういった理由があるのではないかと考えている(諸説あります)。


2.2. vcに対する微分方程式のSimulink記述

2.1と同様にvcについてもモデリングを行う。

dvcdtの式を思い出してみると

Code
dvcdt

dvcdt =

 -\frac{\textrm{vc}-\textrm{Ro}\,\textrm{iL}}{C_1 \,\textrm{Ro}}

これをラプラス変換し積分系に変換すると

Code
syms cv_s
cv_s = dvcdt / s

cv_s =

 -\frac{\textrm{vc}-\textrm{Ro}\,\textrm{iL}}{C_1 \,\textrm{Ro}\,s}

となっている。

入力を$i_L \left(t\right)$,$R_o \left(t\right)$

出力を$v_c \left(t\right)$

定数であるパラメータを$C_1$とし新たなサブシステムを作成する。

Code
C1 = 300e-6;%[F]

2.2.1 Subsystemの作成

image_16.png

新たなサブシステムとして"VoltageEquation"を定義する。

また信号の入出力ポートに名前を定義する。

vcの出力がiLの式の入力となるので上記図のように結線する。

これによって2つの微分方程式間の関係性を定義できる。

ここでも立式するだけでは理解しにくい関係性を視覚的に理解できるのもブロック線図の良さを体験できる。

ポエム

こういうのちょいちょい挟むのしつこいかな。。。

まぁ書くけどな!

コンバータの試作品に対して色々な条件で動かしてあーでもない こうでもないと試行錯誤するやり方もやったことあるが、
それよりも、
プラントを電流系、電圧系に分割しながらステップバイステップで検討を進めていけるのはとてもいいと思う。

ただ、まぁ実機の実験は楽しい。それは僕もよく分かる。楽しすぎてプライベート用のマイオシロスコープを買ったくらいだ

が。
やはり我々はサラリーマンであるので、実機いじくり倒して
「壊しちゃいましたぁ てへ」で、そうやすやすと許されるような立場ではないはずである。


極端(?)な例として
イーロン・マスクさんのSpaceXもバカスカ失敗して試作品のロケット爆発させてるが、
じゃあ彼らが「シミュレーションなんか無駄だぜ!とりあえず打ち上げちゃえ」という思想でやってんのかというと、
多分そうではなくて

あれも実際はシミュレーションでわかるところは事前にちゃんとやっていて。
で、ある程度検討した上でもやっぱり実機でしかわからないところがあるので、
そのときはもう机上でうだうだいってないでやってみるしか無いですよね? じゃやりましょう。
ってスタンスなのかなと想像している。

うまくシミュレーションの領分と実機検証での領分をバランス取った上でやってみて
そのうえであれだけ失敗するむずかし~いことにチャレンジしてるのだと僕は思う。

実験は楽しさもあるけど、失敗はできないというプレッシャーが常につきまとい、
いざ失敗しちゃうと取り返すのは大変である。
なので失敗してもすぐ取り返しが効く机上で検討できるというのは精神衛生上良いのである。
モデルベース開発で心理的安全性を確保しよう。


2.2.2 式をブロック線図として記述する

2.1.3と同様の要領でモデリングすると下記図のとおりになる。

image_17.png

2.2.3 微分方程式のシミュレーション

モデルの最上位レイヤに移動しシミュレーションを実行する。

  1. 入力$R_o$の値をConstantブロックで定義し定数"5"を設定
  2. vcの出力端子にScopeブロックを配置
  3. Dutyに接続されているConstantブロックの値を"0.5"に変更
  4. ScopeブロックをダブルクリックしてScopeウィンドウを開く
  5. シミュレーションの”実行”ボタンをクリック

image_21.png

image_22.png

このようにDuty,Vin,Roがある値を持つときのコンバータ出力電圧についてのシミュレーションが
微分方程式をモデリングすることで確認できた。

これもまぁ当たり前っちゃ当たり前だが、
コンバータの特性っていうのはDuty比に応じてインダクタにかける平均電圧をコントロールすることで
インダクタを電流源として操作し、その電流がコンデンサに流れ込み、その両端電圧がコンバータの出力電圧として現れるというコンバータ特性の全体像が視覚的にもわかりやすく表現できる。

3. Simulinkによる微分方程式モデルの定常解(静特性式)の導出

シミュレーションの結果が6Vに収束していることに注目したい。
その2の式(2.2)において定常状態を求めた際に得た式に値を代入するとシミュレーション結果が収束した値と一致する。
その2からの再掲になるが、

提示した状態変数の定常解を大文字を用いて$\mathit{\mathbf{X}}=\left\lbrack \begin{array}{c}
I_L \
V_c
\end{array}\right\rbrack$、出力を$U=V_{\textrm{in}}$と記述することにする。

\begin{array}{l}
0=\mathit{\mathbf{A}}X+{\textrm{BV}}_{\textrm{in}} \cdots \left(2\ldotp 1\textrm{@記事その2}\right)\\
\textrm{Vo}=\textrm{CX}\cdots \left(2\ldotp 2\textrm{@記事その2}\right)
\end{array}

$\mathit{\mathbf{X}}$導出のために式(2.1@記事その2)を変形し

$\mathit{\mathbf{X}}=-{\mathit{\mathbf{A}}}^{-1} \textrm{BU}$を計算する代数式演算を行う。

Code
syms X U Vin Vc

U = Vin

U =

 \textrm{Vin}
Code
X = -inv(A)*B*U

X =

 \left(\begin{array}{c}
\frac{\textrm{Duty}\,\textrm{Vin}}{\textrm{Ro}}\\
\textrm{Duty}\,\textrm{Vin}
\end{array}\right)
Code
Vc = X(2)

Vc =

 \textrm{Duty}\,\textrm{Vin}

各変数を代入して値を得ると下記のとおりに確かにシミュレーション結果の収束値と一致する。

Code
Ro = 5;
Vin = 12;
Duty = 0.5;
subs(Vc)
ans = 6

シミュレーションによって式に時系列データを入力し出力を計算することで
代数的に演算した定常解と同じ答えを別のアプローチから得ることができた。
このように異なるアプローチから解を求め、両者を比較することで立式の妥当性検証が行える。

ポエム

僕は空気を読まないのでポエムをはさみ続ける

こういう形でシミュレーションを理論として求められるであろう期待値が
正しいものかを検証するための道具として使うととても良い。

こうしておくと、仮に理論と一致しなかった場合においても便利である。

  • 理論建てが間違ってたケース
  • シミュレーション結果の解釈や見るところが間違ってたケース
  • シミュレーションモデルの作り方が間違ってたケース
    等 想定される間違いシナリオを切り分けやすい。

モデルをコツコツつくっておくと成功しても失敗してもお得というのが個人的には好きなところだ。


4. Simulinkによる微分方程式モデルの動特性式の導出

MATLABのオプション製品であるSimulink Control DesignはGUI操作でSimulinkのモデルを線形化することが可能であるっぽい。ほんとにそうなのか試してみる。

まず、下記図のように2つの式を1つのサブシステムにまとめる。

image_23.png

操作としては下記の通り

  1. ドラッグ・アンド・ドロップでまとめたい範囲を指定
  2. 表示される青い”・・・”ブロックをクリックし”サブシステムの作成”をクリック
  3. もしくは選択範囲を右クリックして右クリックメニューから”選択からサブシステムを作成”を選択
  4. 新たなサブシステム "BuckConverter"にリネームする

■式(4.4 @その2)$\frac{\Delta \mathit{\mathbf{X}}\left(s\right)}{\Delta R_o \left(s\right)}$の導出

\frac{\Delta \mathit{\mathbf{X}}\left(s\right)}{\Delta R_o \left(s\right)}={\left(\textrm{sI}-\mathit{\mathbf{A}}\right)}^{-1} \left(\frac{\partial }{\partial R_o }\textrm{AX}\right)\;\cdots \left(7\ldotp 4\textrm{@記事その2}\right)

この伝達関数はRo(s)からX(s)までの伝達関数である。

Simulinkモデルで線形化を行うには伝達関数の入力と出力をモデル上で指定する必要がある。

Simulink モデルのモデル操作点での線形化

こちらのリンクに説明があるが一応流れを追ってみる。
https://jp.mathworks.com/help/slcontrol/ug/linearize-simulink-model.html

操作1:伝達関数における入力を指定する。

1.Roが入力されている信号線を右クリックし右クリックメニューを開く

image_24.png

2.線形解析ポイントを選択し、”入力の接動”を選択する

image_25.png

そうすると信号線にこのようなマークが付与され、この信号部分に微小振動を付与することを指定できる。

image_26.png

次に出力を指定する。$\mathit{\mathbf{X}}=\left\lbrack \begin{array}{c}
I_L \
V_c
\end{array}\right\rbrack$なので

出力はこのサブシステムの2つの出力線両方となる。

出力を指定する場合は同様に右クリックメニューから

1.信号解析ポイントを選択

2.”出力の測定”を選択

をおこなう。これをiL,Vcの両方に行う。

image_27.png

操作2:”Simulink Control Design”の”モデル線形器アプリを使う

上部ツールストリップから

  1. ”アプリ”タブの選択
  2. モデル線形化器アプリをクリック

image_28.png

このようなウィンドウが開く。

image_29.png

操作3:定常状態を操作点になるように設定

その2における2章:定常解(静特性式)の導出で行ったことと等価な作業、

即ち微小振動を入力する前に定常状態である$\mathit{\mathbf{X}}=\left\lbrack \begin{array}{c}
I_L \
V_c
\end{array}\right\rbrack$が一定値をもつ状態をアプリで設定する。

一つ前の章である3. Simulinkによる微分方程式モデルの定常解(静特性式)の導出

にて、Simulinkで式をモデリングしてシミュレーションすることで定常解を求められることを示した。

これを利用して、このツールには「シミュレーション実行時間X秒時点の演算結果を定常解とする」

というような指定をする事が可能である。これをこのアプリでは”スナップショットを撮る”という。

下記の通り

  1. ”操作点:モデルの初期条件”をクリック
  2. シミュレーションのスナップショットを撮るをクリック
  3. シミュレーションのスナップショット時間を指定

image_30.png

2.2.3 微分方程式のシミュレーションで確認したシミュレーション結果から

0.03秒以降であれば十分解が一意の値に収束してい良いように見えるので
今回はスナップショット時間を0.03と設定した。

image_31.png

スナップショットボタンをクリックすると

線形化アプリ専用のローカルワークスペースである

線形解析ワークスペースにop_snapshot1というデータが追加される。

また、操作点として生成されたop_snapshot1が設定されていることもわかる。

image_32.png

こちらの通り、定常状態である$\mathit{\mathbf{X}}=\left\lbrack \begin{array}{c}
I_L \
V_c
\end{array}\right\rbrack$にたいして定常解が求められていることがわかる。

上から1つ目の状態が$I_L$に相当し、2つ目の状態が$V_c$に相当する。

image_33.png

操作4:定常状態近傍でモデルを線形化

アプリ上部の「ステップ、ボード線図、インパルス、ナイキスト、ニコルス線図・・・」等のプロットをクリックすれば

アプリが定常解近傍での線形化を実施し、指定したグラフをプロットする。

プロット画面右端の▽ボタンをクリックすることですべての操作ボタンを閲覧できる。

image_34.png

ここで「ボード線図」をクリックすると下記の通り

記事その2で■式(4.4)$\frac{\Delta \mathit{\mathbf{X}}\left(s\right)}{\Delta R_o \left(s\right)}$の導出で求めた2つの伝達関数に相当する結果がアプリ操作で取得できる。

5. 代数式演算の結果と比較

記事その2で求めたSymbolic式データをロードする。

Code
load('SymbolicEquation.mat');

アプリで線形化された結果は

線形化アプリ専用のローカルワークスペースである

線形解析ワークスペースにop_snapshot1というデータが追加される。

こちらをMATLABワークスペースにドラッグ・アンド・ドロップすれば、データが

MATALBのワークスペースにコピーされてスクリプトから操作できるようになる。

image_35.png

コピーされた変数名が”linsys1"以外ならば下記スクリプトの都合上名前を"linsys1"にリネームすること。

代数式モデルとアプリで取得した線形化結果を比較する。

結果:さぁほんとにアプリで線形化してくれんのか? やれんのかい? やれないのかい? どっちなんだい!

Code
%Symbolic式を伝達関数モデルに変換
Gplant_s = arrayfun(@sym2tf_ykamatan,subs(GdXdRo),'UniformOutput',false);

%モデルのサイズを取得
[row, colm] = size(GdXdRo);

%ループを回して各要素のボード線図を描画
for i = 1:row
    for j = 1:colm
        ax = subplot(2,1,(i-1)*colm+j);
        %代数式ベースの伝達関数をプロット
        bodeplot(ax,Gplant_s{i,j});
        grid on;
        hold on;
        %アプリで取得したやつをプロット
        bodeplot(ax,linsys1(i,j),'--y');
    end
end
legend('代数式モデル','線形化アプリによる線形化結果')

figure_0.png

パワーーーーーー!!!:muscle: :muscle::muscle::muscle::muscle::muscle::muscle::muscle: エレクトロニクス!!
完全に結果が一致しておりアプリ操作で線形化された結果と代数式モデルで求めたものとが等価なモデルであるということが確認できた。ヤッ٩(⁎˃ᴗ˂⁎)۶ (੭ >᎑<)੭タァー!

まとめ

Simulinkで作成したモデルをシミュレーション・線形化処理を行うことで
その2で手計算で導出した伝達関数を異なるアプローチで導出できることを確認できた。

これにより代数式モデルの結果とSimulinkモデルからの結果両者を比較することで立式の妥当性検証が行えることを確認した。

そう、一生懸命式を立てて、ボード線図かいてみたはいいものの
これってあってんのかなぁ・・・・?ぽいけどなぁ・・・?しらんけど・・・
みたいな仕事をやりきったはずなのになんだかモヤモヤする気持ちにならなくて済むのである。

嬉しくないですか?僕は嬉しい。

ポエム

え、ポエム読みたいの?暑苦しいけど?いいの?知らんよ?

モデル化の意義は”理論を理解せずに結果を得る”ことではない。

まずは上記の検証のためのReferenceとして利用するため、
もう一つは自動化によってより広く理論を展開できるところにある。

即ち理論をモデル化することでシステマチックに解を導出できるため、より複雑なモデルに対しても同様のスキームで解を求めることができる。

とはいえ、パワエレオタクである私個人としては「理論式を追いかける楽しみを放棄するなんてもったいない」というのが本音だが、まぁそう言うの置いといて
「その・・・式をこねくり回すとかいいんで、モデル書いてその伝達関数さえ貰えれば良いんですけど。」ってこともシーンとしてはあるはずだ。
そういうときにはアプリのパワーで所望の結果をサクッと取得するのも良い。

パワエレオタクを目指したい人は

いきなりアプリに頼らず1回でもいいから式を書いてみることを強くおすすめする
よく言われる「真剣にやれよ!仕事じゃねぇんだぞ!」ってやつである
オタ活は仕事じゃないんだから!効率的とか置いといてとことん取り組もう!(????)

また、上記のアプリ操作はスクリプトから等価な操作を実行可能にする
Simulink Control Design APIが提供されているため
複数の条件に対する反復演算といった処理が必要なシーンで自動化が可能になる。


ほとんど言いたいことは言えたがおまけ的にその4に続く!
記事その4https://qiita.com/griffin921/items/87dcda9ba1879cca1181

Reference

[1] 安部 征哉, 財津 俊行, 上松 武. デジタル電源の基礎と設計法 -スイッチング電源のデジタル制御-. 科学情報出版株式会社, 2020,246p, ISBN978-4-904774-84-7.

[2] Frede Blaabjerg, ed. Yanfelng Shen, Zian Qi and Huai Wang. Control of Power Electronic Converters And Systems. Volume 1, Chapter 3 "Modeling and Control of DC-DC Converters" p69-p92, Academic Press, 2018, ISBN 978-0-12-804254-7.

[3]MathWorks."Simulink モデルのモデル操作点での線形化". MathWorks ヘルプセンター ヘルプドキュメント,2022/10/19.

\href{ttps://jp.mathworks.com/help/slcontrol/ug/linearize-simulink-model.html}{}https://jp.mathworks.com/help/slcontrol/ug/linearize-simulink-model.html

[4]MathWorks."SimulinkControl Design 入門". MathWorks ヘルプセンター ヘルプドキュメント,2022/10/19. https://jp.mathworks.com/help/slcontrol/getting-started-with-simulink-control-design.html

12
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?