ヒステリシスをもつスイッチ
Simscape™ Foundation ライブラリの Switch ブロックは、外部物理量信号によって制御されるスイッチを実装します。このブロックでは if-else ステートメントを使用しています。制御端子の外部物理量信号がしきい値を超えるとスイッチが閉じ、それ以外はスイッチが開いた状態になります。
この例では、スイッチングしきい値レベルにヒステリシスが適用されたスイッチを実装します。ヒステリシスは、制御信号にノイズが含まれる場合の高速なスプリアス スイッチングを防ぐ役割を果たします。
次の図に示すように、スイッチには 2 種類の動作モードがあります。制御端子の外部物理量信号が上限しきい値を上回るとスイッチが閉じます。信号が下限しきい値を下回るとスイッチが開きます。

この図のロジックは、次のコンポーネントでモード チャートを使用して実装されます。
component delayed_switch
% Switch with Hysteresis
inputs
u = { 0.0, '1' };
end
nodes
p = foundation.electrical.electrical; % +
n = foundation.electrical.electrical; % -:right
end
parameters
R_closed = { 0.01, 'Ohm' }; % Closed resistance R_closed
G_open = { 1e-8, '1/Ohm' }; % Open conductance G_open
T_closed = { 0.5, '1' }; % Upper threshold
T_open = { 0, '1' }; % Lower threshold
InitMode = switching.open; % Initial Mode
end
variables
i = { 0, 'A' }; % Current
v = { 0, 'V' }; % Voltage
end
branches
i : p.i -> n.i;
end
% Validate parameter values
equations
assert( T_closed >= T_open, 'Upper threshold must be higher than Lower threshold' );
end
modecharts(ExternalAccess = observe)
m1 = modechart
modes
mode CLOSED
equations
v == p.v - n.v;
v == i*R_closed;
end
end
mode OPEN
equations
v == p.v - n.v;
v*G_open == i;
end
end
end
transitions
CLOSED -> OPEN : u < T_open;
OPEN -> CLOSED : u > T_closed;
end
initial
OPEN : InitMode <= 0;
end
end
end
endモード チャート m1 で 2 つのモード CLOSED と OPEN が定義されています。それぞれのモードに、適用可能なすべての方程式をリストした equations セクションがあります。transitions セクションでは、述語条件に基づいて動作モード間の遷移を定義しています。
制御信号が下限しきい値
T_openを下回ると、スイッチがCLOSEDからOPENに遷移します。制御信号が上限しきい値
T_closedを上回ると、スイッチがOPENからCLOSEDに遷移します。
initial セクションでは、述語条件に基づいて初期動作モードを指定しています。
述語が true (つまり、[Initial Mode] パラメーターの値が 0 以下) の場合、シミュレーションの開始時に
OPENモードがアクティブになります。述語が true でない場合、シミュレーションの開始時に
CLOSEDモード (modesセクションにリストされた最初のモード) がアクティブになります。
メモ
[Initial Mode] パラメーターで使用している列挙は次のとおりです。
classdef switching < int32 enumeration open (0) closed (1) end methods(Static) function map = displayText() map = containers.Map; map('open') = 'Switch is open'; map('closed') = 'Switch is closed'; end end end
コンポーネントが説明されているとおりに機能するには、この列挙を switching.m ファイルとして別途用意しておく必要があります。このファイルは、MATLAB® パスに配置するか、コンポーネントにインポートされる名前空間に含めることができます。一般に、モード チャートでは、許容されるパラメーター値の離散集合を指定できるため、列挙を使用すると非常に便利です。詳細については、Enumerationsを参照してください。
コンポーネントの動作が正しいことを検証するには、Simscape Component ブロックに展開します。次に示すように、すべてのブロックで既定のパラメーター値を使用して簡単なテスト モデルを作成します。


既定値でモデルのシミュレーションを実行します。

[Initial Mode] パラメーターの値は [Switch is open] です。この列挙値は 0 として評価されるため、initial セクションの述語が true になります。したがって、シミュレーションの開始時にスイッチが開いた状態になり、抵抗 R1 に電流は流れません。制御信号の値が 0.5 ([Upper threshold] パラメーターの値) に達するとスイッチが閉じ、分岐に流れる電流は他のパラメーター値に基づいて 1A になります。制御信号が 0 ([Lower threshold] パラメーターの値) を下回るとスイッチが開きます。
次に、[Initial Mode] パラメーターの値を [Switch is closed] に変更してモデルをシミュレートします。列挙値が 1 として評価されるため、initial セクションの述語条件が true でなくなり、したがって modes セクションにリストされた最初のモードがアクティブになります。シミュレーションの開始時にスイッチが閉じた状態になり、制御信号が 0 を下回るまで閉じたままになります。

参考
modecharts | modes | transitions | initial