1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

SONY Spresense用 6軸IMU BMI270センサーボードをSPRESENSE SDKで制御してみました

Last updated at Posted at 2022-09-13

Next Step社製の 「Sony Spresense 用 6軸 加速度計・ジャイロスコープセンサ (BMI270) Addon ボード」 をVisual Studio CodeベースのSPRESENSE開発環境「SPRESENSE SDK」から制御してみました。X軸方向(SPRESENSE横方向)の傾きに合わせてSPRESENSE Main Board上のLEDが左右に揺れます。6軸IMUなので、XYZ軸方向の加速度値と、XYZ軸を中心とした回転角速度を計測できます。

IMG_4111のコピー.jpg

今回購入したデバイス

関連するコミット

ビルド方法

SDKコンフィグを開き「Examples」にある「bmi270_no_scu」を選択してください。SCU機能が有効の場合は正しく機能しないため、同居させるアプリケーションにご注意ください。

スクリーンショット 2022-09-13 14.45.20.png
スクリーンショット 2022-09-13 14.46.24.png

プログラムの構造

SPRESENSE SDKでは、NuttXというRTOS(リアルタイムOS)が、ハードウェアを制御してくれます。SPRESENSE Main Board上のI2Cポートは「/dev/i2c0」というファイルで表現されます。このファイルをopenしてioctlコマンドを使ってI2C通信を行い、BMI270を制御します。

初期化方法&計測開始方法

BMI270の初期化方法&計測開始方法はデータシートに記載されています。 まず、CHIPIDレジスタにアクセスし、対象のデバイスがBMI270であるかを確認します。BMI270であることが確認できた後、初期状態が不明であるため、CMDレジスタに0xB6を書き込んで、SoftResetします。このSoftResetに対してはNAKが返るため、エラーチェックは不要です。

SoftReset後、PWR_CONFレジスタに0x00を書き込みます。次に、INIT_CTRLレジスタに0x00を書き込みconfig file書き込みモードにします。config fileとはBMI270を提供するBosch社が定めた8KBのテーブルです。このテーブルデータをINIT_DATAレジスタにBurst Writeしてください。テーブルデータを書き込んだ後に、INIT_CTRLレジスタに0x01を書き込むと、テーブルデータを使ってデバイスの初期化が行われます。初期化に成功するとINTERNAL_STATUSレジスタが0x01を返します。

続いて、PWR_CTRLレジスタ、ACC_CONFレジスタ、GYR_CONFレジスタ、PWR_CONFレジスタに適切な値を代入し(データシート記載)、計測を開始します。最後に、FIFO_CONFIG_1レジスタとFIFO_CONFIG_0レジスタを使って、計測値がFIFOに蓄えられるようにすれば、計測開始です。

計測データの収集

BMI270のFIFOには「加速度値」と「回転角速度値」の他に「制御データ」が保存されます。また、「加速度値」と「回転角速度値」を生成するデータレート(ODR:Output-Data-Rate)を不一致にすることができるため、ある時は加速度値のみがEnqueueされ、またある時は回転角速度値がEnqueueされ、その両方が同時にEnqueueされることもある、という仕様になっています。そのため、FIFOからデータを読み出す場合は、制御データや計測データのフラグを確認しながらデータを分解する必要があります。

スクリーンショット 2022-09-13 16.21.17.png

本プログラムでは、FIFOから取得したデータを分析した後、「加速度値」「回転角速度値」それぞれを格納する独立したテーブルに代入しています。最新の値が欲しい場合は、テーブル終端の値が対象の値となります。

スクリーンショット 2022-09-13 14.19.25.png

動作の様子

水平を示すSPRESENSE Main Board上のLED(中央が点灯)。シリアルターミナルには加速度値と回転角速度値が表示されます。512回計測の後にプログラムが停止します。

IMG_4112.jpg

是非、お試しください!

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?