LoginSignup
3
4

More than 5 years have passed since last update.

傾斜計 (v0.3) > MPU-9250の測定速度を1Hzにする

Last updated at Posted at 2016-07-02
動作環境
ESP-WROOM-02
MPU-9250 https://strawberry-linux.com/catalog/items?code=12250
ライブラリ https://github.com/jrowberg/i2cdevlib/

測定周期の変更

Jeff RowbergによるMPU用ライブラリとサンプルスケッチMPU6050_DMP6を使った場合、デフォルトではMPU-9250の測定は100Hzで行われ、FIFOの扱いをきちんとしないとFIFO overflowになる。

測定間隔を100Hzから落とす方法について調べた。

参考 https://sites.google.com/site/yamagajin/home/mpu6050

ライブラリのヘッダーファイル(MPU6050_6Axis_MotionApps20.h)を変更すると測定周期を変更できるとのこと。MPU-9250の場合はMPU9150_9Axis_MotionApps41.hになる。

ただし、ライブラリのヘッダファイルそのものを変更すると、今後MPU-9250を使用するすべてのソフトがその測定周期になってしまう。

ここでは、#include "ファイル.h"の仕組みを考慮した変更を行う。

変更ファイルのローカル化

#inlcude "ファイル.h"をソース内で定義した場合、ヘッダーファイルのサーチ順番は以下となる。

  1. ローカルのフォルダ
  2. インクルードファイルパスが通っているフォルダ (Arduino\Librariesなど)

つまり、ローカルのフォルダにMPU9150_9Axis_MotionApps41.hがあり、Arduino\LibrariesにもMPU9150_9Axis_MotionApps41.hのファイルがある場合、ローカルフォルダのMPU9150_9Axis_MotionApps41.hが使われる。

ローカルフォルダのMPU9150_9Axis_MotionApps41.hの測定周期を変更すると、ローカルフォルダに同ファイルがない他のプロジェクトではArduino\Libraries内のヘッダーが使われるので、それらのプロジェクトではデフォルトの100Hzの測定周期となる。
ヘッダファイルの変更を特定のプロジェクトだけに制限できることになる。

以下のコピー元からコピー先にファイルをコピーして、コピー先の設定を変更するといい。

  • コピー元: \Arduino\libraries\MPU9150\MPU9150_9Axis_MotionApps41.h
  • コピー先: \Arduino\esp8266_160701_MPU9250\MPU9150_9Axis_MotionApps41.h (\Arduino\esp8266_160701_MPU9250: 今回のプロジェクトフォルダ)

MPU9150_9Axis_MotionApps41.hの変更

参考 https://sites.google.com/site/yamagajin/home/mpu6050
を参考に以下の行を変更した。

MPU9150_9Axis_MotionApps41.h
//    0x02,   0x16,   0x02,   0x00, 0x03                // D_0_22 inv_set_fifo_rate
    0x02,   0x16,   0x02,   0x00, 0xC7                // D_0_22 inv_set_fifo_rate

    // This very last 0x01 WAS a 0x09, which drops the FIFO rate down to 20 Hz. 0x07 is 25 Hz,
    // 0x01 is 100Hz. Going faster than 100Hz (0x00=200Hz) tends to result in very noisy data.
    // DMP output frequency is calculated easily using this equation: (200Hz / (1 + value))

    // It is important to make sure the host processor can keep up with reading and processing
    // the FIFO output at the desired rate. Handling FIFO overflow cleanly is also a good idea.

上記コメントにあるように、(200Hz / (1 + value))が測定周期になるので、valueには199となるように0xC7を指定した。これで1Hzとなる。

元のコードは0x03を使っていたので、50Hzだったようだ。

code (v0.3)

v0.3 @ github

実際に実行したところ、1Hzの測定間隔となった。

距離計と組合せてポータブル3Dスキャナとする場合はこれくらいの測定周期がいいかと思う。

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4