SparkFun 9 Degrees of Freedom Breakout - MPU-9150

I2C接続の9自由度( 3軸加速度センサ、3軸ジャイロセンサ、3軸磁気センサ)を持つ慣性計測装置 MPU-9150を使えるようにする。

参考URL

製品ページ
回路図
フックアップガイド
データシート
レジスタマップ★大事
ストロベリーリナックスのMPU-9150解説 ★おすすめ。日本語で分かりやすい

接続

以下のように接続した。左がMPU-9150⇔右がLCP824(写真と逆でスマソ)

  • GND⇔GND
  • VCC ⇔ 3.3V
  • SDA ⇔ dp4(SDA)
  • SCL ⇔ dp5(SCL)
  • INT ⇔ dp15
  • AD0 ⇔ GND

/media/uploads/yasubumi/mpu9150.jpg

I2Cスレーブアドレス

AD07bit8bitHEX(8bit)
LOW1101000110100000xD0
HIGH1101001110100100xD2

スレーブアドレスはAD0をGNDに接続したので0xD0となります。
コンパスは別アドレス。

I2C通信

MPU9150の通信方法。データシート第9章に記載がある。一般的な通信方式なのかもしれない。

データの書き込みは、書き込みでスレーブアドレスを指定した後、書き込み先レジスタアドレスを送信、データ(1 byte)を送信の順で行う。1 byte以上のデータはそのまま続けて送信すればMPU側でレジスタアドレスをインクリメントしてくれる。

データの読み込みは、まず書き込みでスレーブアドレスを指定した後、読み込みレジスタのアドレスを送信。その後、読み込みでスレーブアドレスを指定し、データを1 byte ずつ受信すればよい。

Who are you

レジスタアドレス0x75を読む。正常に接続していれば0x68を返す。レジスタマップの4.32を参照。

起動

スリープモードになっているので、レジスタ0x68に0x00を書き込む。レジスタマップの4.28を参照
ストロベリーリナックスのスタートアップガイドには0x37に0x02を書き込むとある。レジスタマップを見るとI2C_BYPASS_ENをONにしている模様。こうすると補助I2C BUSに直接アクセスできるバイパスモードになる。レジスタマップの4.14を参照。何でこんな作業が必要かと思ったら、コンパスにアクセスするために必要。
バイパスモードはデータシートの7.12と7.14参照とのこと。

加速度の設定

読み込んで確認する。必要なら設定を変更する。読み込み方を確認。レジスタマップの4.5を参照。

ジャイロの設定

読み込んで確認する。必要なら設定を変更する。読み込み方を確認。レジスタマップの4.4を参照。

加速度、ジャイロの読み込み

上記の状態で0x3Bから14 byteに加速度・ジャイロのXYZデータが入る。レジスタマップを見ると間に2 byte温度データも入るっぽい。各データは2 byte。

計測レートの設定

レジスタアドレス 0x19
Sample Rate Dividerで設定する。
ジャイロと加速度計は同じ計測タイミングだが、最大値はジャイロ8kHz、加速度計1kHzで異なる。周波数が1kHzより大きい場合、加速度計は更新タイミングまで前の計測と同じ値が入る。

計算式は Sample Rate = Gyro Output Rate / (1+ SMPLRT_DIV)

ここでGyro Output Rateは8kHz(ただしレジスタ0x1Aをいじってフィルターをかけてると1kHz)。SMPLRT_DIVはレジスタの値8bit全部使っていて0~255
今、計測レートを100Hzにしたいので、8kHzを80で割ればよいからSMPLRT_DIV=79=0x4Fに設定してやる。

割り込み

レジスタアドレス: 0x38
Interrupt Enableで設定する。
Bit0を1にしてやると全てのセンサーデータが書き込まれた時に割り込みを発生させられる。上記の計測レートと合わせて100Hzで割り込みを発生させられる、はず。


Please log in to post comments.