この記事は、「マイクロマウス Advent Calendar 2022」の13日目です。
12日目では、tanutanu pさんの移動ロボットにおけるブラシ付きDCモータのPID制御の話が出てきました。データ解析をするためにはデータを見やすくしたくなります。デバイスドライバの作成時には、センサ情報等をUART経由でパソコンに出力していたりしましたが、制御関連になってくると描画して解析が必要です。
最初の頃によくやるのが、シリアルでTeraTerm等ターミナルソフトに表示した数値データをコピーして、Excel等表計算ソフトに貼り付けて、グラフ化する方法です。
ただしこの方法は、欲しい数値データを変える場合にソースコードをいじってコンパイルし直したり、上記の作業を毎回するので面倒です。
鉄鼠で使っているマイコンSTM32F446のメーカであるSTMicroelectronics社が、便利なモニターソフトSTM32CubeMonitorを出してくれています。しかもマルチプラットフォーム対応です。
接続条件
ST-LINKのSWOが接続されている必要があり、NucleoはST-LINKが搭載されておりSWOも接続されているので使えるようになっています。試していませんが、メーカー純正品でない格安ST-LINKは使えない可能性があります。SWOピンが出てないのもあると思いますが(改造すればだせる)、ST-LINK内のSTM32マイコンに純正のファームウェアが書き込まれている必要があると思われます。
ダウンロード&インストール
STMicroelectronics社のダウンロードサイトの下にプラットフォームごとに用意されているので、自分の環境あったもの選んでクリックします。ここではWinを選択しています。
展開すると以下のファイルが出てきます。
exeを実行してインストールしていきます。
インストール完了して、起動するとこのような画面が出てきます。
設定
やり方は動画があるので、そちらを見てもらったほうがわかりやすいです。英語ですが、Youtubeだと文字起こし機能&翻訳機能で大体わかります。
設定するポイントとしては3つ。
- コンパイルしたELFファイルを指定
- 出力したいグローバル変数を指定
- プローブ(接続しているST-LINK)を指定
あとはDEPLOYボタン→DASHBOARDボタンでモニターが起動します。
マイコンを起動して、モニターのSTART ACQUISITIONボタンを押すと、リアルタイムでグラフ描画されます。例えば、鉄鼠だと、車体角速度指令値ωと左右のエンコーダから推定した車体角速度ω_encをグラフで表示したらこんな感じになりました。縦軸の単位はradian/secです。
ただし有線であるため、ある程度の簡易的な調整としては便利に使えますが、走り回るマイクロマウスのような移動型ロボットだと、最終的には不揮発性メモリに走行時のログを保存しておき、のちほどデータを吸い出して解析することになります。
CubeMontiorは導入の手間もそれほどないですし、最初の頃のソフトウェア開発&パラメータ調整が便利になので、ST-LINKで接続できるようにしている方は試してみてください。
補足
STM32CubeIDEでもグラフ描画することができそうなので、そちらを使ってみる方が画面切り替えしなくていいかもしれません(まだ使ったこと無い)。
参考資料
アニキの極秘開発記 STM32CubeMonitor を使う