simulinkにて​、Counterブロ​ックからの出力信号を​一定時間保持する方法​はありますか?

69 ビュー (過去 30 日間)
Koki Hibino
Koki Hibino 2022 年 2 月 25 日
コメント済み: Koki Hibino 2022 年 2 月 27 日
Matlab R2017aを使用し、simulinkにて
①PWM Generatorでデューティ比0.5、周波数500Hz(周期0.002s)のパルス波をを生成
②生成したパルス波をCounterに入力し、立ち上がりエッジが360回入力されたらHit、Counterから1を出力
というプログラムを作成しました。
実行結果として、パルス波の立ち上がりエッジが360回入力された時点でCounterからの出力は1になりましたが、この出力は0.002s経過後に再び0に戻ってしまいます。
この出力を、0.01sの間1のまま保持したいのですが、そのような動作が可能なブロックもしくは回路はありますか?
ご存じの方、ご教示いただけますと幸いです。

採用された回答

Atsushi Ueno
Atsushi Ueno 2022 年 2 月 26 日
>この出力を、0.01sの間1のまま保持したいのですが、そのような動作が可能なブロックもしくは回路はありますか?
 リンク先にライブラリの投稿があります。R2017aでも動作確認しました。
「ある制約」を満たす場合は序盤の回答が直感的で分かりやすいです。言葉で書くと「入力信号とその遅延信号の差分を出力とする」です。制約とは「入力信号の周期/2[s] ≧ 遅延時間[s]」です。今の要件は0.002[s]*360=0.72[s] ≧ 0.01[s]なので問題ありません。
2番目のロジックを「Counterからの出力1を0.01sの間保持したい」要件を満たすためには下記の様にすれば良いと思います。2通り作りましたが、Transport Daleyブロックは「何秒遅延するか」を設定でき、Delayブロックは「何周期遅延するか」を設定できます。シミュレーションの連続/離散・ステップ時間の扱いにより選択できます。
  2 件のコメント
Atsushi Ueno
Atsushi Ueno 2022 年 2 月 26 日
基本ブロックで説明すると:
左側は入力パルスの立上りエッジを360回数えるカウンタ、右側は0.01秒カウントするカウンタです。左側の結果でS-Rフリップフロップをセット、右側の結果でリセットすれば、目的の事が出来ます。
Koki Hibino
Koki Hibino 2022 年 2 月 27 日
ご回答ありがとうございます。 flip flop回路を使用する発想は無かったので、大変勉強になりました。 無事、目的の動作をさせることができました。 この度はありがとうございました。

サインインしてコメントする。

その他の回答 (1 件)

Toshinobu Shintai
Toshinobu Shintai 2022 年 2 月 26 日
Stateflowを使うと簡単に実現できます。添付のモデルをご確認ください。R2017aで作成しています。
以下のような状態遷移を構築しています。ちょっと雑な作りになってしまっている点はご容赦ください。
結果は以下のようになります。
  1 件のコメント
Koki Hibino
Koki Hibino 2022 年 2 月 27 日
ご回答ありがとうございます。 フローチャートのように記載できるブロックが存在するのですね。勉強になります。 無事、動作させることができました。 この度はありがとうございました。

サインインしてコメントする。

カテゴリ

Help Center および File Exchange信号の生成 についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!