ししかわです。
社員研修の一環で、マイクロマウスを自作して大会に出場します。
M5Mouseの回路の中身について説明しています。 今回はマウスの回転や加速を検知するIMU回路の説明です。
概要
IMU回路の回路ブロック図を示します。

IMU回路の回路ブロック図
IMUとは
慣性計測装置(IMU: Inertial Measurement Unit)は加速度と角速度を取得できるセンサです。
- 加速度(X, Y, Z方向の3軸)
- 角速度(X, Y, Z方向の3軸)
3軸+3軸で「6軸センサ」と呼んだりします。さらに地磁気(X, Y, Z方向の3軸)を足した9軸センサもあります。
IMUの用途は車のセーフティ機能から、カメラの手ブレ補正まで様々です。実は大半のスマートフォンにも搭載されており、Webの機能(DeviceOrientationAPI)として利用可能です。 あなたがもしスマホからこのブログを見ているなら、次のページからブラウザ上でセンサの値を確認できます。
マイクロマウスはIMUの値から、今の車体の姿勢を推定して姿勢制御に使います。 自身の姿勢を知ることでまっすぐ走れたり、次の動画のように地面を回転させても本体の向きを一定に保てたりします。 (マウス界隈では通称「宴会芸」とよばれています)
M5Stackとは別にIMUを搭載した理由
ところで、M5Stackの一部のモデルにもIMUが搭載されています(M5Stack Gray, M5Stack Fire, M5GO)。 当初はM5StackのIMUを使う予定でいましたが、方針を変えて今回IMUを自前で搭載することにしました。 それは次のような理由からです。
- M5Stack Basicにも対応させるため:M5Stack Coreの最も安価なモデル「M5Stack Basic」にはIMUが搭載されていません。M5Mouseは私が自分で走らせるだけでなく、いずれソースと3Dモデルを公開して誰でも試せるようにしたいと考えています。そのためBasicを含む全てのCoreで動作させられるようIMUを搭載します。
- 学習のため:モータドライバと壁センサの回路設計をしていて感じましたが、やはり周辺回路を含めてモジュール化されたICを使う場合と、自分でICを基板に組み込むのでは、調べるべき情報量がぜんぜん違ってきます。具体的には、モジュールを使う際はデータシートのレジスタマップくらいしか見ませんが、自分で組み込む際は定格電圧、電流、温度による動作条件などを見て選定したり、内部の回路図を読み解いて動作を理解する必要があります。これは研修なのでIMUも自分で組み込んだほうが学びが多いだろうと判断しました。
- M5Stack CORE2対応を見越して:これはまったくの偶然ですが、最近発売されたタッチセンサ付きの新製品「M5Stack CORE2」では、IMUはボトムピン側に取り付けられています(写真参照)。つまり、M5MouseのようなモジュールでIMUを使いたい場合は、MBUSのメスコネクタを搭載してボトムピンを挿せるようにするか、モジュール自身にIMUを搭載するしかありません。
M5Mouseはバージョン2以降でCORE2にも対応させたいと考えています。その意味でもIMUはモジュール側に搭載したほうが良さそうです。

M5Stack CORE2のIMUはボトムピン側に実装されている
部品選定
M5MouseにもIMUを積むぞ〜と決めたところで部品選定です。 今回使うのはInvenSenseのICM-20648という9軸センサです。チップ単体が1個あたり800円程度で購入可能です。
https://www.digikey.jp/product-detail/ja/tdk-invensense/ICM-20648/1428-1123-1-ND/7062698
当初はマイクロマウスでもよく使われている9軸センサMPU9250を使うつもりで設計を進めていましたが、 このセンサを含めてMPUシリーズは全て新規設計非推奨 となっていることに途中で気づきました…。 そのため、MPUその後継であるICMシリーズからICM-20648を選定しました。 ICM-20648は6軸なので地磁気センサはついていませんが、地磁気センサは今回使う予定がないので事足ります。 また、MPU9250とチップの形状と各ピンの機能に互換性があるので、MPU9250を使って設計した基板には、そのままICM-20648を使うことができます。
なお地磁気も使いたい場合はICM-20948がMPU9250の直接の後継にあたりますが、こちらは 動作電圧が1.8Vまでに変更されています(参考:MPU9250→ICM-20948への移行ガイド)。つまりSTM32のロジック電圧3.3Vを直結すると壊れる可能性があります。レベルシフタなどを間に挟まないと使えませんので注意しましょう。
詳細
センサ周辺の回路図
IMU周辺の回路図を示します。回路図はデータシートの”Typical Operating Circuit”(SPI接続の場合)の項を参考にしました。
ICM-20648の主な機能
ICM-20648の主な機能と回路図の配線について、データシートをもとに説明します。
- 通信プロトコル
- I2CまたはSPIから選択できます。
- 今回は高速に通信できるSPIを選びます。STM32とICをMOSI(図中のSDI)、MISO(SDO)、CLK(SCLK)、CS(NCS)の4線で接続します。
- 角速度の検出
- 角速度はdps(degree per second)で表現します。1秒間に1回転する物体の角速度は360dpsです。
- ICM-20648が検出できる角速度の範囲は設定で変更でき、最大±2000dpsです。つまり1秒に5回転程度のスピードであればセンサが振り切れずに検出できます。
- 加速度の検出
- 加速度は重力加速度Gで表現します。
- ICM-20648が検出できる加速度は設定で変更でき、最大±16Gです。マイクロマウスでは十分すぎる性能です。
- 補助I2C
- 補助的なI2Cマスタの機能を備えています。ICM-20648を経由して、さらに他のI2Cスレーブと通信ができます。
- 地磁気センサをさらに別付けするなどの用途が想定されています。
- 今回は使いませんので該当するピン(AUX_DAとAUX_CL)は接続なし(NC)にしておきます。
- DMP(Digital Motion Processor)
- センサ値のフィルタやセンサフュージョンなどの処理をチップ側で行える機能です。
- うまく使うとSTM32側の計算リソースを節約できます。できれば使いたいです。
- SPIインタフェース経由でプログラムを書き込むので回路図上は変更ありません。
- 割り込み
- モーション検知などのイベントが発生した時に特定のピン(INT)がHighになります。これを割り込み処理に利用できます。
- 使う予定はありませんが、念の為ピン(INT)は配線しておきます。
以上、今回はM5MouseのIMU回路について説明しました。次回はESP32(M5Stack)とSTM32の回路図について説明します。