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

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

Accepted Answer

Atsushi Ueno
Atsushi Ueno on 26 Feb 2022
>この出力を、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 Comments
Atsushi Ueno
Atsushi Ueno on 26 Feb 2022
基本ブロックで説明すると:
左側は入力パルスの立上りエッジを360回数えるカウンタ、右側は0.01秒カウントするカウンタです。左側の結果でS-Rフリップフロップをセット、右側の結果でリセットすれば、目的の事が出来ます。
Koki Hibino
Koki Hibino on 27 Feb 2022
ご回答ありがとうございます。 flip flop回路を使用する発想は無かったので、大変勉強になりました。 無事、目的の動作をさせることができました。 この度はありがとうございました。

Sign in to comment.

More Answers (1)

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

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!