こんにちは!
私は Freescale プラットフォームの初心者ですが、デバイスにいくつかの新しい機能を実装する必要があります。だから助けが必要なんです。現在、ハブとして FXLC95000 を使用し、内部加速度計と外部 MAG3110 の 2 つのセンサを備えています。Intelligent Sensing Framework v1.1 を使用します。MAG3110 および内部加速度計用のセンサ アダプターを備えた追加のライブラリがあります。しかし、今度は新しいセンサ MPL3115A2 を実装する必要があります。しかし、MPL3115用のデジタルセンサ抽象化アダプターが見つかりません。どうすればいいですか?このアダプタのソースコードを持っている人はいますか?
こんにちは、ヴィタリーさん。
Freescaleのアプリケーションエンジニアです。 この問題について、メールまたは電話で詳しくご相談させていただくために 、 aswin.sivakumar @freescale.comまでご連絡いただけますでしょうか。
よろしくお願いします。
アスウィン
こんにちは!
ジャイロスコープの問題を解決できません。それは大きな問題です!
そこで私は情報を要約することにしました:
回路図の写真は添付ファイルにあります。詳細は 1 つだけ: FXAS21000 ではなく FXAS21002 がどこにあるか。
I2Cバス上にいくつかのセンサがあります。ジャイロスコープ以外はすべて完璧に動作します。
私は、Margaret Nadworny からいただいた FXAS21002C センサ アダプターを使用します。
センサアダプターの設定:
{&fsl_fxas21002_i2cspi_3D_gyro_adapter, NULL, &fxas21002SpecificSettings, I2C_MASTER1, 0x20}
回路図では SA0=0 (GND にコネクテッド) なので、アドレス 0x20 を使用します。
ジェームズ、あなたは私にこう書きました。
「トレースを見ると、0x20ではなく0x40を使用していることがわかります」
FXAS21002.pdfを見ると、表 10、ページ 15 を見ると、この場合、デバイス アドレスは 0x20 - マスターによって送信されるアドレス バイトは 0x40 であることがわかります。したがって、住所に関してはすべて問題ないと思います。
あなたは私にこう書きました:
FXAS21002 の 0x20 と通信すると、現在のアダプタソフトウェアで問題が発生すると思います。これは、FXAS21000 用に設計されており、WHO_AM_I 値が異なります。FXAS21000 は D1、FXAS21002 は D7 です。初期化中にアダプタは WHO_AM_I を読み取り、想定されるセンサーと通信していることを確認します。誤った値が返された場合は失敗します。
しかし、ロジック アナライザーのデータを見ると、FXLC95000 は最初のWrite 0x40 コマンドに対してNACKを取得し、ジャイロ スコープで何も行わないため、WHO_AM_I の回答を尋ねようともしていないことがわかります。
ジャイロスコープを起動するための遅延や、起動手順やコマンド シーケンスはどこにあるのでしょうか?
絶望的です…
ヴィタリー、
あなたのロジックのトレースを調べました。
「回路図では SA0=0 なのでアドレス0x20を使用しています。だからすべて問題ないはずです!」と言っていますが、
トレースを見ると、0x20 ではなく 0x40 を使用していることがわかります。これが最初のことです。
次に、400Khz の I2C バス周波数を引き続き使用する必要があります。バス上にセンサが 4 個しかないのに、100 まで下げる理由はありません。
0x20 で FXAS21002 と通信すると、現在のアダプタ ソフトウェアが WHO_AM_I 値が異なる FXAS21000 用に設計されているため、問題が発生すると思います。FXAS21000 - D1、FXAS21002 - D7。初期化中に、アダプターは WHO_AM_I を読み取り、予期されたセンサと通信していることを確認します。間違った値が返された場合は失敗します。
ISF1P195Kに付属するセンサーアダプターは21002がリリースされる前に製造されており、WHO_AM_I値のD7をサポートしていません。
そのため初期化は失敗します。D1 と D7 の両方を適切に認識する更新されたアダプター コードを入手する必要があります。
他の質問にお答えすると、はい。一度だけ試します。センサが一度は応答しないのに、次回は正常に応答するという理由は実際にはありません。
-ジム
こんにちは、ジェームズ!
これが私の設定です:
{&fsl_fxas21000_i2cspi_3D_gyro_adapter, NULL, &fxas21000SpecificSettings, I2C_MASTER1, 0x20}
私の回路図では SA0=0 なので、アドレス 0x20 を使用します。SOすべて大丈夫なはずです!
ロジックアナライザのログファイルを添付しました。センサは 4 つあります: MPL3115 (アドレス 0xC0 0xC1)、MAG3110 (アドレス 0x1C 0x1D)、FXMS3110 (アドレス 0x1E 0x1F)、FXAS21002 (アドレス 0x40 0x41)。
ご覧のとおり、FXLC95000 は最初にアドレス 0x40 を書き込もうとしますが、NACK が返され、このアドレスをそれ以上要求しません。私の理解するところによると、ジャイロ FXAS21002 は動作しません。
I2C の速度が原因でしょうか?私は400KHzを使います。100KHzを試してみたらどうでしょうか?どうやってやるんですか?ファイルisf_sysconf_comms.cI2C 速度については次の列挙型が確認できます。
列挙型 i2c_Speed{
I2C_SPEED_START = 0, /*!< 速度範囲の開始。*/
I2C_SPEED_600_KHZ = I2C_SPEED_START, /*!< 600 KHz での速度。 */
I2C_SPEED_400_KHZ = 1、/*!<400 KHzでの速度。*/
I2C_SPEED_200_KHZ = 2、/*!<200KHzでの速度。*/
I2C_SPEED_END = 3 /*!<速度範囲の終了。今は200KHzです。*/
};
でも100KHzはないです!この速度を有効にするにはどうすればいいですか?
FXAS21002 の I2C アドレスは、構成に応じて 0x20 または 0x21 のいずれかになると思います。isf_sensor_configuration.cのエントリを確認します
次のようになります:
{&fsl_fxas21000_i2cspi_3D_gyro_adapter, NULL, &fxas21000SpecificSettings, I2C_MASTER1, 0x21 }
-ジム
こんにちは!
FXAS21002 に関する問題は次のとおりです。FXLC95000でジャイロスコープを使いたい。FXAS21002 用のセンサ アダプターがあり、すべて問題ないはずです。しかしジャイロスコープは応答しません!この I2C 上の他のセンサは完璧に動作します。ロジック アナライザーを使用すると、FXLC95000 が最初にジャイロ スコープ (アドレス 0x40) に問い合わせようとしたが、NACK が返され、それ以上問い合わせを行わないことに気付きました。それは正しい行動ですか?そしてそれは何を意味するのでしょうか?ロジック アナライザーの回路図とスクリーンショットを添付します。
何が問題なのでしょうか、またそれをどう解決すればよいのでしょうか?!
追伸リセットピンのR14を削除しました。つまり、問題はここにはありません。実際のデバイスで FXAS21002 はどこにありますか (回路図に示されている FXAS21000 ではありません)。
ヴィタリー、
あなたの地域の気象条件により、典型的な気圧の変化が見られる可能性があります。
MPL3115 は非常に敏感で、ドアの開閉、HVAC の動作、気象条件による変化による圧力の変化を検出します。
データシートには、MPL3115がプログラムできる最速のODRは1Hzであるが、このODRでオーバーサンプリング比を128まで設定できることが記されている。
内部サンプリング レートは 128Hz になります。(これは、以下で引用した autoAcqTimeStep と oversampleRatio によって制御されます)
MPL3115 はワンショット モードでも使用できます。このモードでは、コマンドでサンプルを取得するように外部からトリガーし、1 Hz より高速な有効な ODR を可能にしますが、ワンショット モードは、使用しているセンサー アダプターのバージョンではサポートされていません。(KinetisのISF 2.1でサポートされています)
大気圧は比較的ゆっくりと変化するため、1Hz より高速な圧力 ODR が必要になることはほとんどありません。
実際、時定数が約 5.0 秒のローパス フィルターは、1 Hz の圧力データの**後プロセッシング**に適していることがわかります。
1Hz ODR で 128 倍のオーバーサンプリングを行ってから、5 秒のローパス フィルターを実行することをお勧めします。
-ジム
ありがとう!私にとっては効果がありました!
こんにちは、マーガレット!
ご協力いただければ幸いです。MPL3115用のセンサアダプターをいただきましたが、完璧に動作します。しかし、いくつか疑問があります。MPL3115 のサンプル プロジェクトでは次の設定があります。
mpl3115AppState.CfgBuffer.ctrlReg.reg = STATE_STOPPED_UNSUBSCRIBED;
mpl3115AppState.CfgBuffer.settings.nSettingsToUse= SM_GIVEN_SETTINGS;;
mpl3115AppState.CfgBuffer.settings.nFifoDepth = 1;
mpl3115AppState.CfgBuffer.settings.nCurrentReportRate= FSL_MPL3115_PRESS_1HZ;
読んでみると次のデータがあります:
ミリ秒 圧力 Alt 温度
[00012210] 高度計: 100195 94.822.7
[00013211] 高度計: 100250 89.1322.11
[00014213] 高度計: 100212 93.122.8
[00015213] 高度計: 100218 92.922.9
[00016208] 高度計: 100209 93.522.9
[00017208] 高度計: 100178 95.1522.6
[00018209] 高度計: 100215 92.1322.9
[00019210] 高度計: 100211 93.222.8
[00020211] 高度計: 100200 94.122.9
ご覧のとおり、圧力と高度は毎秒 89.13 メートルから 94.8 メートルまで変化しています。
翌日、それを読もうとすると、次のデータがありました:
ミリ秒 圧力 Alt 温度
[00038198] 高度計: 100082 103.1525.12
[00039198] 高度計: 100124 100.725.14
[00040198] 高度計: 100038 107.1025.9
[00041200] 高度計: 100076 104.825.11
[00042200] 高度計: 100037 107.1225.8
[00043198] 高度計: 100015 109.925.8
[00044198] 高度計: 100052 106.725.10
[00045198] 高度計: 100068 105.225.11
SO、同じ場所で、圧力と高度のデータが異なります。初日は 89.13 ~ 94.8 メートル、2 日目は 100.7 ~ 109.9 メートルです。しかし、実際の高度は約60メートルです。それは、MPL3115 から読み取れる距離よりも 30 ~ 45 メートル短いです。
私の質問は次のとおりです。
1. たとえば、nCurrentReportRate を 1Hz から 10Hz に変更できますか?どうやってやるんですか?
2. ファイルfsl_mpl3115_i2c_1D_press_config_types.h内設定により構造を確認できます:
uint8 oversampleRatio; //オーバーサンプル比 = 2^OS (例: 0 = 1、1 = 2、2 = 4、... 7=128)。
uint8 rawMode; //0 = 通常出力; 1 = ADC 後のプロセッシングを行わない生データ。
uint8 altBaroMode; //0 = 気圧計モード; 1 = 高度計モード。
uint8 autoAcqTimeStep; //自動取得時間ステップ = 2^ST (1秒~9.1時間の範囲)。
uint8 alarmSelect; //0 = 絶対圧力-温度ターゲットを使用します。1 = 圧力-温度ウィンドウとしきい値を使用します。
それはどういう意味ですか?データをより安定させるためにこれを使用できますか?
3. データをさらに安定させるにはどうすればよいでしょうか?独自のローパス フィルターを使用する必要がありますか?
ヴィタリー、
スレーブ アドレス以外は同じなので、同じアダプターを使用できます。
FXLC95000 でこれらすべてをまだ実行していると思います。
必要なのは 2 番目のセンサを構成することだけです。
これは、isf_sensor_configuration.c で、gSensorList[] 配列に新しいセンサ用の新しい行を追加することによって行われます。
SensorConfig_t gSensorList[DSA_NUM_SUPPORTED_SENSORS] =
{ // sm_DsaAdapter_t、*pSensorHandle、*pSensorSpecificSettings、デバイスチャネル、デバイスアドレス
{&fsl_mag3110_i2c_3D_mag_adapter, NULL, &mag3110SpecificSettings, I2C_MASTER1, 0x0E },
{&fsl_mag3110_i2c_3D_mag_adapter, NULL, &mag3110SpecificSettings, I2C_MASTER1, 0x0F},
};
次に、isf_sensor_configuration.h に新しいセンサ用の新しい列挙型を追加します。
typedef enum Sensor_sensors_en
{
DSA_FSL_3D_磁力計、
THE_NEW_FXMS3110_MAG、
DSA_サポートされるセンサーの数
} センサーID_t;
その後、新しいセンサを会員登録できるようになります。
それがあなたにとってどのように機能するかをお知らせください。
-ジム
こんにちは、マーガレット!
mpl3115のセンサアダプターをありがとうございます。すべてうまくいっているように思えます。
しかし、もう一つ質問があります。デバイス mag3110 と fxms3110 の 2 つの磁力計を使用したいと考えています。私の知る限り、それらは同じです。違いは住所のみです。
mag3110用のセンサアダプターは持っていますが、fxms3110用はありません。
その問題を解決してもらえますか?fxms3110用のセンサアダプターをいただけますか?
こんにちは、ヴィタリーさん
英語に問題はありません。謝らないでください。
私があなたに送ったプロジェクトにファイルが含まれていなかったなら、私もそのファイルを持っていなかったことになります。
先ほどのメールでは、人々に助けを求めなければならないと伝えていました。MPL3115 センサ アダプターの作成者は中国にいるので、返答を得るには一晩待たなければなりません。あなたのリクエストを確認し、それに取り組んでいることをお知らせしたかったのです。
しかし、その間に、Kinetis センサ アダプターと思われる対応するファイルを見つけました。
試してみてコンパイルできるかどうか確認してみてください。
FXLC95000 と Kinetis 上の MAG3110 の類似ファイルを比較し、2 つの MCU 間でどのように異なるかを確認することをお勧めします。その後、添付されたファイルに対しても同様の調整を行うことができます。
結果がどうなったか教えてください。
マーガレット
マーガレット、ごめんなさい。しかし、あなたの最後のメールを理解したかどうかはわかりません。![]()
先ほども申し上げた通り、MPL3115_release_compass.zip を受け取りました。しかし、 fsl_mpl3115_i2c_1D_press_config_types.hがありません。
そのファイルはありますか?
英語が下手でごめんなさい。完璧ではないよ。![]()
ヴィタリー、
援軍にメールを送りましたので、また連絡します。
よろしくお願いいたします。
マーガレット
こんにちは、マーガレット!
いただいたプロジェクト MPL3115_release_compass をコンパイルしようとしています。しかし、間違いがあります。なぜなら、「fsl_mpl3115_i2c_1D_press_config_types.h」というファイルが存在しないからです。
どこで見つけられますか?手伝ってもらえますか?
Vitaliyさん、あなたは正しいです。申し訳ありません。トレーニングモジュール7が添付されています。洗練されていないため、Web サイトには掲載されませんでした。誤りがある可能性もあることをご理解の上、自己責任でご利用ください。新しいセンサ アダプターを追加するには、モジュール 6 が必要になります。MAG3110 センサー アダプターを例として見ることは依然として価値があります。
FXAS21000C のセンサ アダプターは FXAS21002C に似ていますが、正しくありません。FXAS21002C 用のものを作成するには、まず FXAS21000C センサ アダプターから始める必要があります。FXAS21002C用の未発表センサアダプターも付属しております。
最後に、MPL3115用のセンサアダプターの未公開バージョンが添付されています。どちらかが機能するかどうかは保証できませんが、出発点にはなるでしょう。
マーガレットさん、ご回答ありがとうございます!しかし、まだいくつか疑問が残ります。
あなたはこう言います:
「 MPL3115A2 用の独自のセンサー アダプターと FXLC95000 用の ISF 1.1 を作成できます。ISF 1.1 トレーニング タブのトレーニング モジュール番号 6 を使用すると、独自のセンサー アダプターを作成するために必要な手順を確認できます。 」
しかし、モジュール 6 では、mag3110 用の既存のセンサ アダプターの追加のみが見つかります。そして次のものを見つけました:
「センサ アダプターの作成は、トレーニングのモジュール 7 の主題です。」
では、モジュール 7 はどこにありますか?見つかりません!
そしてもう一つ。実機のfxas21002でセンサアダプター(fsl_fxas21000_i2cspi_3D_gyro_config_types.h)を使用できますか?I2Cのデバイスアドレス以外に何か変更が必要ですか?
こんにちは、Vitaliy さん。まず悪いニュースですが、MPL3115A2 のセンサ アダプターは FXLC95000 用に製造されていません。良いニュースです。MPL3115A2 用の独自のセンサー アダプターと FXLC95000 用の ISF 1.1 を作成できます。ISF 1.1 トレーニング タブのトレーニング モジュール番号 6 を使用すると、独自のセンサー アダプターを作成するために必要な手順を確認できます。手順は似ていますが、磁力計を追加する代わりに、MPL3115A2 を追加します。FXLC95000 の他のセンサ アダプターを例として使用することもできます。
さらに、Kinetis デバイス用の MPL3115 センサ アダプターもあります。これを確認するには、Kinetis 用の ISF 2.1 と ISF 2.1 PEupd ファイルをダウンロードする必要があります。そのセンサ アダプターのソース コードが提供されます。API は異なり、プロセッサ Expert コンポーネントとして設定されていますが、2 つの API を区別して MPL3115A2 センサ アダプターの主要な機能をキャプチャできる可能性があります。
作成したら、コミュニティ ページに投稿して他のユーザーと共有してください。