416657_ja-JP

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

416657_ja-JP

416657_ja-JP

Gセンサ FXLS8471Q<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

AN4692 に従って G-センサを構成します。出力は正常のようです。Gセンサを横切ると、通常の出力があります。しかし、その後、Gセンサの出力はすぐにゼロに戻ります。自動ウェイク/スリープ モードと低電力モードはすでに無効になっています。助けてください。

加速度センサRe: G-sensor FXLS8471Q<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

親愛なるトーマスへ

以下は私のソースコードです。

void Initial_GSensor(void)
{
CS_B_PutVal(1);//CSをHighに設定する

GSensor_Write_Addr_Cmd(XYZ_DATA_CFG, 0x12); // +/-8gの範囲、約0.976mg/LSB
// Set_Roll_Over();
// Set_Transient_Detection();
GSensor_Write_Addr_Cmd(CTRL_REG1, 0x39); // ODR = 1.56Hz,通常モード、アクティブモード
GSensor_Write_Addr_Cmd(CTRL_REG2, 0x02); // リセット、高解像度モード
// Get_GSensor_Calibration();
}


void Get_GSensor_XYZ(void)
{

GSensor_Read_Addr_Cmd(OUT_X_MSB、7);
X_MSB = Gセンサーデータ[1];
X_LSB = Gセンサーデータ[2];
Y_MSB = Gセンサーデータ[3];
Y_LSB = Gセンサーデータ[4];
Z_MSB = GSensor_Data[5];
Z_LSB = Gセンサーデータ[6];

G_Sensor.Xout_14bit = ((X_MSB << | (X_LSB))>>2;
G_Sensor.Yout_14bit = ((Y_MSB << | (Y_LSB))>>2;
G_Sensor.Zout_14bit = ((Z_MSB << | (Z_LSB))>>2;

G_Sensor.Xout_14bit >= TWO_COMPLEMENTの場合{
X = ((X_MSB << | (X_LSB))>>2; // 14ビットすべてを反転
X = (X ^ 0x3FFF) + 1;
G_Sensor.Xout_g = X * SENSITIVITY * (-1); // X軸の出力値をg単位で計算する
}それ以外{
G_Sensor.Xout_g = G_Sensor.Xout_14bit*SENSITIVITY; // X軸の出力値をg単位で計算する
}

G_Sensor.Yout_14bit >= TWO_COMPLEMENTの場合{
Y = ((Y_MSB << | (Y_LSB))>>2; // 14ビットすべてを反転する
Y = (Y ^ 0x3FFF) + 1;
G_Sensor.Yout_g = Y * SENSITIVITY * (-1); // Y軸出力値をg単位で計算
}それ以外{
G_Sensor.Yout_g = G_Sensor.Yout_14bit*SENSITIVITY; // Y軸出力値をg単位で計算
}

G_Sensor.Zout_14bit >= TWO_COMPLEMENTの場合{
Z = ((Z_MSB << | (Z_LSB))>>2; // 14ビットすべてを反転
Z = (Z ^ 0x3FFF) + 1;
G_Sensor.Zout_g = Z * SENSITIVITY * (-1); // Z軸出力値をg単位で計算
}それ以外{
G_Sensor.Zout_g = G_Sensor.Zout_14bit*SENSITIVITY; // Z軸出力値をg単位で計算
}
}

void Get_GSensor_Calibration(void)
{

GSensor_Write_Addr_Cmd(CTRL_REG1, 0x18); //デバイスを100 Hz ODR、スタンバイに設定

GSensor_Read_Addr_Cmd(OUT_X_MSB、7);
X_MSB = Gセンサーデータ[1];
X_LSB = Gセンサーデータ[2];
Y_MSB = Gセンサーデータ[3];
Y_LSB = Gセンサーデータ[4];
Z_MSB = GSensor_Data[5];
Z_LSB = Gセンサーデータ[6];

G_Sensor.Xout_14bit = ((X_MSB << | (X_LSB))>>2;
G_Sensor.Yout_14bit = ((Y_MSB << | (Y_LSB))>>2;
G_Sensor.Zout_14bit = ((Z_MSB << | (Z_LSB))>>2;

X_オフセット = G_Sensor.Xout_14bit / 8 * (-1);
Y_オフセット = G_Sensor.Yout_14bit / 8 * (-1);
Z_オフセット = (G_Sensor.Zout_14bit - 感度) / 8 * (-1);

GSensor_Write_Addr_Cmd(CTRL_REG1, 0x39); // ODR = 1.56Hz,ノイズ低減、アクティブモード

}

void GSensor_Read_Addr_Cmd(char Addr,word len)
{
isoSPI1_TComData 一時文字;
単語 i;

遅延msGセンサー(1);

CS_B_PutVal(0);//CSが低い

遅延msGセンサー(1);

チェック値 = 1;
タイムアウト_CNT = 0;
while( (Check_Value != 0) && (TimeOut_CNT < 3000)){
Check_Value = isoSPI1_SendChar( ((~0x80) & Addr) ); // R/W、ADDR[6]、ADDR[5]、ADDR[4]、ADDR[3]、ADDR[2]、ADDR[1]、ADDR[0]
タイムアウト_CNT++;
}

チェック値 = 1;
タイムアウト_CNT = 0;
while( (Check_Value != 0) && (TimeOut_CNT < 3000)){
Check_Value = isoSPI1_SendChar(Addr); // ADDR[7], X, X, X, X, X, X, X
タイムアウト_CNT++;
}

遅延msGセンサー(1);

for(i=0;i {
isoSPI1_SendChar(0); // ダミー

チェック値 = 1;
タイムアウト_CNT = 0;
while( (Check_Value != 0) && (TimeOut_CNT < 3000)){
Check_Value = isoSPI1_RecvChar(&temp_char); // DATA[7], DATA[6], DATA[5], DATA[4], DATA[3], DATA[2], DATA[1], DATA[0]
タイムアウト_CNT++;
}
GSensor_Data[i] = temp_char;
}

遅延msGセンサー(1);

CS_B_PutVal(1);//CS高

遅延msGセンサー(1);

}

void GSensor_Write_Addr_Cmd(char Addr,char data)
{

遅延msGセンサー(1);

CS_B_PutVal(0);//CSが低い

遅延msGセンサー(1);

チェック値 = 1;
タイムアウト_CNT = 0;
while( (Check_Value != 0) && (TimeOut_CNT < 3000)){
Check_Value = isoSPI1_SendChar( ((0x80) | Addr) ); // R/W、ADDR[6]、ADDR[5]、ADDR[4]、ADDR[3]、ADDR[2]、ADDR[1]、ADDR[0]
タイムアウト_CNT++;
}

チェック値 = 1;
タイムアウト_CNT = 0;
while( (Check_Value != 0) && (TimeOut_CNT < 3000)){
Check_Value = isoSPI1_SendChar(Addr); // ADDR[7], X, X, X, X, X, X, X
タイムアウト_CNT++;
}

チェック値 = 1;
タイムアウト_CNT = 0;
while( (Check_Value != 0) && (TimeOut_CNT < 3000)){
Check_Value = isoSPI1_SendChar(data); // DATA[7], DATA[6], DATA[5], DATA[4], DATA[3], DATA[2], DATA[1], DATA[0]
タイムアウト_CNT++;
}

遅延msGセンサー(1);

CS_B_PutVal(1);//CS高

遅延msGセンサー(1);

}

Re: G-sensor FXLS8471Q<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

こんにちはヘンリー、

どこに問題があるのかを言うのは難しい。ソース コードと、できればロジック アナライザーからのタイミング図もここに投稿していただければ、調査に役立つかもしれません。

一方、私のシンプルなFXLS8471Q ベアメタルのサンプル コードや、 vector-magnitude 関数の使用方法を示す別のサンプル コードも役に立つかもしれません。

よろしくお願いいたします。

トーマス

追伸: 私の回答がご質問の解決に役立った場合は、「正解」または「役に立った」と評価してください。ありがとうございます。

タグ(1)
評価なし
バージョン履歴
最終更新日:
‎02-04-2026 07:06 AM
更新者: