1109123_ja-JP

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

1109123_ja-JP

1109123_ja-JP

FRDMSTBC-A8471 - ベアメタルのサンプル・プロジェクト

ねえ皆さん


このドキュメントでは、最近リリースされた FRDMSTBC-A8471 開発ボードNXP FXLS8471Q 3 軸リニア加速度計用に作成した簡単なベアメタルの例コードについて説明します。このボードはほとんどの NXP Freedom開発ボード と互換性があり、最も人気のあるものの1つである FRDM-KL25Zを使用することにしました。FreeMASTERツールは、SPIインターフェースを介した割り込み手法を使用して、FXLS8471Qから読み取られた加速度データを視覚化するために使用されます。このボードをサポートする Sensor ToolboxソフトウェアIntelligent Sensing Framework (ISF)については説明しません。


このサンプルでは、次のことを示しています。


1. MKL25Z128 MCU(主にSPIおよびPORTモジュール)の初期化。

2. SPIデータの書き込みおよび読み取り操作。

3.最高の解像度を達成するためのFXLS8471Qの初期化。

4. AN4069に基づく簡単なオフセットキャリブレーション。

5. 割り込み技術を使用してデータを読み出して出力します。

6. レジスタ0x01 – 0x06からの出力値をg単位の実際の加速度値に変換します。

7. FreeMASTERツールでの出力値の視覚化。

 

 

1.FRDMSTBC-A8471/FRDM-KL25Zの回路図と下の画像からわかるように、SPI信号はKL25Z MCUのSPI0モジュールにルーティングされ、INT1出力はPTD4ピンに接続されています。PTD0ピン(チップセレクト)はSPI0モジュールによって自動的に制御されないため、汎用出力として構成されています。FXLS8471QのINT1出力はプッシュプルアクティブLOW出力として構成されているため、対応するPTD4ピン構成は、立ち下がりエッジに割り込みを持つGPIOです。コア/システム・クロック周波数は20.97MHz、SPIクロックは524.25kHzです。

 

Boards_1.JPG

 

したがって、MCUは次のように構成されます。

 

/******************************************************************************

*MCU初期化機能

******************************************************************************/


void MCU_Init(void)

{

SPI0モジュールの初期化

SIM_SCGC4 |= SIM_SCGC4_SPI0_MASK;SPI0モジュールへのクロックをオンにします

SIM_SCGC5 |= SIM_SCGC5_PORTD_MASK;ポートDモジュールへのクロックをオンにします

PORTD_PCR1 = PORT_PCR_MUX(0x02);PTD1ピンはSPI0 CLKライン

PORTD_PCR2 = PORT_PCR_MUX(0x02);PTD2ピンはSPI0 MOSIライン

PORTD_PCR3 = PORT_PCR_MUX(0x02);PTD3ピンはSPI0 MISOライン

PORTD_PCR0 = PORT_PCR_MUX(0x01);PTD0ピンはGPIOとして構成されています(CSラインは手動で駆動されます)

GPIOD_PSOR |= GPIO_PSOR_PTSO(0x01);PTD0 = 1 (CS 非アクティブ)

GPIOD_PDDR |= GPIO_PDDR_PDD(0x01);PTD0ピンはGPIO出力


  SPI0_C1 = SPI_C1_SPE_MASK | SPI_C1_MSTR_MASK; // Enable SPI0 module, master mode

SPI0_BR = SPI_BR_SPPR(0x04) |SPI_BR_SPR(0x02);ボーレート = バスクロック / ((SPPR+1) * 2^(SPR+1)) = 20970000 / ((4+1) * 2^(2+1)) = 524.25 kHz


PTD4ピン(FXLS8471QのINT1に接続)を立ち下がりエッジ割り込み用に構成します

PORTD_PCR4 |= (0|PORT_PCR_ISF_MASK|割り込みフラグをクリアする

PORT_PCR_MUX(0x1)|PTD4 は GPIO として構成されています

PORT_PCR_IRQC(0xA));PTD4 は立ち下がりエッジ割り込み用に構成されています


NVICでPORTD割り込みを有効にする

NVIC_ICPR |= 1 << ((INT_PORTD - 16)%32);

NVIC_ISER |= 1 << ((INT_PORTD - 16)%32);

}



