博世加速度計BMA400設計指南

關鍵字 :BOSCHBMA400BSTSensorMEMSAcc

介紹

本文檔是使用博世傳感器技術公司的BMA400加速度計設計的參考指南。

共同特性

特性概覽見下表:


關鍵特性

  • LGA封裝(12引腳),尺寸2mm x 2mm x 0.95mm
  • 超低功耗:正常模式下3.5μA@800Hz至14μA@800Hz(可配置)
  • 低功耗模式下0.8μA@25Hz至1.2μA@25Hz(可配置)
  • 抗混疊:正常模式下連續採樣(無工作周期)
  • 可配置的加速度範圍 ±2g/±4g/±8g/±16g
  • 可配置的輸出數據率:12.5Hz至800Hz(正常模式)
  • 1KB FIFO
  • 自動低功耗/自動喚醒
  • 活動/非活動檢測
  • 計步器(整體設備電流消耗4μA)
  • 活動識別(步行、跑步、靜止站立)
  • 方向檢測
  • 輕敲/雙擊
  • 自由落體檢測
  • 可穿戴設備、定位


產品差異

BMA400是博世傳感器技術中唯一具有超低功耗特性的產品。關鍵參數列在下表中。


參考設計

見下圖,典型用例的完整原理圖:

Note:
  1. 強烈推薦使用SPI,因為其低電流消耗。如果應用I2C接口,上拉電阻將消耗比BMA400超低功耗更多的電流。
  2. MCU的VDDIO和BMA400應該連接到相同的電源。
  3. 如果MCU的GPIO1和GPIO2連接到BMA400的INT1/INT2,則應配置為輸入。
  4. 如果使用I2C接口(即使不推薦),將CSB連接到VDDIO以防止CSB引腳上的不必要電平跳變,這可能會在ESD測試期間使BMA400從I2C模式切換到SPI模式。
下表為材料清單:


布局建議

由於BMA400傳感器家族包含封裝內微小的機械結構,在布局階段必須小心,以確保最佳性能。完整的處理和焊接指南可以在博世傳感器技術公司的網站上找到。

以下是BMA400加速度計的典型PCB Layout:


Note:
  1. 傳感器下方無通孔。
  2. 在頂層,傳感器安裝的位置下方無銅;而在雙層PCB的第二層(底層),歡迎使用地線銅以防止電磁干擾。
  3. 走線應向外扇出,不在傳感器內部。
  4. 在傳感器區域,第二層(雙層PCB的底層)上沒有走線;當第二層有地線銅時,走線可以在第三層(和第四/五層...)上;但要將高頻或大電流信號遠離傳感器區域,從上到下。


製造注意事項


首次上電

首次為傳感器供電後,初始規格將測試與設備的通信。這可以通過簡單地讀取寄存器0x00中的Chip_id來完成,預期讀值為0X90。為了正確初始化設備,用戶必須在硬體設計期間決定使用哪種接口(I2C或SPI)。上電後,BMA400默認為I2C模式,直到在CSB引腳上檢測到上升沿,然後BMA400將切換到SPI模式,直到下次軟復位或上電復位。因此,一旦BMA400連接到SPI接口的主機,首先應在CSB引腳上觸發上升沿,這可以通過讀取CHIPID寄存器來實現。對於I2C連接,將CSB引腳直接或通過電阻拉到VDDIO將防止BMA400在運行或ESD期間切換到SPI模式。對於SPI讀取,從BMA400接收到的第一個字節始終是一個虛擬字節,應該跳過。有價值信息從第二字節開始。以下是使用COINES軟體作為主機執行CHIPID讀取的一些示例代碼。

* @brief This internal API is used to initializes the bma400 sensor with default

* settings like power mode and OSRS settings
*
* @param[in] void
*
* @return void
*
*/
static void init_bma400(void)
{
int8_t rslt;
rslt = bma400_init(&bma400dev);
if (rslt == BMA400_OK)
{
printf("BMA400 Initialization Success!\n");
printf("Chip ID 0x%x\n", bma400dev.chip_id);
}
else
{
print_rslt(rslt);
exit(COINES_E_FAILURE);
}
coines_delay_msec(100);
}
/********************** Global function definitions ************************/
/*!
* @brief This API is the entry point, Call this API before using other APIs.
* This API reads the chip-id of the sensor which is the first step to
* verify the sensor and updates the trim parameters of the sensor.
*/
int8_t bma400_init(struct bma400_dev *dev)
{
int8_t rslt;
uint8_t chip_id = 0;

/* Check for null pointer in the device structure*/
rslt = null_ptr_check(dev);
/* Proceed if null check is fine */
if (rslt == BMA400_OK) {
/* Initial power-up time */
dev->delay_ms(5);
/* Assigning dummy byte value */
if (dev->intf == BMA400_SPI_INTF) {
/* Dummy Byte availability */
dev->dummy_byte = 1;
/* Dummy read of Chip-ID in SPI mode */
rslt = bma400_get_regs(BMA400_CHIP_ID_ADDR, &chip_id, 1, dev);
} else {
dev->dummy_byte = 0;
}
if (rslt == BMA400_OK) {
/* Chip ID of the sensor is read */
rslt = bma400_get_regs(BMA400_CHIP_ID_ADDR, &chip_id, 1, dev);
/* Proceed if everything is fine until now */
if (rslt == BMA400_OK) {
/* Check for chip id validity */
if (chip_id == BMA400_CHIP_ID) {
/* Store the chip ID in dev structure */
dev->chip_id = chip_id;
} else {
rslt = BMA400_E_DEV_NOT_FOUND;
}
}
}
}
return rslt;
}​

★博文內容均由個人提供,與平台無關,如有違法或侵權,請與網站管理員聯繫。

★文明上網,請理性發言。內容一周內被舉報5次,發文人進小黑屋喔~

評論