モータの伝達関数を推定する

Training Tracerに付属しているエンコーダ付きDCモータの伝達関数(時定数)を推定してみる
①おもむろにsimulinkのブロック図を描く
DCモータへのステップ入力(0s-0.5sはPWM duty20%、0.5s-1.0sはPWM duty90%)と、制御周期(ステップ時間5ms)毎のエンコーダの速度を取得するブロックを作る。
そして二つの信号を後ほどシステム同定アプリで使いたいのでto Workspaceブロックに繋ぐ。信号の保存形式は2次元配列に設定する。システム同定アプリへの入力にdouble型が求められるので型の変換ブロックも追加する。
②simulinkの監視と調整で実機を動かす。実機が動いた後にこのような波形が取れる

③MATLABに戻るとworkspaceに、to Workspaceブロックで取得した配列が保存されている
④MATLABのアプリからシステム同定アプリを起動する

⑤システム同定アプリの右上側のimport dataからtimedomain dataを選択して
⑥出てきたimport dataの画面のinputとoutputにworkspaceの配列を入力、start timeは0に、Sample timeはsimulinkのステップ時間の0.005sを入力して、画面下のimportを押す
⑦画面中央のEstimateからtransfer Function modelを選択して
⑧Estimate transfer Function画面の極(pole)を1に零点(zero)を0に選択してEstimateを押す
⑨同定が完了する。この画面は閉じる
⑩システム同定アプリに戻るとft1の名前で結果が保存されているのでクリック。開いた画面で伝達関数を確認できる(時定数で37ms程度になる)

制御周期は間に合っているか?

Embedded Coderの出力するコードの制御周期が本当にソルバーの固定ステップの指定時間周期で動いているのか疑問だったが、無理な値では正しく動かないらしい。そして、制御周期が間に合っているかの判断は、監視と調整の設定時間と実時間があっているかで判断できる。
ソルバーの時間を過度に短く設定すると監視と調整の終了時間を過ぎても終わらなくなり、例えば10秒設定なのに20秒間続くようになる。

Training Tracerの制御周期のボトルネックはジャイロセンサとのI2C通信のようで、Hardware Blockset の初期値ではジャイロのセンサのほとんど全ての値を取得しているために制御周期は8ms程度が限度になった。そこから加速度や磁気のブロックをコメントアウトすると4ms周期で動くようになり、Z軸のジャイロのみに絞ると2ms周期で動いた

M5stack Japan Tour 2026 Spring Osaka


M5stack Japan Tour 2026 Spring Osakaに参加してマイクロマウスタックチャンを展示してきた。
関西地区大会のチラシと、ロボットの詳細資料へのリンクのチラシを追加したら説明や案内に便利だった
ブースは机半分だとちょっと狭くて、速いマウスを走らせるスペースを取れなかった
助っ人を頼み3人体制で説明をすると楽に運営できたので、次はマイクロマウス関西支部で申し込もう