2. FXLS8471Qは「モード0」SPIプロトコルを使用しており、クロック信号の非アクティブ状態がローであり、データはクロック信号のリーディングエッジでキャプチャされ、立ち下がりエッジで変更されます。


CSピンの立下がりエッジでSPI通信が開始されます。書き込み操作は、R/Wビットに1を送信することで開始されます。次に、8ビットレジスタアドレスADDR[7:0]が1番目と2番目のシリアル化されたバイトにエンコードされます。書き込まれるデータは、シリアル化された 3 番目のバイトから開始されます。ビットの順序は次のとおりです。


Byte 0: R/W, ADDR[6], ADDR[5], ADDR[4], ADDR[3], ADDR[2], ADDR[1], ADDR[0]

Byte 1: ADDR[7], X, X, X, X, X, X, X

Byte 2: DATA[7], DATA[6], DATA[5], DATA[4], DATA[3], DATA[2], DATA[1], DATA[0]


CSピンの立ち上がりエッジはSPI通信を停止します。


以下は、CTRL_REG1(0x3A)に値0x3Dを書き込む書き込み操作です。

9965_9965.jpg

 

同様に、読み取り操作は、R/W ビットに 0 を送信することによって開始されます。次に、8ビットレジスタアドレスADDR[7:0]が1番目と2番目のシリアル化されたバイトにエンコードされます。データはMISOピンから読み取られます(MSBが最初に)。


以下のスクリーンショットは、WHO_AM_Iレジスタ(0x0D)から正しい値0x6Aを読み取る読み取り操作を示しています。

12275_12275.jpg


複数の読み取り操作は、1 つの読み取りと同様に実行されます。ただし、8 つの SCLK サイクルの倍数でバイトが読み取られる点が異なります。レジスタ アドレスは自動インクリメントされるため、次のクロック エッジの 8 つごとに次のレジスタの MSB がラッチされます。


レジスタ0x01から0x06への6バイトのバースト読み出しを以下に示します。また、加速度出力データを読み出すことでINT1ピンが自動的にクリアされる様子も示しています。

9969_9969.jpg



3. ダイナミックレンジを±2gに設定し、最高の分解能を実現するために、LNOISEビットを設定し、最低のODR(1.56Hz)と高分解能モードを選択します(詳細は AN4075を参照)。DRDY割り込みはイネーブルされ、プッシュプルのアクティブロー出力に設定されたINT1割り込みピンに送られます。


/******************************************************************************

* FXLS8471Q初期化機能

******************************************************************************/


void FXLS8471Q_Init (void)

{

FXLS8471Q_WriteRegister(CTRL_REG2, 0x02);高解像度モード

FXLS8471Q_WriteRegister(CTRL_REG3、0x00);プッシュプル、アクティブ LOW 割り込み

FXLS8471Q_WriteRegister(CTRL_REG4、0x01);DRDY割り込みをイネーブルにする

FXLS8471Q_WriteRegister(CTRL_REG5、0x01);INT1-PTD4 にルーティングされた DRDY 割り込み

FXLS8471Q_WriteRegister(CTRL_REG1、0x3D);ODR=1.56Hz、ノイズの低減、アクティブモード

}



4. AN4069 に準拠したシンプルなオフセットキャリブレーション方法が実装されています


/******************************************************************************

*簡単な加速度計オフセットキャリブレーション

******************************************************************************/


ボイドFXLS8471Q_Calibrate(ボイド)

