Arduino Dueで連続的なパル​ス波を出力したいため​stateflow作​成したが正しく出力さ​れない

5 views (last 30 days)
mochi
mochi on 6 May 2022
Edited: Toshinobu Shintai on 7 May 2022
stateflowで1-10kHz程度のパルス波を出力したいと考えています.
そのため下記のチャートを作成しました.
チャートのプロパティから更新方法を不連続にし,入力(num_of_pulse)も不連続の場合,サンプル時間を細かくすれば正しく出力します.
しかし連続の入力の場合正しく出力できません.
結果は下図の青線になります.
ここで質問です.
・更新方法を不連続にしサンプル時間を極小にするとシミュレーション時間が非常に長くなるがArduinoに書き込んだ場合は正しく俊敏に動作してくれるのでしょうか?
・更新方法を連続にした場合,どのようにすれば正しいシミュレーション結果を得られるのでしょうか?

Accepted Answer

Toshinobu Shintai
Toshinobu Shintai on 7 May 2022
Edited: Toshinobu Shintai on 7 May 2022
連続時間の場合は、タイムステップを可能な限り長く取り、計算時間を効率化することをしますので、今回のような結果になるかと思います。
一般的な話になりますが、Arduinoなどのマイコンに機能を実装する際には、離散的なタイムステップで計算できるモデルを作らなければなりません。「サンプル時間を細かくすれば正しく出力します」という動作は、正しい振る舞いになります。
例えば10kHzのパルス波で、dutyの分解能を1%刻みで出力したいという場合は、
1 / 10000 / 100 = 1e-6 = 1[us]
のサンプリングタイムステップを設定しなければなりません。Arduino DueにSimulinkモデルを実装して実行する場合は、これほど小さいタイムステップでは実行はできないと思います。分かりませんが、おそらく50[us]辺りが限界かと予想しています。
細かいパルス波形を出したいのであれば、こちらで紹介されているPWMブロックを用いることをおすすめします。

More Answers (0)

Products


Release

R2019a

Community Treasure Hunt

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

Start Hunting!