0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何通過SPI方式讀取BMI088傳感器數(shù)據(jù)

454398 ? 來源:一板網(wǎng) ? 作者:天南地北客 ? 2020-10-28 16:13 ? 次閱讀

BMI088傳感器是一款六軸傳感器模塊,內(nèi)部帶有一個(gè)16位的加速度傳感器模塊和一個(gè)16位的陀螺儀模塊。該傳感器支持SPI和I2C接口。在本篇文章中,我們將使用NUCLEO-G070RB開發(fā)板通過SPI方式讀取BMI088傳感器的數(shù)據(jù),并通過串口打印輸出。

所需的組件

● NUCLEO-G070RB開發(fā)板

● YBX-BMI088(SPI)加速度傳感器模塊(淘寶鏈接)

● 連接跳線

● Micro USB線纜

連接方式

以下是NUCLEO-G070RB開發(fā)板與BMI088模塊的連接方式:

BMI088模塊連接到NUCLEO-G070RB的SPI1接口,對應(yīng)的引腳分別是PA5(SCK)、PA6(MISO)和PA7(MOSI),加速度計(jì)的片選引腳CS1連接到PB0,陀螺儀的片選引腳CS2連接到PB3。BMI088模塊的VCC連接到+5V引腳,GND引腳連接到NUCLEO-G070RB的任意GND引腳。

代碼

首先我們使用STM32CubeMX工具生成工程文件,根據(jù)硬件連接方式選擇引腳的功能,然后啟用SPI1通訊。SPI1選擇全雙工主機(jī)模式(Full-Duplex Master),硬件NSS信號(hào)選擇Disable。在參數(shù)設(shè)置中,數(shù)據(jù)位大小選擇8位,MSB優(yōu)先。選擇合適的分頻系數(shù)。在無法進(jìn)行通訊的情況下,可以適當(dāng)降低SPI1外設(shè)的頻率。

生成KEIL工程后,接下來我們需要將BOSCH官方提供的BMI088驅(qū)動(dòng)集成到工程里面。

首先,將 bmi085.c、bmi085.h、bmi088.c、bmi088.h、bmi08a.c、bmi08g.c、bmi08x_defs.h以及bmi08x.h文件復(fù)制到工程所在的目錄,然后添加到工程中。在bmi08x_defs.h使能以下宏定義來啟用BMI088功能。

#ifndef BMI08X_ENABLE_BMI088

#define BMI08X_ENABLE_BMI088 1

#endif

在main.c文件中包含以下頭文件:

#include “bmi08x.h”

#include “bmi088.h”

然后定義一個(gè)bmi08x結(jié)構(gòu)體,該結(jié)構(gòu)體定義了使用的是I2C還是SPI接口,以及讀寫操作所需的函數(shù)指針。

struct bmi08x_dev dev = {

.accel_id = CSB1_Pin,

.gyro_id = CSB2_Pin,

.intf = BMI08X_SPI_INTF,

.read = &stm32_spi_read,//user_spi_read,

.write = &stm32_spi_write,//user_spi_write,

.delay_ms = &HAL_Delay//user_delay_milli_sec

};

接下來,初始化BMI088傳感器,設(shè)置加速計(jì)和陀螺儀的量程、帶寬和工作模式等。然后使用以下函數(shù)讀取BMI088的傳感器數(shù)據(jù):

/* Read the sensor data into the sensor data instance */

rslt = bmi08a_get_data(&user_accel_bmi088, &dev);

/* Read the sensor data into the sensor data instance */

rslt = bmi08g_get_data(&user_gyro_bmi088, &dev);

將傳感器數(shù)據(jù)打印輸出至串口:

printf(“x:%d”,user_accel_bmi088.x);

printf(“\t”);

printf(“y:%d”,user_accel_bmi088.y);

printf(“\t”);

printf(“z:%d”,user_accel_bmi088.z);

printf(“\t”);

printf(“x:%d”,user_gyro_bmi088.x);

printf(“\t”);

printf(“y:%d”,user_gyro_bmi088.y);

printf(“\t”);

printf(“z:%d”,user_gyro_bmi088.z);

printf(“\t”);

rslt = bmi08a_get_sensor_temperature(&dev,&bmi08x_sensor_temp);

if (rslt == BMI08X_OK)

{

printf(“Temp:%.3f”, bmi08x_sensor_temp/1000.0);

}

else

{

printf(“BMI088 Get Sensor Temperature Error\n”);

}

printf(“\n”);

輸出結(jié)果

將程序下載到NUCLEO-G070開發(fā)板中,運(yùn)行程序,串口監(jiān)視器將顯示接收到的數(shù)據(jù):

