最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

デバウンス ロジックを使用した過渡信号の削減

信号のデバウンスを行う理由

スイッチが開閉すると、完全にオンまたはオフのステートに遷移する前に、そのスイッチの接点では相互にバウンス オフが発生する可能性があります。バウンス アクションにより、ステートの実際の変化を表さない過渡信号が生成される可能性があります。このため、スイッチ ロジックをモデル化する場合は、"デバウンス" アルゴリズムを使用して過渡信号を除外することが重要になります。

Stateflow® チャートのコントローラーをモデル化する場合は、コントローラーが過渡信号を受信するたびに、スイッチ ロジックによってコントローラーのオン/オフが切り替えられ、コントローラーの過負荷が発生するというような状況は回避する必要があります。これを回避するには、時相論理を使用する Stateflow コントローラーを設計し、入力信号をデバウンスして、スイッチが実際にオンかオフかを判定します。

信号のデバウンス方法

Stateflow を使用して信号をデバウンスする方法には、次の 2 通りがあります。

  1. duration 時相演算子を使用した、過渡信号の除外。

  2. 中間のグラフィカル ステートを使用した、過渡信号の除外。故障検出などの高度なフィルター処理手法には中間のグラフィカル ステートを使用します。

duration 演算子は、Simulink® モデルの Stateflow チャートでのみサポートされます。

duration 演算子による信号のデバウンス

モデル sf_debouncer_using_duration は、duration 演算子を使用して過渡信号を除外する設計パターンを示しています。

Debouncer チャートには次のロジックが含まれます。

デバウンサーの設計では、duration(n) ステートメントを使用して、絶対時間の時相論理を実装します。

このモデルの初期状態は Off です。duration 演算子を使用し、スイッチ信号 sw がゼロより大きいまたは小さい状態であった時間に基づいて、モデルがどのステートにあるかを制御できます。sw が 0.1 秒より長い間ゼロ以上になると、スイッチはステート Off からステート On に移行します。その後、sw が 0.01 秒より長い間ゼロ未満になると、スイッチはステート On からステート Off に移行します。

ステート ロジック

デバウンサーには、OnOff の 2 つのステートがあります。duration 演算子は、どちらのステートがアクティブかを制御します。このロジックは、次の表で示すように機能します。

入力信号ステート結果

0.1 秒間、正の値を保持

On

スイッチがオンになる

0.01 秒間、負の値を保持

Off

スイッチがオフになる

デバウンサーの実行

  1. sf_debouncer_using_duration モデルを開きます。

  2. Stateflow チャートの Debouncer と Scope ブロックを開きます。

  3. チャートのシミュレーションを実行します。

    ノイズを含む入力信号から過渡信号を分離するデバウンサーの処理がスコープに表示されます。

故障検出による信号のデバウンス

モデル sf_debouncer は、時相論理と中間ステートを使用して過渡信号を分離する設計パターンを示しています。この設計パターンを使用すると、故障を検出し、システムが回復するまで時間を与えるロジックを含めることもできます。

Debouncer チャートには次のロジックが含まれます。

デバウンサーの設計では、after(n, sec) ステートメントを使用して、絶対時間の時相論理を実装します。キーワード sec は、ステートがアクティブになってから経過したシミュレーション時間を定義します。

ステート ロジック

デバウンサーのチャートには、Debounce という名前の中間ステートが含まれています。Debounce ステートは、信号の保持している値が正か負か (一定期間で、ゼロクロッシングの変動を示しているか) をチェックすることで、過渡入力を分離します。このロジックは、次の表で示すように機能します。

入力信号ステート遷移結果

0.1 秒間、正の値を保持

Debounce.On

On

スイッチがオンになる

0.1 秒間、負の値を保持

Debounce.Off

Off

スイッチがオフになる

0.3 秒間、ゼロクロッシングで変動する

Debounce

Off.Fault

メモ

Off.Fault 遷移へのデバウンスはチャート階層の上位レベルから派生し、Debounce.Off および Debounce.On サブステートからの遷移よりも優先されます。

チャートが入力を過渡信号として分離し、回復用の時間を割り当てる

デバウンサーの実行

  1. sf_debouncer を開きます。

  2. Stateflow チャートの Debouncer と Scope ブロックを開きます。

  3. チャートのシミュレーションを実行します。

    ノイズを含む入力信号から過渡信号を分離するデバウンサーの処理がスコープに表示されます。

イベントベースの時相論理の使用

絶対時間の時相論理の代わりに、イベントベースの時相論理を適用し、after(n, tick) ステートメントを使用することで、Debouncer チャートの実際のステートを判別できます。キーワード tick はローカル イベントを規定し、チャートが起動したときにそのローカル イベントを暗黙的に生成します。

sf_debouncer モデルの Error Generator ブロックは、0.001 秒間隔でパルス信号を生成します。このため、Debouncer チャートで指定された絶対時間の時相論理をイベントベースの論理に変換するには、以下に示すように n 引数を 1000 で乗算します。

絶対時間ベースのロジックイベントベースのロジック
after ( 0.1, sec )after ( 100, tick )
after ( 0.3, sec )after ( 300, tick )
after ( 1, sec )after ( 1000, tick )

参考

関連するトピック