Main Content

ヒステリシスをもつスイッチ

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 つのモード CLOSEDOPEN が定義されています。それぞれのモードに、適用可能なすべての方程式をリストした 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 を下回るまで閉じたままになります。

参考

| | |

関連するトピック