編輯:hfy

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 傳感器
    +關(guān)注

    關(guān)注

    2541

    文章

    49963

    瀏覽量

    747562
  • 陀螺儀
    +關(guān)注

    關(guān)注

    44

    文章

    768

    瀏覽量

    98191
  • 加速度傳感器
    +關(guān)注

    關(guān)注

    12

    文章

    465

    瀏覽量

    55050
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    傳感器數(shù)據(jù)怎么傳到云平臺(tái)

    傳感器數(shù)據(jù)傳到云平臺(tái),通??梢?b class='flag-5'>通過以下幾種方式實(shí)現(xiàn): 1. 直接連接 網(wǎng)絡(luò)接口 :傳感器可以通過
    的頭像 發(fā)表于 09-07 10:59 ?340次閱讀

    LM95071 SPI/MICROWIRE 13位帶符號(hào)溫度傳感器數(shù)據(jù)

    電子發(fā)燒友網(wǎng)站提供《LM95071 SPI/MICROWIRE 13位帶符號(hào)溫度傳感器數(shù)據(jù)表.pdf》資料免費(fèi)下載
    發(fā)表于 08-14 10:46 ?0次下載
    LM95071 <b class='flag-5'>SPI</b>/MICROWIRE 13位帶符號(hào)溫度<b class='flag-5'>傳感器</b><b class='flag-5'>數(shù)據(jù)</b>表

    LM74 SPI/Microwire12位溫度傳感器數(shù)據(jù)

    電子發(fā)燒友網(wǎng)站提供《LM74 SPI/Microwire12位溫度傳感器數(shù)據(jù)表.pdf》資料免費(fèi)下載
    發(fā)表于 08-14 09:50 ?0次下載
    LM74 <b class='flag-5'>SPI</b>/Microwire12位溫度<b class='flag-5'>傳感器</b><b class='flag-5'>數(shù)據(jù)</b>表

    stm32和傳感器進(jìn)行通信,為什么返回的數(shù)據(jù)基本是0呢?

    本人使用的是stm32和傳感器進(jìn)行通信,再設(shè)置好SPI的基礎(chǔ)設(shè)置后,去讀取x軸的陀螺儀角速度,為什么返回的數(shù)據(jù)基本是0呢?
    發(fā)表于 01-02 06:10

    用STM32單片機(jī)與ADIS16488通過SPI通信,讀取數(shù)據(jù)時(shí)好時(shí)壞的原因?

    SPI讀取傳感器的PROD_ID,按照手冊上寫的,如果讀取為0X4068,則代表SPI協(xié)議讀取
    發(fā)表于 01-01 07:47

    在和ADIS16460慣導(dǎo)SPI通信時(shí),讀取狀態(tài)/錯(cuò)誤的狀態(tài),出現(xiàn)傳感器超出范圍應(yīng)該怎么解決?

    如圖所示,在和ADIS16460慣導(dǎo)SPI通信時(shí)候,讀取狀態(tài)/錯(cuò)誤的狀態(tài),出現(xiàn)傳感器超出范圍,應(yīng)該怎么解決?目前是product_id、溫度值讀取上來
    發(fā)表于 12-28 07:49

    adis16488讀取傳感器數(shù)據(jù)太快,數(shù)據(jù)會(huì)變0或固定數(shù)是什么原因?

    rst,拉高后,等待500ms,讀取模塊id,判斷id正確。不對模塊做任何配置,開一個(gè)timer定時(shí)讀取10軸傳感器數(shù)據(jù)。 按照手冊連接的電路,供電3.3v。 請問有可能是什么原因
    發(fā)表于 12-28 07:38

    ADIS16488為什么無法讀取數(shù)據(jù)?

    我使用F28335與ADIS16488通過SPI通信,連接圖和官方手冊一樣,供電為3.3V,先去用SPI讀取傳感器的PROD_ID,按照手冊
    發(fā)表于 12-28 07:35

    ADXL375為什么無法讀取XYZ數(shù)據(jù)?

    通過FPGA實(shí)現(xiàn)SPI 4線方式對芯片進(jìn)行讀寫,目前可以讀取設(shè)備ID,將寄存的配置數(shù)據(jù)寫入后,
    發(fā)表于 12-28 06:33

    通過SPI如何讀取ADE7753的電壓、電流數(shù)據(jù)?

    小白,請教! 通過SPI如何讀取ADE7753的電壓、電流數(shù)據(jù)?如何轉(zhuǎn)換數(shù)據(jù)通過程序?qū)崿F(xiàn)得到
    發(fā)表于 12-27 07:12

    傳感器現(xiàn)場總線及無線傳輸原理

    傳感器現(xiàn)場總線和無線傳輸技術(shù)是現(xiàn)代傳感器應(yīng)用中常用的兩種數(shù)據(jù)傳輸方式。傳感器現(xiàn)場總線是一種通過
    的頭像 發(fā)表于 12-19 17:50 ?805次閱讀

    【ELF 1開發(fā)板試用】+傳感器檢測

    方式來工作,其設(shè)備地址為 0x38,它的測量范圍是: 0- 100%RH,-40- 85℃。 溫濕度傳感器所處的位置如圖1所示,其電路見圖2所示。 圖1溫濕度傳感器 圖2傳感器
    發(fā)表于 11-29 11:59

    驅(qū)動(dòng)LSM6DS3TR-C實(shí)現(xiàn)高效運(yùn)動(dòng)檢測與數(shù)據(jù)采集(3)----獲取傳感器數(shù)據(jù)

    一旦傳感器被正確初始化,可以通過SPI或I2C接口向傳感器發(fā)送讀取命令,并接收傳感器返回的
    的頭像 發(fā)表于 11-14 09:59 ?639次閱讀
    驅(qū)動(dòng)LSM6DS3TR-C實(shí)現(xiàn)高效運(yùn)動(dòng)檢測與<b class='flag-5'>數(shù)據(jù)</b>采集(3)----獲取<b class='flag-5'>傳感器</b><b class='flag-5'>數(shù)據(jù)</b>

    MODBUS協(xié)議傳感器讀取數(shù)據(jù)失敗是什么原因?

    前提:用STM32單片機(jī)串口讀取RS232接口IMU傳感器數(shù)據(jù)傳感器與單片機(jī)之間的連接使用232轉(zhuǎn)TTL。(相關(guān)電路工作正常) 我的操作:按照數(shù)
    發(fā)表于 11-10 06:42

    用STM32F429的SPI采集傳感器數(shù)據(jù)時(shí),利用中斷讀取數(shù)據(jù)不夠是為什么?

    用STM32F429的SPI采集傳感器數(shù)據(jù)時(shí),利用中斷讀取,將讀取數(shù)據(jù)寫入內(nèi)存卡,采樣率為20
    發(fā)表于 09-25 08:08