連続系と離散系を接続する場合

12 views (last 30 days)
Inoue Kaoru
Inoue Kaoru on 4 Mar 2020
Commented: Shoumei on 5 Mar 2020
連続系(コンバータなどのアナログ回路)と制御系(マイコンでデジタル処理する)をやっていますが、エラーが出ます。
対処方法がぐたいてきにわからないので、教えてください
'離散系**' を含む代数ループは、代数変数を割り当てることができない (すなわち、離散値出力をもち、非 double または複素数出力をもち、Stateflow ブロック、または非バーチャル サブシステムから構成されている) ため、解くことができません。代数ループを切り離すことを検討してください。たとえば、遅延やメモリ ブロックをループに追加できます。ループに関する詳細を確認するには、コマンド Simulink.BlockDiagram.getAlgebraicLoops(bdroot) を使用します
コンポーネント:Simulink | カテゴリ:Model エラー
'**連続系/Solver Configuration' での代数ループ エラーです
コンポーネント:Simulink | カテゴリ:Model エラー
離散系を参照システムとして作成しサンプル&ホールドRateTransitionを使って離散系に固定ステップソルバーの自動選択としていますが、入力はCont→D1にレート変換できました
しかし
3.7037037037037036E-8 の固定ステップ サイズをもつモデル 'BuckBoostMain' は、1.8518518518518518E-5 の固定ステップ サイズをもつモデル 'ACInterFaceBlock' を (Model ブロック 'BuckBoostMain/ACINTERFACEBLOCK' から) 参照します。固定ステップ サイズが異なるハイブリッドな (離散および連続の両方のコンポーネントをもつ) モデルの参照はサポートされません。
とエラーが出ます。
離散と連続の境界はどのように作ればよいのでしょうか、当方マイコン化する部分を離散系としたくアナログ入力を連続系として、RateTransitionを離散ブロック内で行うとまずいのでしょうか?
出力はPWMですが三角派は連続系です。遅延とRateTransitionを挿入してもやはりエラーになります。
モデル参照内でRateTransitionしなければよいのでしょうか、適切なサンプルが見当たらず困っています。

Answers (3)

Toshinobu Shintai
Toshinobu Shintai on 4 Mar 2020
モデル 'BuckBoostMain'のコンフィギュレーションパラメータで設定した基本サンプル時間は、27分の1の10の-8乗倍という値に指定していて、'ACInterFaceBlock'というモデルは54分の1の10の-5乗倍という値に設定していると思われます。
その前提で言いますと、27分の1や54分の1というのは、割り切れない数値になるので、浮動小数点で計算すれば必ず丸め誤差が発生します。また固定ステップで実行されるSimulinkモデルの基本サンプル時間は、その中に含む全てのブロックのサンプル時間はその基本サンプル時間の整数倍でなければなりません。
よって、27分の1は54分の1の整数倍には決してならないのでエラーとなります。
離散と連続の境界はRate Transitionで切り分けるので正解です。トップのモデル参照ファイルの前後にRate Transitionを接続し、そのブロックパラメータのサンプル時間を適切に設定すればOKです。
ちなみに離散のモデルの部分をマイコンに実装するとのことですが、3.7037037037037036E-8秒の時間間隔で制御できるマイコンなど存在するのでしょうか。1.8518518518518518E-5秒であればいける気もしますが。
特に理由がないのであれば、制御周期は割り切れる時間にすべきです。Buck Boost コンバータであれば、まずは50μs(5E-5秒)などから試してみてはどうでしょうか。
  2 Comments
Inoue Kaoru
Inoue Kaoru on 5 Mar 2020
ご回答ありがとうございます。
クロックは割りきれないとまずいのでしょうか?RX66Tで54kHzでサンプリングするのでもとのクロックは160Mhzです。3.7037037037037036E-8はMatlabが勝手に設定した値です。なんでこの時間なのかよくわかりませんでした。周波数関係を洗いなおしてみます。
以上
Toshinobu Shintai
Toshinobu Shintai on 5 Mar 2020
今回のように割り切れない値の基本サンプル時間のときに、異なるサンプル時間を持つブロックを中に置くと、整数倍にならない場合エラーになります。なのでお勧めはしません。
Shoumeiさんがおっしゃるように、Rate Transitionで [データ転送中の整合性を確保]のチェックを外し、それでブロックを挟めばできますね。これも十分な解決策だと思います。

Sign in to comment.


Shoumei
Shoumei on 5 Mar 2020
ソルバを固定ではなく、可変ステップにすればエラーが解消すると思います。可変ステップにすると何か問題あるでしょうか?
なお、Rate Transitionは [データ転送中の整合性を確保]のチェックを外せば、割り切れない割合でのサンプルレート変換することができます。
解決しない場合は、参照モデルの親子構成とステップサイズがわかるように、モデルか画面キャプチャ貼ってもらえると助かります。

Inoue Kaoru
Inoue Kaoru on 5 Mar 2020
ご回答ありがとうございます。RateTransitionを参照モジュールの外に出したら解決しました。離散を参照モジュールに全部入れ、参照モジュール内で固定ステップソルバーを用いて参照の外は連続でやはり固定ステップですが、細かくしています。
可変にすると全部が可変になって、マイコンで実装する制御ループをシュミレートできなくなり、都合がわるかったのです。
以上
  1 Comment
Shoumei
Shoumei on 5 Mar 2020
ソルバ設定を可変ステップにしても、離散で動作しているブロックは離散の固定ステップで動作するので、全部が可変になるというのはまた別の問題だと思いますよ。
マイコンで実装する制御ループは離散で動作しているのだと思いますが、それが可変ステップで動作してしまうのは、Zero Order HoldまたはRate Transitionブロックで信号が正しく離散化されていないのではと推測します。
とりあえずエラーが無くなったからOKというようにはせず、どういうシミュレーションをするときはどういう設定をすべきか正しく理解し、その設定を自分でできるようになっておいたほうが良いと思いますよ。

Sign in to comment.

Products

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!