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

조회 수: 60 (최근 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 CenterFile Exchange에서 信号の生成에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!