SCA3300-D01

SCA3300-D01の概要と、SCA3300-D01用OSS-ECALの提供についてご紹介いたします。SCA3300-D01は、村田製作所製の産業用の高精度3軸加速度センサーです。
MCUインタフェース:SPI

ご注意:このリソースの元の言語は英語です。 翻訳は概要を便宜的に提供するもので、機械翻訳を使用していることがあり、私たちは翻訳の正確性および妥当性につきましては一切保証いたしません。 また、実際の設計などの前には、必ず最新版Datasheetをご参照くださいますようお願いいたします。

SCA3300-D01 Datasheet 二次元バーコード

SCA3300-D01

SCA3300-D01

概要

SCA3300-D01は、高性能加速度センサー・コンポーネントです。 村田製作所の実績ある静電容量式3D-MEMS技術をベースとした3軸加速度センサーです。 信号処理は、柔軟なSPIデジタル・インターフェースを備えたミックスド・シグナルASICで行われます。 センサエレメントとASICは、12ピンのプリモールドプラスチックハウジングにパッケージされており、製品寿命の間、信頼性の高い動作を保証します。

SCA3300-D01は、高い安定性、信頼性、品質要求のために設計、製造、テストされています。 このコンポーネントは、広い温度範囲と振動に対して極めて安定した出力を持っています。 このコンポーネントは、いくつかの高度な自己診断機能を備え、SMD実装に適しており、RoHSおよびELV指令に適合しています。

特徴

  • 3軸(XYZ)加速度センサー
  • ユーザーが選択可能な測定モード
    ± 1.5g, ± 3g , ± 6g with 70 Hz LPF
    ± 1.5g with 10 Hz LPF
  • -40°C ~ +125°C 動作範囲
  • 3.0V ~ 3.6V 電源電圧
  • SPIデジタル・インターフェース
  • 豊富な自己診断機能
  • 超低ノイズ密度37μg/√Hz
  • 優れたオフセット安定性
  • サイズ 8.6×7.6×3.3mm(長さ×幅×高さ)
  • RoHS準拠の堅牢なDFLプラスチックパッケージ
  • 鉛フリーはんだ付けプロセスおよびSMD実装に最適
  • 実証済みの静電容量式3D-MEMS技術

用途

SCA3300-D01は、高い安定性と厳しい環境要件が要求されるアプリケーションを対象としています。

  • レベリング
  • 角度測定
  • 傾き補正
  • 慣性計測ユニット(IMU)
  • 動作解析と制御
  • ナビゲーションシステム

OSS-ECAL仕様

API関数

OSS-ECALのAPI関数は、基本的に定周期Thread(TASK)から関数コールされることを前提としています。

etSTS oSCA3300_CONFIG( void )

oSCA3300_CONFIG関数は、SCA3300-D01に合わせてMCUのSPI通信を設定するAPI関数です。本API関数は、AUTOSAR版にはありません。

戻り値etSTSOSS-ECALステータスコード
eSTS_FIN正常終了
eSTS_ERR_HAL_OTHERS_RUN他のアプリケーションがHAL実行中
eSTS_ERR_SPI_OBJECTSPIオブジェクト選択エラー
etSTS oSCA3300_START_UP( uint16* status )

oSCA3300_START_UP関数は、SCA3300-D01を設定し、Register STATUS[Bank0], STATUS[Bank1]の値を読み込み、読み込んだ値をstatus[0], status[1]に格納するAPI関数です。

SCA3300-D01の設定は、次の設定を行います。
– Step1 SW Reset
– Step2 1ms wait*
– Step3 Set Measurement mode
– Step4 15ms wait(Mode1, Mode2 and Mode3) or 100ms wait(Mode4)*
– Step5 Clear status summary
– Step6 Read status summary
– Step7 Ensure successful start-up

* wait計測は、この関数をコールするThread周期から計算するので、THREAD_OSS_ECAL_PERIOD [ms]にThread周期を設定してください。

Measurement mode設定は、oSCA3300.hのOP_MODEの設定値を基に設定します。この例では、Mode2に設定しています。
– Mode1 = iMODE1
– Mode2 = iMODE2
– Mode3 = iMODE3
– Mode4 = iMODE4

