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
I2Cスレーブアドレス
AD0 | 7bit | 8bit | HEX(8bit) |
---|---|---|---|
LOW | 1101000 | 11010000 | 0xD0 |
HIGH | 1101001 | 11010010 | 0xD2 |
スレーブアドレスは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.