ヒステリシスをもつスイッチ
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 == i/G_open; 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