/* Select operation mode */
#define OP_MODE                 iMODE2
戻り値etSTSOSS-ECALステータスコード
eSTS_FIN正常終了
eSTS_EXE実行中
eSTS_ERR_DIAGStep1 to Step5 CRC check error
or
Step3 Return Status RS[1]:RS[0] != 1:1
Step5 Return Status RS[1]:RS[0] != 1:1
Step6 Return Status RS[1]:RS[0] != 1:1
Step7 Return Status RS[1]:RS[0] != 0:1
eSTS_ERR_SPI_OBJECTSPIオブジェクト選択エラー
eSTS_ERR_HAL_SPIHAL SPIエラー
eSTS_ERR_HAL_OTHERS_RUN他のアプリケーションがHAL実行中
引数 OUTuint16* statusRegister STATUSの値Register STATUS[Bank0], STATUS[Bank1]から読み込んだ値[23:8]をstatus[0], status[1]に保存
etSTS oSCA3300_READ_ACC( etBANK bank, stSCA3300_ACC* acc )

oSCA3300_READ_ACC関数は、指定したbankのRegister ACC_X[bank], ACC_Y[bank], ACC_Z[bank]の値を読み込み、読み込んだ値[23:8]をMode設定に基づいて加速度に変換し、acc.acc_x[bank], acc.acc_y[bank], acc.acc_z[bank]に格納するAPI関数です。

戻り値etSTSOSS-ECALステータスコード
eSTS_FIN正常終了
eSTS_ERR_MIN最小加速度エラー(エラー時、最小加速度)
eSTS_ERR_MAX最大加速度エラー(エラー時、最大加速度)
eSTS_ERR_DIAGReturn Status RS[1]:RS[0] != 0:1(Normal operation)
or
CRC check error
eSTS_ERR_SPI_OBJECTSPIオブジェクト選択エラー
eSTS_ERR_HAL_SPIHAL SPIエラー
eSTS_ERR_HAL_OTHERS_RUN他のアプリケーションがHAL実行中
引数 INetBANK bankRegister Bankの設定値typedef enum
{
eBANK0 = 0x01, /* Bank #0 */
eBANK1 = 0x02, /* Bank #1 */
eBANK01 = 0x03 /* Bank #0,1 */
}etBANK;
引数 OUTstSCA3300_ACC* accRegister
ACC_X[bank],
ACC_Y[bank],
ACC_Z[bank]
の加速度
Register ACC_X[bank], ACC_Y[bank], ACC_Z[bank]から読み込んだ値[23:8]をMode設定に基づいて加速度に変換し、acc.acc_x[bank], acc. acc.acc_y[bank], acc.acc_z[bank]に保存
typedef struct
{
float32 acc_x[iSCA3300_BANK_NUM]; /* ACC_X */
float32 acc_y[iSCA3300_BANK_NUM]; /* ACC_Y */
float32 acc_z[iSCA3300_BANK_NUM]; /* ACC_Z */
}stSCA3300_ACC;
etSTS oSCA3300_READ_STO( etBANK bank, float32* sto )

oSCA3300_READ_STO関数は、指定したbankのRegister STO[bank]の値を読み込み、読み込んだ値[23:8]をMode設定に基づいて加速度に変換し、sto[bank] に格納するAPI関数です。

戻り値etSTSOSS-ECALステータスコード
eSTS_FIN正常終了
eSTS_ERR_DIAGReturn Status RS[1]:RS[0] != 0:1(Normal operation)
or
CRC check error
eSTS_ERR_SPI_OBJECTSPIオブジェクト選択エラー
eSTS_ERR_HAL_SPIHAL SPIエラー
eSTS_ERR_HAL_OTHERS_RUN他のアプリケーションがHAL実行中
引数 INetBANK bankRegister Bankの設定値typedef enum
{
eBANK0 = 0x01, /* Bank #0 */
eBANK1 = 0x02, /* Bank #1 */
eBANK01 = 0x03 /* Bank #0,1 */
}etBANK;
引数 OUTfloat32* stoRegister STO[bank]の加速度Register STO[bank]から読み込んだ値[23:8]をMode設定に基づいて加速度に変換し、sto[bank]に保存
etSTS oSCA3300_READ_TEMP( etBANK bank, float32* temp )

oSCA3300_READ_TEMP関数は、指定したbankのRegister TEMPERATURE[bank]の値を読み込み、読み込んだ値[23:8]を温度に変換し、temp[bank] に格納するAPI関数です。

