DCモータのコントローラを作成する

同定したDCモータの伝達関数を利用してコントローラを作成してみる
①おもむろにsimulinkでブロック図を作る

ステップ入力、Sum、PIDコントローラとTransfer Fcnブロックを配置してFB系を作る。Transfer Fcnには前回導出した伝達関数を入力する。
PIDコントローラは離散系にして、サンプリング時間は実機に合わせて0.005sに、実機に合わせて出力の上下限とアンチワインドアップも設定しておく。
②モデル設定のソルバーを固定ステップにして、時間を0.005sに設定する

③PIDコントローラーのゲインを調整する

シミュレーションの結果を見ながら調整を行う。
本当は自動調整を利用したかったが、離散系を選択するとゲインの自動調整ではゲインが強すぎて発振したため断念。

合わせこんだ結果の波形
④実機制御のslimulinkを立ち上げで、調整したPIDコントローラーをコピー貼り付けする

⑤監視と調整を行い実機の波形を取得する

緑がシミュレーション結果で、赤が実機の応答結果。かなり一致しているようだ

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

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人体制で説明をすると楽に運営できたので、次はマイクロマウス関西支部で申し込もう

Training TracerのHardware Blockset


Training Tracer Ver.2の機体の仕様を知らずにHardware Blocksetを使って躓いたところ

  • Swithブロックの出力は初期値が1で押下時に0になる
  • Motorsブロックの入力は右モータはdirection=0で前転で、左モータはdirection=0で後転になっている。転方向を左右で揃えるために一方の入力を反転したいがエンコーダは初期の回転で正回転(前転)と判定しているため、モータの回転向きを修正するとこちらも修正が必要になる
  • バッテリ電圧は回路図を参照すると上段20kΩと下段10kΩで分圧している。ADCのリファレンス電圧が3.3Vで分解能が12bitだとするとバッテリ電圧5V時にSOCの信号は2068程度になりそうだが、結構誤差が大きいようだ。マイコンのADCポートの入り口にコンデンサが無いのも気になる
  • TrainingTracer_V3では0.1uFが追加されている

    Embedded Coder Support Package for STM32の必須ファイル

    Training Tracer Ver.2のソフトをsimulinkで書く場合、Embedded Coder Support Package for STM32が必須になる。
    Embedded Coder Support Package for STM32のセットアップ時には、さらに別のソフトのインストールを求められて戸惑った。
    ①ARM Compiler
    コンパイラーを別途ダウンロードする必要があり、アカウントの作成も必要になった
    ②STM32CubeMX
    STM32マイコンのプリフェラル設定そのコードを出力するソフト、ダウンロードにはSTMのアカウント登録が必要で、MATLAB上からそのソフトを動かすにはソフト上でのログインが必要

    小容量リポ充電器


    前回の予想をもとにAmazonで販売されているTP4056搭載の充電モジュールを購入してみる。
    ラッキーなことにモジュールがVカットで割板されていなくて機構は3つ繋げた状態で使用することができた。ちなみに電源は基板の裏面でUSBからの給電をジャンパして3つのモジュールに振り分けている。
    モジュールに搭載されているICはTP4056Xではないようで充電電流はデータシートの値の抵抗にしてもずれていた。といっても電流を実測しながら抵抗値を調整するとターゲットの電流に設定できた。
    100mA未満のセル毎に充電するにはこれで十分なように思う。

    大会に出せなかった機体


    2025年大会用に開発してたけど運動性のが悪くお蔵入りした機体。
    マイコンをRX631からRX671に変更してスマートコンフィギュレーターのコードを利用するソフト開発に移行したのと、バッテリを3セル構成にして高速域での加速性能向上、機体ヨー慣性を減らしてターン速度を上げようと試みた。しかし、左右のターン特性が大きく異なるのと、ターンの再現性が低く大会には持ち込めなかった
    吸引力不足もMK07-3.3を10V駆動で使っても、同じファンをCL-0614-10250-7の6.5V駆動に比べて吸引力が劣っていた。


    また、ジャイロを別基板にして振動を逃がす構成にチャレンジするも、ジャイロ子基板を固定する両面テープの面積を小さくしすぎて、基板間のワイヤーの張力にスポンジが負けて水平に設置できなかった

    マイクロマウス2025


    大会を運営してくださった皆様ありがとうございました
    運よく5回完走でき3位入賞と、マイクロマウスタックチャンでも特別賞を頂きました

    試走日の土曜日は試走時間のロスタイムに駆け込み何度か探索走行を確認。探索していると変なところでターンして壁にぶつかる。撤収前に一度だけ発生時の様子を録画することができたのでマウスパーティに向かう。
    その夜に録画とプログラムを見返していると、右ターン中に左壁の壁切れの検出を無効にしそびれていて、その影響で直線に入った直後に壁切れが起きたとして距離補正が誤動作していた。ただし、このバグは2023年から入っていたようなので、今までは運よくターン中の壁の反射が低くて壁切れ条件を満たしておらず、処理が漏れていても問題なかったのが、今回の大会環境では壁の反射量が大きかった為に壁切れ判定が動作して露呈したようだ

    大会本番、出走順が真ん中くらいだと全面探索した人が少なくて誰も走っていない箇所を走るとタイヤへの埃の付着が多い。ちょっとオートスタートは厳しいかなと思っていた矢先にリタイヤ。それでもほぼ全面探索ができており、最短経路ではないけれどそこそこいい経路までは取得できていた。

    黄色が最短経路候補の未探索区間。

    2~4走目は直線速度、加速度、ターン速度の様子を見ながら走行して5走目は最大パラメータで完走できた。
    直線速度6.5m/s,直線加速度40m/ss~20m/ss,斜め速度5m/s,斜め加速度30m/ss~20m/ss,90°ターン2m/s,180°ターン1.8m/s,その他が1.7m/s。ターンの最低速度は去年よりも0.1m/s速いが、数字上同じの加速度は去年よりもリミットを早めにかけているので遅いし、電圧不足で最大速度まで到達していたかも不明。

    素晴らしい大会を運営してくださった皆様、ありがとうございました。

    Training Tracer Ver.2のハードウェアで躓くところ


    ①ファームウェアの書き込み中に左モータが回転する。
    書き込み中にプルアップされるポートがモータ制御用に割り当てられているため。上の写真のようにプルダウン抵抗をつけると良い
    TrainingTracer_V3では10kΩのプルダウン抵抗が追加されている

    ②パワースイッチをONにしないと書き込みができない
    マイコンボードにUSBを繋ぐとマイコンボード上のLEDが点灯するため、一見書き込みができそうに思えるが。この状態ではSTMマイコンに通電しておらず書き込みできない