Simulinkでリアルタイムでモータを動作させたい(HiLS)
Show older comments
Simulink上でC++で書いたプログラムにMEX関数に変換して,モータをパルス列で動作させています.
一台のモータを動作させる場合は,ペーシングが正常ですが,2台のモータを同時に動作させようとすると,ペーシングが遅れます.制御周期は0.001秒です.(これ以上大きくしたくないです.)
メモリは4GBと少ないので,ここが原因かと思うのですが,他に見るべきところはありますか.
3 Comments
Toshinobu Shintai
on 17 Feb 2020
PC上で動作しているMATLAB/Simulinkでリアルタイム制御をしているということでしょうか。
それとも、Simulinkで作ったロジックをmexでコンパイルして他の環境で実行しているのでしょうか。
Shoumei
on 18 Feb 2020
Simulinkでリアルタイム処理させようなんて、そんな無謀な!Simulinkはリアルタイム実行には向いていません。
Arduinoなど組み込み機器に実装したほうが良いと思います。
KAZUKI KISHIWADA
on 18 Feb 2020
Answers (1)
Toshinobu Shintai
on 18 Feb 2020
0 votes
すでにShoumeiさんがおっしゃっていますが、PC上で動作しているMATLAB/Simulinkでリアルタイム制御をするというのは無謀ですね。Windows/Mac/Linuxどれであっても、Simulink標準の「シミュレーションペーシング」機能では、リアルタイム性は全く確保されません。
参考までに、Simulink Desktop Real-Timeというツールボックスを用いると、かなり改善されます。
Simulink Desktop Real-Timeにはノーマルモードとエクスターナルモードがありますが、Simulinkの全機能が使えるのはノーマルモードです。エクスターナルモードでは専用のI/Oインターフェースが必要で、少し制約もあります。
ノーマルモードを使う場合、Windowsではサンプリング周期20msまでなら、厳密なリアルタイムではありませんが使えます。それより小さいステップは厳しいと思ってください。
エクスターナルモードを使う場合、100μsでも動作します。こちらは厳密に近いと言えます。
根本的な話ですが、一般的にPCがリアルタイム制御に向いていないのは、
- CPUのリソースを有効に使うために、PC向けのOSはリアルタイム性よりもリソース効率を重視して作られている
- リアルタイム制御を必要とする機器はエラー1個が人命に繋がる可能性があるため、ハード的にもソフト的にも頻繁に故障するPCは危なくて使えない
が理由です。
リアルタイム制御には専用の組み込み機器を用いることを推奨します。
Categories
Find more on Texas Instruments C2000 Processors in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!