戻り値etSTSOSS-ECALステータスコード
eSTS_FIN正常終了
eSTS_ERR_DIAGReturn Status RS[1]:RS[0] != 0:1(Normal operation)
or
CRC check error
eSTS_ERR_MIN最小温度エラー(エラー時、最小温度)
eSTS_ERR_MAX最大温度エラー(エラー時、最大温度)
eSTS_ERR_SPI_OBJECTSPIオブジェクト選択エラー
eSTS_ERR_HAL_SPIHAL SPIエラー
eSTS_ERR_HAL_OTHERS_RUN他のアプリケーションがHAL実行中
引数 INetBANK bankRegister Bankの設定値typedef enum
{
eBANK0 = 0x01, /* Bank #0 */
eBANK1 = 0x02, /* Bank #1 */
eBANK01 = 0x03 /* Bank #0,1 */
}etBANK;
引数 OUTfloat32* tempRegister TEMPERATURE[bank]の温度Register TEMPERATURE[bank]から読み込んだ値[23:8]を温度に変換し、temp[bank]に保存
etSTS oSCA3300_READ_STATUS( etBANK bank, uint16* status )

oSCA3300_READ_STATUS関数は、指定したbankのRegister STATUS[bank]の値を読み込み、読み込んだ値[23:8]をstatus[bank]に格納するAPI関数です。

戻り値etSTSOSS-ECALステータスコード
eSTS_FIN正常終了
eSTS_ERR_DIAGReturn Status RS[1]:RS[0] != 0:1(Normal operation)
or
CRC check error
eSTS_ERR_SPI_OBJECTSPIオブジェクト選択エラー
eSTS_ERR_HAL_SPIHAL SPIエラー
eSTS_ERR_HAL_OTHERS_RUN他のアプリケーションがHAL実行中
引数 INetBANK bankRegister Bankの設定値typedef enum
{
eBANK0 = 0x01, /* Bank #0 */
eBANK1 = 0x02, /* Bank #1 */
eBANK01 = 0x03 /* Bank #0,1 */
}etBANK;
引数 OUTuint16* statusRegister STATUS[bank]の値Register STATUS[bank]から読み込んだ値[23:8]をstatus[bank]に保存
etSTS oSCA3300_READ_CMD( uint16* command )

oSCA3300_READ_CMD関数は、Register CMDの値を読み込み、読み込んだ値[23:8]をcommandに格納するAPI関数です。

戻り値etSTSOSS-ECALステータスコード
eSTS_FIN正常終了
eSTS_ERR_DIAGReturn Status RS[1]:RS[0] != 0:1(Normal operation)
or
CRC check error
eSTS_ERR_SPI_OBJECTSPIオブジェクト選択エラー
eSTS_ERR_HAL_SPIHAL SPIエラー
eSTS_ERR_HAL_OTHERS_RUN他のアプリケーションがHAL実行中
引数 OUTuint16* commandRegister CMDの値Register CMDから読み込んだ値[23:8]をcommandに保存
etSTS oSCA3300_WRITE_CMD( stSCA3300_CMD command )

oSCA3300_WRITE_CMD関数は、commandの値をRegister CMD[23:8]に書き込みするAPI関数です。

戻り値etSTSOSS-ECALステータスコード
eSTS_FIN正常終了
eSTS_ERR_DIAGReturn Status RS[1]:RS[0] != 0:1(Normal operation)
or
CRC check error
eSTS_ERR_SPI_OBJECTSPIオブジェクト選択エラー
eSTS_ERR_HAL_SPIHAL SPIエラー
eSTS_ERR_HAL_OTHERS_RUN他のアプリケーションがHAL実行中
引数 INstSCA3300_CMD commandRegister CMDの設定値typedef enum
{
eSCA3300_CMD_RD_ACC_X = 0x040000F7 /* Read ACC_X */
eSCA3300_CMD_RD_ACC_Y = 0x080000FD /* Read ACC_Y */
eSCA3300_CMD_RD_ACC_Z = 0x0C0000FB /* Read ACC_Z */
eSCA3300_CMD_RD_STO = 0x100000E9 /* Read STO (self-test output) */
eSCA3300_CMD_RD_TEMP = 0x140000EF /* Read Temperature */
eSCA3300_CMD_RD_STATUS = 0x180000E5 /* Read Status Summary */
eSCA3300_CMD_RD_CMD = 0x340000DF /* Read CMD*/
if( OP_MODE == iMODE1 )
eSCA3300_CMD_WR_MODE = 0xB400001F /* Change to mode1 */
elif( OP_MODE == iMODE2 )
eSCA3300_CMD_WR_MODE = 0xB4000102 /* Change to mode2 */
elif( OP_MODE == iMODE3 )
eSCA3300_CMD_WR_MODE = 0xB4000225 /* Change to mode3 */
else
eSCA3300_CMD_WR_MODE = 0xB4000338 /* Change to mode4 */
endif
eSCA3300_CMD_WR_PWD = 0xB400046B /* Set power down mode */
eSCA3300_CMD_WR_WU = 0xB400001F /* Wake up from power down mode */
eSCA3300_CMD_WR_SWR = 0xB4002098 /* SW Reset */
eSCA3300_CMD_RD_WHOAMI = 0x40000091 /* Read WHOAMI */
eSCA3300_CMD_RD_SERIAl1 = 0x640000A7 /* Read SERIAL1 */
eSCA3300_CMD_RD_SERIAl2 = 0x680000AD /* Read SERIAL2 */
eSCA3300_CMD_RD_BANK = 0x7C0000B3 /* Read current bank*/
eSCA3300_CMD_SW_BANK0 = 0xFC000073 /* Switch to bank #0 */
eSCA3300_CMD_SW_BANK1 = 0xFC00016E /* Switch to bank #1 */
}stSCA3300_CMD;
etSTS oSCA3300_READ_WHOAMI( uint8* whoami )

