🎠

Simulink+Arduino連携 Connected I/Oモードの検証

2023/02/19に公開

1.はじめに

Simulink+Arduino連携のConnected I/Oモードは、コーディングなしでちょっとした実験ができてとても便利です。これを活用してBLDCモータの制御ができないか、という思いがあったのですが、私のつぶやきに対してSimulinkの中の人から以下のようなご指摘がありました。

「1ms以下のリアルタイム制御は実質不可能」ということで、諦めろという話になったわけですが、どのぐらい遅延が生じるのかせっかくなので一度検証してみることにしました。

Connected I/O(入力/出力モード)については以下の記事に詳しくまとめられています。
https://qiita.com/motorcontrolman/items/19cd1f935b2addd79a43

2.検証環境

PC:Windows10, Core i5-10210U 4コア 1.6GHz, メモリ8GB
I/O:Arduino MKR WiFi 1010
MATLAB:R2022a

3.検証回路図、Simulinkモデル

External Interruptというブロックを初めて使ったんですが、使い方これであっているか自信なしです。

4.環境写真

5.検証方法

① SimulinkのGUI操作によりPin2をLo→Hiに変化させる
② Pin0で立ち上がりエッジを検出し、それをトリガにしてPin8をLo→Hiに変化させる
③ Pin2のLo→HiからPin8のLo→Hiまでの遅延時間をオシロで計測する

6.検証の様子

7.検証結果


事前情報で「1ms以下は厳しい」とあったので、5msぐらいはまあ妥当な気もします。
一方で50msぐらいかかってるパターンは何なんでしょうね…

8.結論

予想通り、Connected I/OモードでBLDCモータを制御するのは厳しそう、という結論です。
もう一つのExternalモードだと、ターゲットのマイコン側でコードを実行するのでもうちょい速くなると思うのですが、手持ちのArduinoMKRだとなぜかExternalモードがうまく動きません。比較ができたらいいですけどね。

以上。全体を通して誤りなどあればご指摘頂けるとありがたいです。

Discussion