このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
デバウンス ロジックを使用した過渡信号の削減
スイッチが開閉すると、完全にオンまたはオフのステートに遷移する前に、そのスイッチの接点では相互にバウンス オフが発生する可能性があります。バウンス アクションにより、ステートの実際の変化を表さない過渡信号が生成される可能性があります。このため、スイッチ ロジックをモデル化する場合は、"デバウンス" アルゴリズムを使用して過渡信号を除外することが重要になります。
Stateflow® チャートのコントローラーをモデル化する場合は、コントローラーが過渡信号を受信するたびに、スイッチ ロジックによってコントローラーのオン/オフが切り替えられ、コントローラーの過負荷が発生するというような状況は回避する必要があります。これを回避するには、時相論理を使用する Stateflow コントローラーを設計し、入力信号をデバウンスして、スイッチが実際にオンかオフかを判定します。
信号のデバウンス方法
Stateflow を使用して信号をデバウンスする方法には、次の 2 通りがあります。
duration
時相演算子を使用した、過渡信号の除外。中間のグラフィカル ステートを使用した、過渡信号の除外。故障検出などの高度なフィルター処理手法には中間のグラフィカル ステートを使用します。
duration
演算子は、Simulink® モデルの Stateflow チャートでのみサポートされます。
duration
演算子による信号のデバウンス
この例は、duration
演算子を使用して過渡信号を除外する設計パターンを示しています。
Debouncer チャートには次のロジックが含まれます。
ステート ロジック
このモデルの初期状態は Off
です。duration
演算子を使用すると、スイッチ信号 sw
が負または非負であった時間の長さに基づいて、どのステートをアクティブにするかを制御できます。
sw
が 0.01 秒より長い間非負になると、スイッチはステートOff
からステートOn
に移行します。sw
が 0.01 秒より長い間負になると、スイッチはステートOn
からステートOff
に移行します。
デバウンサーの実行
モデルを開きます。
Scope ブロックを開きます。
Stateflow チャート Debouncer を開きます。
モデルのシミュレーションを実行します。ノイズを含む入力信号から過渡信号を分離するデバウンサーの処理がスコープに表示されます。
故障検出による信号のデバウンス
この例は、中間ステートを使用して過渡信号を分離する設計パターンを示しています。デバウンサーの設計では、after
演算子を使用して、絶対時間の時相論理を実装します。この設計パターンを使用すると、故障を検出し、システムが回復するまでの時間を与えることもできます。
Debouncer チャートには次のロジックが含まれます。
ステート ロジック
Debouncer チャートには、Debounce
という名前の中間ステートが含まれています。このステートは、信号 sw
が正と負のどちらになっているか、または一定期間でゼロクロッシングの変動を示しているかをチェックして、過渡入力を分離します。
sw
が 0.1 秒より長い時間正である場合、スイッチはステートOn
に移行します。sw
が 0.1 秒より長い時間負である場合、スイッチはステートOff
に移行します。sw
が 0.3 秒より長い時間ゼロクロッシングの変動を示した場合、スイッチはステートOff.Fault
に移行し、sw
を過渡信号として分離して回復のための時間を与えます。
デバウンサーの実行
モデルを開きます。
Scope ブロックを開きます。
Stateflow チャート Debouncer を開きます。
モデルのシミュレーションを実行します。ノイズを含む入力信号から過渡信号を分離するデバウンサーの処理がスコープに表示されます。
イベントベースの時相論理の使用
絶対時間の時相論理の代わりに、イベントベースの時相論理を適用し、after
演算子を使用することで、Debouncer チャートの実際のステートを判別できます。キーワード tick
はローカル イベントを規定し、チャートが起動したときにそのローカル イベントを暗黙的に生成します。
sf_debouncer
モデルの Error Generator ブロックは、0.001 秒間隔でパルス信号を生成します。このため、Debouncer チャートで指定された絶対時間の時相論理をイベントベースの論理に変換するには、以下の表に示すように after
演算子の引数を 1000 で乗算します。
絶対時間ベースのロジック | イベントベースのロジック |
---|---|
after(0.1,sec) | after(100,tick) |
after(0.3,sec) | after(300,tick) |
after(1,sec) | after(1000,tick) |