oSCA3300_READ_WHOAMI関数は、Register WHOAMIの値を読み込み、読み込んだ値[16:8]をwhoamiに格納するAPI関数です。

戻り値etSTSOSS-ECALステータスコード
eSTS_FIN正常終了
eSTS_ERR_DIAGReturn Status RS[1]:RS[0] != 0:1(Normal operation)
or
CRC check error
eSTS_ERR_SPI_OBJECTSPIオブジェクト選択エラー
eSTS_ERR_HAL_SPIHAL SPIエラー
eSTS_ERR_HAL_OTHERS_RUN他のアプリケーションがHAL実行中
引数 OUTuint8* whoamiRegister WHOAMIの値Register WHOAMIから読み込んだ値[16:8]をwhoamiに保存
etSTS oSCA3300_READ_SERIAL( uint32* serial )

oSCA3300_READ_SERIAL関数は、Register SERIAL1, SERIAL2の値を読み込み、SERIAL1の読み込んだ値[23:8]をserial[15:0]、SERIAL2の読み込んだ値[23:8]をserial[31:16]に格納するAPI関数です。

戻り値etSTSOSS-ECALステータスコード
eSTS_FIN正常終了
eSTS_ERR_DIAGReturn Status RS[1]:RS[0] != 0:1(Normal operation)
or
CRC check error
eSTS_ERR_SPI_OBJECTSPIオブジェクト選択エラー
eSTS_ERR_HAL_SPIHAL SPIエラー
eSTS_ERR_HAL_OTHERS_RUN他のアプリケーションがHAL実行中
引数 INuint32* serialRegister SERIAL1とSERIAL2の値Register SERIAL1, SERIAL2の値を読み込み、SERIAL1の読み込んだ値をserial[15:0]、SERIAL2の読み込んだ値をserial[31:16]をserialに保存

Sampleアプリケーション

OSS-ECALには、sampleフォルダ内にサンプルアプリケーションが含まれています。ここでは、そのアプリケーションの概要について説明いたします。OSS-ECALを皆様の製品プログラムに組み込む際の参考資料としてご活用ください。

StatevgSCA3300_COMMAND状態遷移条件処理概要API関数
Start-upiSCA3300_STARTUP1. 初回SCA3300-D01の初期設定oSCA3300_START_UP
MeasureiSCA3300_MEASUREMENT1. State Start up完了
2. vgSCA3300_COMMAND=iSCA3300_MEASUREMENT
3軸加速度計測oSCA3300_READ_ACC
Self-testiSCA3300_SELF_TEST1. vgSCA3300_COMMAND = iSCA3300_SELF_TEST次のStepをiPRC_SELF_TEST回行う
Step1 3軸加速度計測
Step2 Self test output
Step3 User application*
Step4 wait*

oSCA3300_READ_ACC
oSCA3300_READ_STO

Power downiSCA3300_POWER_DOWN1. vgSCA3300_COMMAND = iSCA3300_POWER_DOWNPower downoSCA3300_WRITE_CMD
ErroriSCA3300_ERROR1. API関数の戻り値がエラー値
2. Register STATUS[bank0] != 0
3. Register STATUS[bank1] != 0
Error処理*-*

* 製品プログラムで対応してください。

HALサポート