{

符号なし文字 reg_val = 0;


while (!reg_val) // 最初のデータ セットを待ちます

  {

reg_val = FXLS8471Q_ReadRegister(STATUS_REG) & 0x08;

  }

  

FXLS8471Q_ReadMultiRegisters(OUT_X_MSB_REG、6、AccData);データ出力レジスタの読み取り 0x01-0x06

  

Xout_14_bit = ((ショート) (AccData[0]<<8 |AccData[1])) >> 2;14ビットX軸出力値を計算

Yout_14_bit = ((ショート) (AccData[2]<<8 |AccData[3])) >> 2;14ビットY軸出力値を計算

Zout_14_bit = ((ショート) (AccData[4]<<8 |AccData[5])) >> 2;14ビットZ軸出力値を計算

  

Xオフセット= Xout_14_bit / 8 *(-1);X軸オフセット補正値を計算

Yオフセット= Yout_14_bit / 8 *(-1);Y 軸オフセット補正値の計算

Zoffset = (Zout_14_bit - SENSITIVITY_2G) / 8 * (-1);Z 軸オフセット補正値の計算

  

FXLS8471Q_WriteRegister(CTRL_REG1、0x00);オフセットレジスタへの書き込みを可能にするスタンバイモード

FXLS8471Q_WriteRegister(OFF_X_REG, Xoffset);

FXLS8471Q_WriteRegister(OFF_Y_REG, Yoffset);

FXLS8471Q_WriteRegister(OFF_Z_REG, Zoffset);

  

FXLS8471Q_WriteRegister(CTRL_REG1、0x3D);ODR=1.56Hz、ノイズの低減、アクティブモード

}



5. ISR では、割り込みフラグのみがクリアされ、新しいデータの到着を示すために DataReady 変数が設定されます。


/******************************************************************************

* PORT D 割り込みハンドラ

******************************************************************************/


void PORTD_IRQHandler()

{

PORTD_PCR4 |= PORT_PCR_ISF_MASK;割り込みフラグをクリアする

データレディ = 1;

}



6.加速度計レジスタ0x01〜0x06からの出力値は、最初に符号付き14ビット値に変換され、その後、g単位の実際の値に変換されます。


if (DataReady) // 新しいデータセットは準備ができていますか?

{

データレディ = 0;


FXLS8471Q_ReadMultiRegisters(OUT_X_MSB_REG、6、AccData);データ出力レジスタの読み取り 0x01-0x06

                                                

Xout_14_bit = ((ショート) (AccData[0]<<8 |AccData[1])) >> 2;14ビットX軸出力値を計算

Yout_14_bit = ((ショート) (AccData[2]<<8 |AccData[3])) >> 2;14ビットY軸出力値を計算

Zout_14_bit = ((ショート) (AccData[4]<<8 |AccData[5])) >> 2;14ビットZ軸出力値を計算

                                    

Xout_g = ((float) Xout_14_bit) / SENSITIVITY_2G;X 軸の出力値を g で計算します

Yout_g = ((浮動小数点数) Yout_14_bit) / SENSITIVITY_2G;Y 軸の出力値を g で計算します

Zout_g = ((float) Zout_14_bit) / SENSITIVITY_2G;Z 軸の出力値を g で計算します

}



7. 計算された値は、Debugパースペクティブの右上にある「Variables」ウィンドウまたはFreeMASTERアプリケーションで確認できます。FreeMASTERプロジェクトを開いて実行するには、 FreeMASTER 2.0アプリケーションFreeMASTER通信ドライバをインストールしてください。


CW_variables.JPG


FreeMASTER_variables.JPG



MCUのv10.6のCWで書かれた完全なソースコード(FreeMASTERプロジェクトを含む)が添付されています。


この簡単なアプリケーションについて質問がある場合は、以下からお気軽にお問い合わせください。フィードバックや提案も大歓迎です。


よろしくお願いします。

Tomas

加速度センサ
タグ(1)
評価なし
バージョン履歴
最終更新日:
‎02-05-2026 03:42 AM
更新者: