やっつけな日常(2) Scilab+Xcosで、伝達関数からシミュレーション

Joseph Halfmoon

別記事にてLTspiceで制御理論の回あり、まだ途中ですがLTspiceでも制御理論の勉強できるのは分かりましたです。でも制御理論「向き」のツールあるんじゃないかと。。。今回は、これまた別件の信号処理でお世話になっているScilabとその上のブロックダイアグラム描いてシミュレーションできるXcosで同じことをやってみます。

別記事にて参照させているアナデバ、Simon Bramble 様の解説記事は以下です。普通はブロックダイアグラム・ベースで説明されることが多い制御理論をLTspiceで解説しようという「意欲」作です。

2次システムの電子制御理論――技術者のための実践的な解析

皆大好きLTspiceだけれども、ちょっと手を広げすぎという感じがしないでもないです(個人の感想です。)

今回は上の記事で例題になっているRLC回路を、ブロックダイアグラム・ベースのシミュレーションツール、ScilabのXcosで、伝達関数を定義するブロック1個使ってシミュレーションをかけてみたいと思います。

伝達関数そのままのブロックダイアグラム

当然、もっと「小分け」のブロックでシステムを表現してシミュレーションかけることはできるのですが、記事にて伝達関数はアカラサマになっているので、それをそのまま利用させていただきました。何も考えないで済むのでお楽。

BLOCK_DIAG

伝達関数を表すブロックが2個並んでいますが、それぞれ箱の下のRLCの定数のケースに対応しています。

またアナデバ様の記事では「インパルス」的な一発パルスで駆動しているのですが、こちらではステップ関数で置き換えてしまってます。このため0に収束ではなく、ステップの高さに収束です。

コンテキスト設定、係数などの事前準備

実際のRLCの値などは、XCOSのシミュレーション・メニューの中のコンテキスト設定というところで値を定義しています。こんな感じ。

ContextSettings

ここで設定した値は、シミュレーションの冒頭で一回だけ評価されて、以降参照できる、ということでした。OmegaNは、非減衰振動数(減衰係数を考えないときの固有振動数 rad/s です。Zeta1、Zeta2は、2つの回路(Rのみ異なる)の減衰係数です。伝達関数を評価するときに無駄な計算を繰り返さないように、分母、分子にあらわれる定数をA, B1, B2としてここで計算してしまっています。

伝達関数の設定

伝達関数ブロック(連続時間)は、以下のように s を使って記述できます。continuous SISO transfer のSISOは、単入力単出力ということで良いみたいです。本当か?

TransferFunction

コンテキスト設定で係数準備してあったので、伝達関数はシンプルよな。

シミュレーションの設定

シミュレーションの設定はほとんどデフォルト値のままですが、「積分終了時間」のところ(シミュレーションの終了時間と同義だという理解)だけ変更してあります。100μsのつもり。

SimSettings

 

入力波形

入力のステップ波形、0[V]から始まって10ns後に1[V]にステップして以後ずっと1のつもり。

StepFunctionSetting

 

スコープ用のクロック設定

グラフを描くためにスコープに「サンプリング・クロック」的なものを与えないとなりません。10nsとしてみました。あまり細かいと計算大変そうだし、荒いと綺麗な曲線にならないし、ということでテキトーです。初期化時間はとりあえず0です。この辺、どう効いてくるのかまだ良く分かってないです。やっつけでご乱心。

ScopeClockSetting

 

CMSCOPEの設定

CMSCOPEは1個のスコープブロックに複数個のトレースを並べて表示できるものです。設定はこんな感じでどうよ。

CMSCOPEsettings

 

シミュレーション結果

ここまでの設定でシミュレーションをした結果を、冒頭のアイキャッチ画像に掲げました。一方、LTspiceで計算した結果は、こちら に(LTspiceの青トレースが、アイキャッチ画像の黒トレース、LTspiceの赤トレースがアイキャッチ画像の緑トレースに対応です。)

まあ、雰囲気は出ているんでないかい。いい加減でやっつけだな。

やっつけな日常(2) ラズパイ4のPython3でRTC-4543Aの読み書きテスト へ戻る

やっつけな日常(3) Raspberry Pi上でUSB接続を調べる2つの方法 へ進む