OSS-ECALのHAL対応は、次の通りです。(順次拡大中)尚、HAL対応は各電子部品のOSS-ECALページでご確認ください。尚、同じHALであってもVerやMCU、開発環境が異なると動作が合わない場合がありますので、ご注意ください。

メーカSDK/IDE ツールHAL名称VerHALNAMESupport
ArduinoArduino IDEArduino1.8.6ARDUINOX
ArmKeil MDK v6Mbed OS6.17.0MBEDX
DebianGNU/Linux10.3LinuxX
InfineonModusToolboxmtb-hal-cat12.4.3ModusToolboxX
NXPMCUXpresso SDKSDK_2.x_EVKB-IMXRT10502.16iMXRT1051B1052BX
NXPPlatformSDK_S32K1_2022_02AUTOSAR MCAL4.4MCALX
RenesasSynergy Software PackageHAL2.6.0SSPX
STMicroelectronicsSTM32CubeSTM32CubeF4V1.28.1STM32F4X
開発環境

OSS-ECAL開発時のMCUおよび開発環境は、次の通りです。

HALNAMEメーカ開発ボードMCUIDE
ARDUINOArduino1.Mega 2560 Rev3
2.Arduino Pro Mini 3.3V
ATmega2560
ATmega328P
Arduino IDE 2.3.3
MBEDSTMicroelectronicsSTM32 Nucleo-64 boardsSTM32F401RETxArm Keil Studio Cloud
LinuxBeagleBoardBeagleBone BlackTI AM335x
ModusToolboxInfineonCY8CPROTO-063-BLE PSoC 6 BLE Prototyping KitCYBLE-416045-02ModusToolbox
iMXRT1051B1052BNXPIMXRT1050-EVKBi.MX RT1050MCUXpresso IDE
MCALSTMicroelectronicsS32K144EVB-Q100S32K144S32 Design Studio for S32 Platform
SSPRenesasS7G2 SKR7FS7G27H3A01CFCe² studio for Renesas Synergy
STM32F4STMicroelectronicsSTM32 Nucleo-64 boardsSTM32F401RETxSTM32CubeIDE

File構成

フォルダ*ファイル概要
SCA3300_HALNAME_VERSION/samplesample.c (.cpp)サンプル・アプリケーション・プログラム
sample.hサンプル・アプリケーション・ヘッダ
SCA3300_HALNAME_VERSIONoSCA3300.c (.cpp)SCA3300-D01用OSS-ECALプログラム
oSCA3300.hSCA3300-D01用OSS-ECALヘッダ
oss_ecal.hOSS-ECAL 共通ヘッダ
SCA3300_ARDUINO.inoArduino用サンプル・アプリケーション・プログラム
oTypes.hAUTOSAR用typedefヘッダ
user_setting.c (.cpp)ユーザ設定定数・テーブル
user_setting.hユーザ設定ヘッダ
oHAL_i2c_stm32f4.cSTM32Cube FW_F4用HALプログラム
oHAL_i2c_stm32f4.hSTM32Cube FW_F4用HALヘッダ
readme.mdReadme
OSS-ECAL Terms of Use.txtOSS-ECAL利用条件

* HALNAMEは、HALサポートを参照してください。

OSS-ECAL ダウンロード

OSS-ECALのダウンロードは、英語版OSS-ECALサイトからお願いいたします。なお、ダウンロードを行う際は、英語版OSS-ECALサイトにログインしてから操作してください。

組込み方法

ユーザプログラムにOSS-ECALを組み込む方法

ユーザプログラムに複数のOSS-ECAL(同じMCU機能の電子部品)を組み込む方法

ユーザプログラムに複数のOSS-ECAL(異なるMCU機能の電子部品)を組み込む方法

ユーザプログラムに複数同じ電子部品を組み込む方法

電子部品の入れ替えによるユーザプログラムへの影響低減方法

注意事項

サンプル版OSS-ECALは、優先順位の異なるThread(Task)や割込みで用いることを前提としていません。下記の例のような使い方はしないでください。

例)同じADCグループに各センサーが割り当てられ、優先順位が異なる処理でOSS-ECAL APIを実行すると、正しい値を取得できない場合があります。
ADC Gr0 Ch0 温度センサ AD22100A 100ms周期 Thread(優先順位低)で温度取込み
ADC Gr0 Ch1 圧力センサ MPX5999D イベント割込み(優先順位高)で圧力取込み

OSS-ECAL Japanese
error: コンテンツは保護されている