Simscapeで非​線形バネのシミュレー​ションをするにはどう​すればよいですか?

22 views (last 30 days)
MathWorks Support Team
MathWorks Support Team on 25 Jun 2018
現在、非線形バネのシミュレーションを検討しています。ライブラリブラウザーでSimscapeのブロック群を見たところ、線形バネは見つかりましたが非線形バネは見つかりませんでした。
より現実的な条件でシミュレーションするために、非線形バネをSimscapeモデルで表現する方法はありますか?

Accepted Answer

MathWorks Support Team
MathWorks Support Team on 26 Dec 2022
Edited: MathWorks Support Team on 23 Nov 2022
Simscapeの機械ドメインで非線形バネを表現するには、Simscape Drivelineのライセンスに含まれているNonlinear Translational Springブロック(並進運動)およびNonlinear Rotational Springブロック(回転運動)を使用できます。
これらのブロックでは、多項式記述あるいは内蔵ルックアップテーブルにより、変位に応じた非線形性を表現可能です。
ただし、これらのブロックは変位に応じた非線形性にのみ対応しており、例えば雰囲気温度によりバネ定数が変化するような非線形性の表現には、別の方法が必要となります。そのような様々な要因による非線形性を表現するには、係数を外部入力することで非線形性を実現するVariable Translational Springブロック(並進運動)、Variable Rotational Spring(回転運動)が使用可能です。同様の方法で非線形ダンパーを表現するVariable Translational Damper,Vaiable Translational Damplerブロックも用意されています。
これらのブロックは、Simscape Drivelineのライセンスを取得後、ライブラリブラウザーのSimscape>Driveline>Coupling & Drives>Springs &Damplers の中から選択可能です。
以下に示すサンプルモデルでは、ドキュメンテーションに示されている
を元にして、非線形ばねをSimscapeの機械ドメインで実装しています。
ばねの変位が一定以上大きくなり線形領域から外れるとばね定数が大きくなる現象を考えます。上で述べたように、バネ定数の非線形性が変位にのみ依存するときはNonlinear Translational Springブロックを使用できますが、ここから拡張して他の要因による非線形性が表現できるよう、Variable Translational Springブロックを使用してモデルを実現します。
1.非線形バネ定数の定義
ルックアップテーブルの仕組みを使用して、非線形バネ定数を定義します。Simscapeでルックアップテーブルを使用するには、SimulinkのLookup TableブロックあるいはPS Lookup Tableブロックを使用可能です。変位 -0.001 - 0.001の範囲で、線形領域ではばね定数kは1000、振幅の絶対値が0.0006を超えると上昇するような非線形バネの特性を想定し、MATLABコマンドウインドウで以下のように入力します。
x = [-1:0.2:1]*1e-3;
k = [1.2 1.1 ones(1,7) 1.1 1.2]*1e3;
定義した変位xとばね定数kを、それぞれ1-D lookup tableのブレークポイントとテーブルデータに入力します。
以上の操作により、Simulink信号あるいはPS信号としてバネ定数kが定義できるようになりました。バネ定数をfigureにプロットすると、以下の図のようになります。
2.Simscapeブロックとの接続
SimulinkのLookup Tableブロックで定義したバネ定数をSimscapeブロックに接続するには、Simulink-PS converterブロックを使用します。また、Motion Sensorブロックを使用してSimscapeの物理的位置信号を取得し、PS-Simulink converterブロックでSimulink信号に変換することで、位置信号をlookup tableブロックに入力できるようになります。位置信号からのフィードバックをVariable Translational Springのが信号入力ポートに接続することで、位置に応じてバネ定数が変化するモデルが形成できます。
PS LUTを使用する場合は以下のような構成になります。
Simulink LUTを使用する場合は以下のような構成になります。
Simulink信号を使用するときには、フィードバック経路にmemoryブロックを挟みます(離散サンプル時間の経路の場合は、unit delayブロックを使用します)。これらの遅延ブロックを挟むことで代数ループエラーを防ぎ、矛盾のないモデルを構築できます。
以上の手順により作成したモデルを実行し、位置信号をscopeで観察すると、非線形バネの効果が示されます。
Nonlinear Translational SpringブロックとVariable Translational Springブロックによるモデル動作の違い
どちらのブロックでも非線形性を表現できることを説明しましたが、厳密には両者の動作には違いが存在します。
Nonlinear Translational Springブロックは、ブロックに非線形係数を計算する仕組みが内蔵されているので係数を同ステップ内で逐次計算しますが、Variable Translational Springブロックでは信号のフィードバックを利用することから、1ステップ前の状態を使用して係数を計算することになり、シミュレーションの時間刻み精度によっては意図しない結果を生む可能性がありますので、フィードバックを使用する際は十分な精度が得られる程度に細かい時間刻みを指定する必要があります。
また、SSCファイルを編集して外部入力ポートを設置した独自のバネブロックを作る方法、さらにSSCファイルの中にルックアップテーブル等を記述して非線形係数を計算することもできます。この場合は同ステップで係数を計算できるのでフィードバック精度の問題はありませんが、そのようなブロックを自作する必要があります。
SSCファイルの中でルックアップ手=ブルを使用する方法は、以下に紹介されています。
https://jp.mathworks.com/help/physmod/simscape/lang/using-lookup-tables-in-equations.html
https://jp.mathworks.com/help/physmod/simscape/lang/tablelookup.html
tablelookup関数を使用することで、SSCファイルの中で4-Dまでの次元のルックアップテーブルを定義できます。
今回のサンプルモデルは、回答欄上部からダウンロードできます。バネ定数のパラメータはモデルコールバックのpostloadfcnに記載されていますので、モデルを開いてそのままシミュレーションが可能です。
サンプルモデルはR2018bのバージョンで作成されています。
参考サイト:Nonlinear Translational Springブロック Variable Translational Springブロック

More Answers (0)

Categories

Find more on Couplings and Drives in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!