精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

驅動LSM6DS3TR-C實現高效運動檢測與數據采集(3)----獲取傳感器數據

嵌入式單片機MCU開發 ? 來源:嵌入式單片機MCU開發 ? 作者:嵌入式單片機MCU開 ? 2023-11-14 09:59 ? 次閱讀

概述

一旦傳感器被正確初始化,可以通過SPI或I2C接口向傳感器發送讀取命令,并接收傳感器返回的數據。這個讀取過程包括獲取LSM6DS3TR傳感器提供的加速度計和陀螺儀數據,以及傳感器對應的溫度信息。
最近在弄ST和瑞薩RA的課程,需要樣片的可以加群申請:615061293 。

視頻教學

[https://www.bilibili.com/video/BV1CW4y197Zi/]

樣品申請

[https://www.wjx.top/vm/OhcKxJk.aspx#]

完整代碼下載

[https://download.csdn.net/download/qq_24312945/87921267]

獲取數據狀態

STATUS_REG (1Eh)是該傳感器的一個寄存器。在LSM6DS3TR中,STATUS_REG寄存器用于提供傳感器的狀態信息

參考程序的獲取狀態代碼如下所示。

對應的獲取函數如下。

獲取STATUS_REG (1Eh)函數如下所示。

#define LSM6DS3TRC_STATUS_REG    0x1E
/***************************************************************************************************************
LSM6DS3TRC Get data status
****************************************************************************************************************/
uint8_t LSM6DS3TRC_Get_Status(void)
{
    uint8_t buf[1] = {0};
    LSM6DS3TRC_ReadCommand(LSM6DS3TRC_STATUS_REG, buf, 1);
    return buf[0];
}

可以判斷如下地址來判斷溫度,加速度,陀螺儀數據新的數據是否獲取完畢。

#define LSM6DS3TRC_STATUS_TEMPERATURE    0x04
#define LSM6DS3TRC_STATUS_GYROSCOPE        0x02
#define LSM6DS3TRC_STATUS_ACCELEROMETER    0x01

獲取加速度數據

加速度傳感器中的"+-2g"、"+-4g"、"+-8g"、"+-16g"表示傳感器的測量范圍或量程,單位為"g",代表重力加速度。

"g"是地球表面上的重力加速度,大約等于9.8米/秒2。因此,傳感器的量程為"+-2g"意味著它可以測量從-2g到+2g的加速度范圍,即-19.6米/秒2到+19.6米/秒2。同樣地,"+-4g"的量程為-39.2米/秒2到+39.2米/秒2,"+-8g"的量程為-78.4米/秒2到+78.4米/秒2,"+-16g"的量程為-156.8米/秒2到+156.8米/秒2。

因此,這些不同的量程表示了傳感器可以測量的加速度范圍大小。選取適當的量程取決于應用的需求。如果預計測量的加速度值不會超過+-2g,那么選擇"+-2g"的傳感器就足夠了,而如果需要測量更大范圍的加速度,就需要選擇具有更高量程的傳感器。選擇合適的量程可以確保傳感器在測量過程中不會超出其最大測量范圍,從而提供準確的測量結果。

在參考代碼中,當STATUS_REG(0x1E)中的XLDA位為1時,表示已成功獲取加速度數據,可以進行讀取操作。

為了獲取完整的加速度X軸、Y軸和Z軸數據,可以連續讀取6個8位數據,這些數據來自線性加速度輸出寄存器,其值表示為一個16位的二進制補碼。

需要注意的是X軸,Y軸,Z軸的加速度數據都是16位的數據。

同時需要乘以一個縮放因子,這個因子是根據傳感器的靈敏度或靈敏度刻度確定的。

可以修改為如下所示的代碼。

#define LSM6DS3TRC_OUTX_L_XL        0x28
/***************************************************************************************************************
LSM6DS3TRC Get Acceleration Value
****************************************************************************************************************/
void LSM6DS3TRC_Get_Acceleration(uint8_t fsxl, float *acc_float)
{
    uint8_t buf[6];
    int16_t acc[3];
    LSM6DS3TRC_ReadCommand(LSM6DS3TRC_OUTX_L_XL, buf, 6);
    acc[0] = buf[1] < < 8 | buf[0];
    acc[1] = buf[3] < < 8 | buf[2];
    acc[2] = buf[5] < < 8 | buf[4];

    switch (fsxl)
    {
    case LSM6DS3TRC_ACC_FSXL_2G:
        acc_float[0] = ((float)acc[0] * 0.061f);
        acc_float[1] = ((float)acc[1] * 0.061f);
        acc_float[2] = ((float)acc[2] * 0.061f);
        break;

    case LSM6DS3TRC_ACC_FSXL_16G:
        acc_float[0] = ((float)acc[0] * 0.488f);
        acc_float[1] = ((float)acc[1] * 0.488f);
        acc_float[2] = ((float)acc[2] * 0.488f);
        break;

    case LSM6DS3TRC_ACC_FSXL_4G:
        acc_float[0] = ((float)acc[0] * 0.122f);
        acc_float[1] = ((float)acc[1] * 0.122f);
        acc_float[2] = ((float)acc[2] * 0.122f);
        break;

    case LSM6DS3TRC_ACC_FSXL_8G:
        acc_float[0] = ((float)acc[0] * 0.244f);
        acc_float[1] = ((float)acc[1] * 0.244f);
        acc_float[2] = ((float)acc[2] * 0.244f);
        break;
    }
}

獲取陀螺儀數據

在參考代碼中,當STATUS_REG(0x1E)中的GDA位為1時,表示已成功獲取陀螺儀數據,可以進行讀取操作。

為了獲取完整的陀螺儀X軸、Y軸和Z軸數據,可以連續讀取6個8位數據,這些數據來自陀螺儀輸出寄存器,其值表示為一個16位的二進制補碼。

需要注意的是X軸,Y軸,Z軸的陀螺儀數據都是16位的數據。 同時需要乘以一個縮放因子,這個因子是根據傳感器的靈敏度或靈敏度刻度確定的。

可以修改為如下所示的代碼。

#define LSM6DS3TRC_OUTX_L_G        0x22
/***************************************************************************************************************
LSM6DS3TRC Get Gyroscope Value
****************************************************************************************************************/
void LSM6DS3TRC_Get_Gyroscope(uint8_t fsg, float *gry_float)
{
    uint8_t buf[6];
    int16_t gry[3];
    LSM6DS3TRC_ReadCommand(LSM6DS3TRC_OUTX_L_G, buf, 6);
    gry[0] = buf[1] < < 8 | buf[0];
    gry[1] = buf[3] < < 8 | buf[2];
    gry[2] = buf[5] < < 8 | buf[4];
    switch (fsg)
    {
    case LSM6DS3TRC_GYR_FSG_250:
        gry_float[0] = ((float)gry[0] * 8.750f);
        gry_float[1] = ((float)gry[1] * 8.750f);
        gry_float[2] = ((float)gry[2] * 8.750f);
        break;
    case LSM6DS3TRC_GYR_FSG_500:
        gry_float[0] = ((float)gry[0] * 17.50f);
        gry_float[1] = ((float)gry[1] * 17.50f);
        gry_float[2] = ((float)gry[2] * 17.50f);
        break;
    case LSM6DS3TRC_GYR_FSG_1000:
        gry_float[0] = ((float)gry[0] * 35.00f);
        gry_float[1] = ((float)gry[1] * 35.00f);
        gry_float[2] = ((float)gry[2] * 35.00f);
        break;
    case LSM6DS3TRC_GYR_FSG_2000:
        gry_float[0] = ((float)gry[0] * 70.00f);
        gry_float[1] = ((float)gry[1] * 70.00f);
        gry_float[2] = ((float)gry[2] * 70.00f);
        break;
    }
}

獲取溫度數據

在參考代碼中,當STATUS_REG(0x1E)中的TDA位為1時,表示已成功獲取陀螺儀數據,可以進行讀取操作。

為了獲取完整的溫度數據,可以連續讀取2個8位數據。

對應的寄存器為OUT_TEMP_L (20h), OUT_TEMP_H (21h)。

對應溫度轉換如下所示。

所以獲取到的數據需要除以256在加上25度,可以修改為如下所示的代碼。

#define LSM6DS3TRC_OUT_TEMP_L    0x20
float LSM6DS3TRC_Get_Temperature(void)
{
    uint8_t buf[2];
    int16_t temp;
    LSM6DS3TRC_ReadCommand(LSM6DS3TRC_OUT_TEMP_L, buf, 2);
    temp = buf[1] < < 8 | buf[0];
    return (((float)temp / 256.0) + 25.0);
}

程序代碼

/* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    uint8_t status;
    status = LSM6DS3TRC_Get_Status();

    if (status & LSM6DS3TRC_STATUS_ACCELEROMETER)
    {
      float acc[3] = {0};
      LSM6DS3TRC_Get_Acceleration(LSM6DS3TRC_ACC_FSXL_2G, acc);
      printf("rnacc:X:%2f,tY:%2f,tZ:%2fr", acc[0], acc[1], acc[2]);
    }
    if (status & LSM6DS3TRC_STATUS_GYROSCOPE)
    {
      float gyr[3] = {0};
      LSM6DS3TRC_Get_Gyroscope(LSM6DS3TRC_GYR_FSG_2000, gyr);
      printf("rgyr:X:%4.2f,tY:%4.2f,tZ:%4.2fr", gyr[0], gyr[1], gyr[2]);
    }
    if (status & LSM6DS3TRC_STATUS_TEMPERATURE)
    {
      printf("rtemp:%2frn", LSM6DS3TRC_Get_Temperature());
    }
    HAL_Delay(100);                
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }

演示

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 傳感器
    +關注

    關注

    2541

    文章

    49582

    瀏覽量

    745960
  • mems
    +關注

    關注

    128

    文章

    3854

    瀏覽量

    189703
  • 陀螺儀
    +關注

    關注

    44

    文章

    763

    瀏覽量

    98069
  • 數據采集
    +關注

    關注

    38

    文章

    5343

    瀏覽量

    112933
  • 運動檢測
    +關注

    關注

    0

    文章

    31

    瀏覽量

    12545
收藏 人收藏

    評論

    相關推薦

    驅動LSM6DS3TR-C實現高效運動檢測數據采集(1)----獲取ID

    本文將介紹如何驅動和利用LSM6DS3TR-C傳感器實現精確的運動感應功能。LSM6DS3TR-C
    的頭像 發表于 11-13 15:45 ?1650次閱讀
    <b class='flag-5'>驅動</b><b class='flag-5'>LSM6DS3TR-C</b><b class='flag-5'>實現</b><b class='flag-5'>高效</b><b class='flag-5'>運動檢測</b>與<b class='flag-5'>數據采集</b>(1)----<b class='flag-5'>獲取</b>ID

    驅動LSM6DS3TR-C實現高效運動檢測數據采集(6)----FIFO數據讀取與配置

    LSM6DS3TR-C是STMicroelectronics公司推出的iNEMO慣性模塊,集成了三軸加速度計和三軸陀螺儀,具備低功耗、強大的運動檢測功能。該傳感器支持多種操作模式,并內置FIFO
    的頭像 發表于 07-18 10:58 ?663次閱讀
    <b class='flag-5'>驅動</b><b class='flag-5'>LSM6DS3TR-C</b><b class='flag-5'>實現</b><b class='flag-5'>高效</b><b class='flag-5'>運動檢測</b>與<b class='flag-5'>數據采集</b>(<b class='flag-5'>6</b>)----FIFO<b class='flag-5'>數據</b>讀取與配置

    驅動LSM6驅動LSM6DS3TR-C實現高效運動檢測數據采集(7)----MotionFX庫解析空間坐標DS3TR-C實現高效運動檢測數據

    本文將探討如何使用MotionFX庫解析空間坐標。MotionFX庫是一種用于傳感器融合的強大工具,可以將加速度計、陀螺儀和磁力計的數據融合在一起,實現精確的姿態和位置估計。本文將介紹如何初始化
    的頭像 發表于 07-18 11:02 ?714次閱讀
    <b class='flag-5'>驅動</b><b class='flag-5'>LSM6</b><b class='flag-5'>驅動</b><b class='flag-5'>LSM6DS3TR-C</b><b class='flag-5'>實現</b><b class='flag-5'>高效</b><b class='flag-5'>運動檢測</b>與<b class='flag-5'>數據采集</b>(7)----MotionFX庫解析空間坐標<b class='flag-5'>DS3TR-C</b><b class='flag-5'>實現</b><b class='flag-5'>高效</b><b class='flag-5'>運動檢測</b>與<b class='flag-5'>數據</b>采

    lsm6ds3tr-c傳感器集合模式無法使用的原因?

    (LSM6DS3TR_SLV0_ADD, 0x59, 2);//即將寫入_讀取的寄存bsp_spi_write(LSM6DS3TR_SLV0_SUBADD, 0x01, 2);//無抽取,1個外部
    發表于 03-07 06:26

    LSM6DS3TR-C使用時工作電流比datasheet上大很多是什么原因?

    使用場景是LSM6DS3TR-C通過SPI一拖四連接單片機,一共有四路這樣的一拖四。 測試時發現電流很大,感覺有點不對,編寫程序使LSM6DS3TR-C間隔5s一個一個使能,會發現穩壓源的輸出電流從
    發表于 03-07 08:08

    請問LSM6DS3TRLSM6DS3TR-C兩個型號能否完全兼容?

    LSM6DS3TR停產買不到了,準備切換LSM6DS3TR-C型號使用。 請問兩者有什么差別?能否直接替換?有成功替換案例嗎?
    發表于 03-14 06:40

    LSM6DS3TR-C數據讀取異常是安利的問題?怎么處理?

    我在使用lsm6ds3tr-c 6傳感器時發現,讀取的溫度以及角速度值異常,配置為官方lsm6ds3tr_c_read_data_polling.c文件中
    發表于 03-19 08:15

    LSM6DS3TR-C角速度輸出為0是什么原因導致的?

    LSM6DS3TR-C在長時間休眠后(6小時以上),角速度輸出為0,短時間休眠輸出正常,這是什么問題?
    發表于 03-21 06:27

    LSM6DS3TR-C的FIFO讀取數據出錯是什么原因造成的?怎么解決?

    使用LSM6DS3TR-C的FIFO,先獲取了FIFO的WaterM標志,該標志置位之后再去獲取當前存在FIFO緩存的數據長度,再去讀取FIFO中對應長度的
    發表于 03-27 06:05

    請問LSM6DS3TR-C有沒有windows下的測試工具?

    LSM6DS3TR-C有沒有windows下的測試工具
    發表于 05-20 06:22

    供應LSM6DSLTR LSM6DSL 傳感器 LSM6DSMTR LSM6DSM

    。相比目前最新的 LSM6DS3LSM6DS3H 器件,這些器件的功耗減少多達 50%。 符合最常見的創新型操作系統要求,可幫助開發人員實現常見移動平臺的個性化和省電功能的價值最大化。 這些
    發表于 07-15 11:46

    LSM6DS3的應用筆記

    專門設計,可在硬件上實現大幅運動檢測、傾斜度檢測、硬件計步功能、時間戳,并支持對外部磁力計的數據采集,且支持鐵磁校準 (硬鐵修正,軟鐵修正)。LSM
    發表于 09-13 08:23

    驅動LSM6DS3TR-C實現高效運動檢測數據采集(2)----配置濾波

    LSM6DS3TR-C中,加速度計和陀螺儀可以獨立地開啟/關閉,并且可以擁有不同的ODR和功耗模式。 LSM6DS3TR-C有三種可用的操作模式: ● 僅加速度計活動,陀螺儀處于斷電狀態 ● 僅陀螺儀活動,加速度計處于斷電狀態 ● 加速度計和陀螺儀
    的頭像 發表于 11-14 09:45 ?697次閱讀
    <b class='flag-5'>驅動</b><b class='flag-5'>LSM6DS3TR-C</b><b class='flag-5'>實現</b><b class='flag-5'>高效</b><b class='flag-5'>運動檢測</b>與<b class='flag-5'>數據采集</b>(2)----配置濾波<b class='flag-5'>器</b>

    驅動LSM6DS3TR-C實現高效運動檢測數據采集(4)----上報匿名上位機實現可視化

    LSM6DS3TR-C是單芯片“3軸陀螺儀 + 3軸加速度計”的慣性 測量單元(IMU), 五種種可選滿量程的陀螺儀(125/250/500/1000/2000 dps)和加速度計(2/4/8/16
    的頭像 發表于 11-14 10:05 ?657次閱讀
    <b class='flag-5'>驅動</b><b class='flag-5'>LSM6DS3TR-C</b><b class='flag-5'>實現</b><b class='flag-5'>高效</b><b class='flag-5'>運動檢測</b>與<b class='flag-5'>數據采集</b>(4)----上報匿名上位機<b class='flag-5'>實現</b>可視化

    驅動LSM6DS3TR-C實現高效運動檢測數據采集(5)----姿態解算

    lsm6ds3trc包含三軸陀螺儀與三軸加速度計。 姿態有多種數學表示方式,常見的是四元數,歐拉角,矩陣和軸角。他們各自有其自身的優點,在不同的領域使用不同的表示方式。在四軸飛行中使用到了四元數
    的頭像 發表于 11-14 10:11 ?587次閱讀
    <b class='flag-5'>驅動</b><b class='flag-5'>LSM6DS3TR-C</b><b class='flag-5'>實現</b><b class='flag-5'>高效</b><b class='flag-5'>運動檢測</b>與<b class='flag-5'>數據采集</b>(5)----姿態解算