こんにちは、皆さん。
私は FXOS8700CQ 6 軸センサを使用しており、専用レジスタから (x,y,z) 加速度センサの測定値と (x,y,z) 磁力計の測定値を問題なく読み取ることができます。
データシートには、磁力計の値と時間的に整合した加速度センサの読み取り値を保持する補完/コンパニオン レジスタも参照されています。ただし、これらのレジスタ (0x39 以降) を照会すると、値は常にゼロになります。
これらのレジスタから意味のある値を取得するために必要な手順や特別なセットアップ手順について何かアドバイスはありますか?
よろしくお願いします。
こんにちは、トーマス。
ご確認いただきありがとうございます。ご説明いただいた動作は理にかなっています。
Jeffrey
こんにちは、ジェフリー。
この動作を詳しく調べ、いくつかの ODR および OSR オプションを試した後、CMP_X/Y/Z レジスタから意味のある値を取得するには特定の OSR 設定が重要であることがわかりました。これは、これらのレジスタには時間的に調整された加速度センサデータが含まれているため、実際に意味があります。加速度センサの OSR (mods [1:0] ビットを使用して設定) が磁力計の OSR (m_os [2:0] ビットを使用して設定) と等しいかそれよりも高い場合、ゼロ以外の値を取得できました。OSR は、加速度センサの場合は表 37、磁力計の場合は表 201 に記載されています。
表15のCMP_X/Y/Zレジスタ の(5)の上付き文字 については 誤りであり、次回のデータシート改訂時に修正いたします。 ご指摘ありがとうございます。
お役に立てれば幸いです。
よろしくお願いいたします。
トーマス
こんにちは、トーマス。
包括的な回答をありがとうございます。特に詳細な説明とコードサンプルが役に立ちました。
私のコードはハイブリッド モードを使用していましたが、バースト読み取りでは常に時間調整された加速度センサの値のゼロ値のデータが返されました。
6 軸センサの初期化関数のデバイス構成手順を確認すると、次のレジスタ書き込みステートメントが見つかりました。これは私のセットアップには存在しませんでした。経験的に、これは、時間調整された加速度センサの測定でゼロ値のデータを取得するか、非ゼロ値のデータを取得するかに影響するようです。
| I2C_WriteRegister(FXOS8700CQ_I2C_ADDRESS、CTRL_REG2、0x02); | // 高解像度モード |
加速度センサの OSR モードを通常にすることは、磁力計の 8 倍オーバーサンプリングの仕様と互換性がなく、そのため時間調整された加速度センサの測定でゼロ値のデータが取得されるというのは適切な結論でしょうか。
余談ですが、データシート(FXOS8700CQ.pdf)の表15には、CMP_X_MSB ... CMP_Z_LSBレジスタには(5)の上付き文字が付いています。これは、「レジスタの内容の変更は、デバイスがスタンバイ モードの場合にのみCAN発生します...」ということを示します。これらのレジスターは本当にそうなのでしょうか?
どうもありがとう。
Jeffrey
こんにちは、ジェフリー。
CMP_X/Y/Zレジスタ(0x39 – 0x3E)から加速度計の測定値を読み取るには、FXOS8700CQをハイブリッドモード(m_hms [1:0] = 0b11)で動作させる必要があるため、デバイスの初期化中にこれらの2つのビットを必ず設定してください。
添付されているのは、バースト モードを使用して加速度センサと磁力計の両方の測定値の 12 バイトを読み取るサンプル コードです。レジスタ 0x33 – 0x3E または 0x01 – 0x38 (hyb_autoinc_mode = 1 の場合) からのバースト読み取りは両方とも正常に機能します。
これが役に立つかどうか、あるいは他に質問があるかどうかをお知らせください。
よろしくお願いいたします。
トーマス
追伸: 私の回答がご質問の解決に役立った場合は、「正解」または「役に立った」と評価してください。ありがとうございます。