simulinkにて、Counterブロックからの出力信号を一定時間保持する方法はありますか?
61 次查看(过去 30 天)
显示 更早的评论
Matlab R2017aを使用し、simulinkにて
①PWM Generatorでデューティ比0.5、周波数500Hz(周期0.002s)のパルス波をを生成
②生成したパルス波をCounterに入力し、立ち上がりエッジが360回入力されたらHit、Counterから1を出力
というプログラムを作成しました。
実行結果として、パルス波の立ち上がりエッジが360回入力された時点でCounterからの出力は1になりましたが、この出力は0.002s経過後に再び0に戻ってしまいます。
この出力を、0.01sの間1のまま保持したいのですが、そのような動作が可能なブロックもしくは回路はありますか?
ご存じの方、ご教示いただけますと幸いです。
0 个评论
采纳的回答
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
2022-2-26
基本ブロックで説明すると:
左側は入力パルスの立上りエッジを360回数えるカウンタ、右側は0.01秒カウントするカウンタです。左側の結果でS-Rフリップフロップをセット、右側の結果でリセットすれば、目的の事が出来ます。
更多回答(1 个)
Toshinobu Shintai
2022-2-26
Stateflowを使うと簡単に実現できます。添付のモデルをご確認ください。R2017aで作成しています。
以下のような状態遷移を構築しています。ちょっと雑な作りになってしまっている点はご容赦ください。
結果は以下のようになります。
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 信号の生成 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!