在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

陀螺儀LSM6DSV16X與AI集成(5)----6D方向檢測功能

嵌入式單片機MCU開發 ? 來源:嵌入式單片機MCU開發 ? 作者:嵌入式單片機MCU開 ? 2024-01-09 16:14 ? 次閱讀

概述

陀螺儀通常可以讀取三個方向上的旋轉,即繞X軸、Y軸和Z軸的旋轉。每個方向上的旋轉包括正向旋轉和反向旋轉,因此一共有六個位置。這六個位置分別是:1.X軸正向旋轉、2.X軸反向旋轉、3.Y軸正向旋轉、4.Y軸反向旋轉、5.Z軸正向旋轉、6.Z軸反向旋轉 通過檢測陀螺儀在每個方向上的旋轉,可以確定物體的旋轉姿態和方向,從而用于導航、飛行控制等應用。

最近在弄ST和瑞薩RA的課程,需要樣片的可以加群申請:615061293 。

視頻教學

[https://www.bilibili.com/video/BV1jw41137Zo/

樣品申請

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

源碼下載

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

生成STM32CUBEMX

用STM32CUBEMX生成例程,這里使用MCU為STM32WB55RG。 配置時鐘樹,配置時鐘為32M。

串口配置

查看原理圖,PB6和PB7設置為開發板的串口。

配置串口。

IIC配置

配置IIC為快速模式,速度為400k。

CS和SA0設置

串口重定向

打開魔術棒,勾選MicroLIB

在main.c中,添加頭文件,若不添加會出現 identifier "FILE" is undefined報錯。

/* USER CODE BEGIN Includes */
#include "stdio.h"
/* USER CODE END Includes */

函數聲明和串口重定向:

/* USER CODE BEGIN PFP */
int fputc(int ch, FILE *f){
    HAL_UART_Transmit(&huart1 , (uint8_t *)&ch, 1, 0xFFFF);
    return ch;
}
/* USER CODE END PFP */

參考程序

[https://github.com/STMicroelectronics/lsm6dsv16x-pid/tree/main]

初始換管腳

由于需要向LSM6DSV16X_I2C_ADD_L寫入以及為IIC模式。

所以使能CS為高電平,配置為IIC模式。 配置SA0為高電平。

printf("123123123");
  lsm6dsv16x_reset_t rst;
  stmdev_ctx_t dev_ctx;
  /* Initialize mems driver interface */
  dev_ctx.write_reg = platform_write;
  dev_ctx.read_reg = platform_read;
  dev_ctx.handle = &SENSOR_BUS;


  HAL_GPIO_WritePin(CS_GPIO_Port, CS_Pin, GPIO_PIN_SET);
  HAL_GPIO_WritePin(SA0_GPIO_Port, SA0_Pin, GPIO_PIN_RESET);

獲取ID

可以向WHO_AM_I (0Fh)獲取固定值,判斷是否為0x70。

lsm6dsv16x_device_id_get為獲取函數。

對應的獲取ID驅動程序,如下所示。

/* Wait sensor boot time */
  platform_delay(BOOT_TIME);
  /* Check device ID */
  lsm6dsv16x_device_id_get(&dev_ctx, &whoamI);
    printf("LSM6DSV16X_ID=0x%x,whoamI=0x%x",LSM6DSV16X_ID,whoamI);
  if (whoamI != LSM6DSV16X_ID)
    while (1);

復位操作

可以向CTRL3 (12h)的SW_RESET寄存器寫入1進行復位。

lsm6dsv16x_reset_set為重置函數。

對應的驅動程序,如下所示。

/* Restore default configuration */
  lsm6dsv16x_reset_set(&dev_ctx, LSM6DSV16X_RESTORE_CTRL_REGS);
  do {
    lsm6dsv16x_reset_get(&dev_ctx, &rst);
  } while (rst != LSM6DSV16X_READY);

BDU設置

在很多傳感器中,數據通常被存儲在輸出寄存器中,這些寄存器分為兩部分:MSB和LSB。這兩部分共同表示一個完整的數據值。例如,在一個加速度計中,MSB和LSB可能共同表示一個加速度的測量值。
連續更新模式(BDU = ‘0’):在默認模式下,輸出寄存器的值會持續不斷地被更新。這意味著在你讀取MSB和LSB的時候,寄存器中的數據可能會因為新的測量數據而更新。這可能導致一個問題:當你讀取MSB時,如果寄存器更新了,接下來讀取的LSB可能就是新的測量值的一部分,而不是與MSB相對應的值。這樣,你得到的就是一個“拼湊”的數據,它可能無法準確代表任何實際的測量時刻。
塊數據更新(BDU)模式(BDU = ‘1’):當激活BDU功能時,輸出寄存器中的內容不會在讀取MSB和LSB之間更新。這就意味著一旦開始讀取數據(無論是先讀MSB還是LSB),寄存器中的那一組數據就被“鎖定”,直到兩部分都被讀取完畢。這樣可以確保你讀取的MSB和LSB是同一測量時刻的數據,避免了讀取到代表不同采樣時刻的數據。
簡而言之,BDU位的作用是確保在讀取數據時,輸出寄存器的內容保持穩定,從而避免讀取到拼湊或錯誤的數據。這對于需要高精度和穩定性的應用尤為重要。
可以向CTRL3 (12h)的BDU寄存器寫入1進行開啟。

對應的驅動程序,如下所示。

/* Enable Block Data Update */
  lsm6dsv16x_block_data_update_set(&dev_ctx, PROPERTY_ENABLE);

6D方向檢測功能配置

1.使能六維位置檢測功能,配置陀螺儀模塊的中斷引腳,使得當六維傳感器檢測到某種運動時,能夠通過中斷方式通知主控制器。

可以通過使能MD1_CFG (5Eh)中的INT1_6D開啟6D事件。

pin_int.sixd = PROPERTY_ENABLE;
lsm6dsv16x_pin_int1_route_set(&dev_ctx, &pin_int);

2.使能中斷,將中斷配置應用到LSM6DSV16X模塊上。 FUNCTIONS_ENABLE (50h)可以開啟6D中斷。

在 LSM6DSV16X 傳感器的 TAP_CFG0 (56h) 寄存器中,LIR(Latched Interrupt Request)位用于控制中斷請求的鎖存。如果將 LIR 設為 0(默認值),則表示中斷請求不鎖存;如果設為 1,則中斷請求被鎖存。鎖存中斷意味著一旦中斷被觸發,它會保持其激活狀態直到被明確地通過軟件讀取或清除。這通常用于確保不會錯過任何中斷事件,特別是在多任務環境中,其中一個中斷可能會在處理另一個中斷時發生。

irq.enable = 1;
irq.lir = 1;
lsm6dsv16x_interrupt_enable_set(&dev_ctx, irq);

選擇濾波和角度閾值

濾波可以通過 TAP_CFG0 (56h) 設置低通濾波。

角度閾值可以通過 TAP_THS_6D (59h) 設置為60度,用于檢測姿態變化。

設置濾波和角度閾值可用以下函數:

lsm6dsv16x_filt_sixd_feed_set(&dev_ctx, LSM6DSV16X_SIXD_FEED_LOW_PASS);
lsm6dsv16x_6d_threshold_set(&dev_ctx, LSM6DSV16X_DEG_60);

設置量程和速率

速率可以通過CTRL1 (10h)設置加速度速率。

設置加速度量程可以通過CTRL8 (17h)進行設置。

設置加速度的量程和速率可以使用如下函數。

/* Set Output Data Rate.*/
  lsm6dsv16x_xl_data_rate_set(&dev_ctx, LSM6DSV16X_ODR_AT_120Hz);
  /* Set full scale */
  lsm6dsv16x_xl_full_scale_set(&dev_ctx, LSM6DSV16X_2g);

獲取所有中斷源的狀態

判斷是否發生了六維傳感器事件,如果有發生,則將不同方向的事件標志位按位組合起來,其中包括了傳感器的各種狀態,比如 FIFO 狀態、自由落體、喚醒、六維方向、數據就緒等狀態。然后通過一系列的操作和寄存器讀寫,獲取嵌入式功能執行狀態、傳感器中樞狀態等信息,并將這些信息也保存,最后將這些信息返回給主控。這些數據可以通過以下寄存器進行設置。

ALL_INT_SRC (1Dh) 為所有中斷的源寄存器,D6D_IA變量包含了自由落體狀態的信息。

D6D_SRC (47h) 用于六維方向識別,該寄存器包含了用于檢測設備方向的相關信息。

每個位都對應一個方向,用于表示設備是否在相應的方向上運動。例如,如果XH位和YL位都被置位,則表示設備正在以X軸正方向向上運動,并且Y軸負方向朝下。通過讀取D6D_SRC寄存器的值,可以了解設備當前的運動方向,從而進行相應的處理。LSM6DSV16X傳感器中的方向檢測是基于重力加速度和線性加速度的,因此需要在使用之前進行校準和配置,以適應不同的應用場景。

通過 int32_t lsm6dsv16x_all_sources_get(stmdev_ctx_t *ctx, lsm6dsv16x_all_sources_t *val) 函數可以獲取所有中斷源的狀態。

lsm6dsv16x_all_sources_t status;

    /* Read output only if new xl value is available */
    lsm6dsv16x_all_sources_get(&dev_ctx, &status);

    if (status.six_d) {
            sixd_event_catched = (status.six_d    < < 6) |
                                 (status.six_d_zh < < 5) |
                                 (status.six_d_zl < < 4) |
                                 (status.six_d_yh < < 3) |
                                 (status.six_d_yl < < 2) |
                                  (status.six_d_xh < < 1) |
                                 (status.six_d_xl < < 0);
        }

發送相應信息

檢查sixd_event_catched的第7位是否為1,如果第7位為1,表示檢測到了六維傳感器事件。

根據sixd_event_catched的具體數值,通過switch語句匹配不同的情況。每個情況對應著不同的六維傳感器位置,并且針對每種情況都會生成相應的消息并調用tx_com函數發送消息。

最后,在處理完六維傳感器事件后,將sixd_event_catched重置為0,以便下一次事件的檢測。

/* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
        /* wait forever (6D event handle in irq handler) */
        lsm6dsv16x_all_sources_t status;

        /* Read output only if new xl value is available */
        lsm6dsv16x_all_sources_get(&dev_ctx, &status);

        if (status.six_d) {
            sixd_event_catched = (status.six_d    < < 6) |
                                                     (status.six_d_zh < < 5) |
                                                     (status.six_d_zl < < 4) |
                                                     (status.six_d_yh < < 3) |
                                                     (status.six_d_yl < < 2) |
                                                     (status.six_d_xh < < 1) |
                                                     (status.six_d_xl < < 0);
        }
        if (sixd_event_catched & 0x40) {

      switch (sixd_event_catched) {
      case 0x48:
        printf("6D Position A Y↑rn");
        break;
      case 0x41:
        printf("6D Position B X↓rn");
        break;
      case 0x42:
        printf("6D Position C X↑rn");
        break;
      case 0x44:
        printf("6D Position D Y↓rn");
        break;
      case 0x60:
        printf("6D Position E Z↑rn");
        break;
      case 0x50:
        printf("6D Position F Z↓rn");
        break;
      }
      sixd_event_catched = 0;
        }


    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */

演示

審核編輯 黃宇

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

    關注

    44

    文章

    784

    瀏覽量

    98712
  • stm32cubemx
    +關注

    關注

    5

    文章

    283

    瀏覽量

    14809
收藏 人收藏

    評論

    相關推薦

    陀螺儀LSM6DSV16XAI集成(14)----上報匿名上位機

    本文介紹了如何將 LSM6DSV16X 傳感器的姿態數據通過匿名通信協議上報到上位機。通過獲取傳感器的四元數數據,并將其轉換為歐拉角(Roll、Pitch、Yaw),然后按照協議格式化數據幀并通過
    的頭像 發表于 11-25 11:53 ?649次閱讀
    <b class='flag-5'>陀螺儀</b><b class='flag-5'>LSM6DSV16X</b>與<b class='flag-5'>AI</b><b class='flag-5'>集成</b>(14)----上報匿名上位機

    陀螺儀LSM6DSV16XAI集成(13)----中斷獲取SFLP四元數

    本文將介紹如何通過中斷機制獲取 LSM6DSV16X 傳感器的 SFLP(Sensor Fusion Low Power)四元數數據。LSM6DSV16X 是一款高性能的 6 軸慣性傳感器,支持
    的頭像 發表于 11-25 11:44 ?579次閱讀
    <b class='flag-5'>陀螺儀</b><b class='flag-5'>LSM6DSV16X</b>與<b class='flag-5'>AI</b><b class='flag-5'>集成</b>(13)----中斷獲取SFLP四元數

    LSM6DSV16X基于MLC智能筆動作識別(4)----中斷獲取智能筆狀態

    LSM6DSV16X 支持通過中斷(INT)輸出 MLC(機器學習核)識別的動作。具體來說,MLC 可以配置為在滿足某些條件或機器學習分類結果發生變化時生成中斷信號。 LSM6DSV16X 的機器
    的頭像 發表于 11-25 11:39 ?184次閱讀
    <b class='flag-5'>LSM6DSV16X</b>基于MLC智能筆動作識別(4)----中斷獲取智能筆狀態

    LSM6DSV16X基于MLC智能筆動作識別(2)----MLC數據采集

    MLC 是“機器學習核心”(Machine Learning Core)的縮寫。在 LSM6DSV16X 傳感器 中,MLC 是一種嵌入式功能,它使傳感器能夠直接運行基于決策樹的機器學習算法。通過
    的頭像 發表于 10-22 10:02 ?775次閱讀
    <b class='flag-5'>LSM6DSV16X</b>基于MLC智能筆動作識別(2)----MLC數據采集

    LSM6DSV16X基于MLC智能筆動作識別(1)----輪詢獲取陀螺儀數據

    本文將介紹如何使用 LSM6DSV16X 傳感器來讀取數據。主要步驟包括初始化傳感器接口、驗證設備ID、配置傳感器的數據輸出率和濾波器,以及通過輪詢方式持續讀取加速度、角速率和溫度數據。讀取到的數據
    的頭像 發表于 10-16 10:38 ?388次閱讀
    <b class='flag-5'>LSM6DSV16X</b>基于MLC智能筆動作識別(1)----輪詢獲取<b class='flag-5'>陀螺儀</b>數據

    陀螺儀LSM6DSV16XAI集成(11)----融合磁力計進行姿態解算

    MotionFX庫包含用于校準陀螺儀、加速度計和磁力計傳感器的例程。 將磁力計的數據與加速度計和陀螺儀的數據融合,可以大幅提高姿態估計的精度。三軸加速度計提供設備的傾斜信息,陀螺儀提供角速度信息,而磁力計提供方位信息,三者結合可
    的頭像 發表于 09-06 16:57 ?1970次閱讀
    <b class='flag-5'>陀螺儀</b><b class='flag-5'>LSM6DSV16X</b>與<b class='flag-5'>AI</b><b class='flag-5'>集成</b>(11)----融合磁力計進行姿態解算

    陀螺儀LSM6DSOW開發(3)----FIFO數據讀取與配置

    本文檔旨在詳細介紹如何配置和讀取LSM6DSOW傳感器的FIFO數據。LSM6DSOW是一款高性能的6軸IMU(慣性測量單元),集成了三軸加速度計和三軸
    的頭像 發表于 08-05 10:03 ?1741次閱讀
    <b class='flag-5'>陀螺儀</b><b class='flag-5'>LSM6</b>DSOW開發(3)----FIFO數據讀取與配置

    意法半導體新款MEMS IMU LSM6DSV32X實現精確姿態識別應用

    憑借3核、6軸傳感架構,意法半導體新款MEMS IMU LSM6DSV32X能夠進行卓越的邊緣計算處理,是智能手機的高精度感測和3D地圖、筆記本電腦和平板電腦的情境感知、AR和VR的精確姿態識別,以及可穿戴設備的全天候跟蹤等應用
    的頭像 發表于 08-01 10:15 ?818次閱讀

    陀螺儀LSM6DSV16XAI集成(8)----MotionFX庫解析空間坐標

    本文將探討如何使用MotionFX庫解析空間坐標。MotionFX庫是一種用于傳感器融合的強大工具,可以將加速度計、陀螺儀和磁力計的數據融合在一起,實現精確的姿態和位置估計。本文將介紹如何初始化
    的頭像 發表于 07-18 10:43 ?1186次閱讀
    <b class='flag-5'>陀螺儀</b><b class='flag-5'>LSM6DSV16X</b>與<b class='flag-5'>AI</b><b class='flag-5'>集成</b>(8)----MotionFX庫解析空間坐標

    陀螺儀LSM6DSV16XAI集成(7)----FIFO數據讀取與配置

    LSM6DSV16X是一款高性能、低功耗的6軸IMU傳感器,集成了3軸加速度計和3軸陀螺儀。本文將詳細介紹如何配置和讀取LSM6DSV16X
    的頭像 發表于 07-18 10:40 ?1540次閱讀
    <b class='flag-5'>陀螺儀</b><b class='flag-5'>LSM6DSV16X</b>與<b class='flag-5'>AI</b><b class='flag-5'>集成</b>(7)----FIFO數據讀取與配置

    請問lsm6dsv16x可以直接讀取觸摸手勢嗎?

    已經讀出來了LSM6DSV16x的QVRmv值,也寫出了單擊的狀態機。但是在寫觸摸滑動手勢時沒有找到好的計算方式。請問是不是有直接讀出這些手勢的函數?
    發表于 07-02 08:14

    陀螺儀LSM6DSV16XAI集成(6)----檢測自由落體

    本文介紹如何初始化傳感器并配置其參數,以便在檢測到自由落體事件時發送通知。
    的頭像 發表于 05-17 15:12 ?1931次閱讀
    <b class='flag-5'>陀螺儀</b><b class='flag-5'>LSM6DSV16X</b>與<b class='flag-5'>AI</b><b class='flag-5'>集成</b>(<b class='flag-5'>6</b>)----<b class='flag-5'>檢測</b>自由落體

    意法半導體發布LSM6DSV32X 6軸慣性模塊

    意法半導體近日發布了其最新的LSM6DSV32X 6軸慣性模塊(IMU),該模塊集成了高性能的加速度計和陀螺儀。加速度計的最大量程達到32g,而陀螺
    的頭像 發表于 05-13 09:59 ?673次閱讀

    意法半導體推出一款LSM6DSV32X 6軸慣性模塊(IMU)

    意法半導體的LSM6DSV32X 6軸慣性模塊(IMU)集成一個滿量程32g的大加速度計和一個滿量程4000度每秒(dps)的陀螺儀,可測量高強度的運動和撞擊,包括自由落體高度估算。
    的頭像 發表于 05-09 10:35 ?869次閱讀

    陀螺儀x軸和y軸的應用

    陀螺儀是一種用于測量和感應物體旋轉和轉動的設備,它通常由三個軸組成:x軸、y軸和z軸。在陀螺儀中,x軸和y軸通常成對出現,關于它們的比例可以因具體應用而異。首先,我們先了解一下
    發表于 04-17 15:42 ?0次下載
    主站蜘蛛池模板: 色婷婷亚洲| 国产专区视频| www.亚洲天堂.com| 黄网在线免费观看| 国产成人精品曰本亚洲78| 日本黄色短片| 永久影视| 免费看黄色网| 色婷婷资源网| 在线免费影视| 亚洲一区免费观看| 日韩怡红院| 天天色天天色| 久久精品最新免费国产成人| 免费看三级黄色片| 萝控喷水视频| 亚洲精品福利你懂| 丁香婷婷在线| abc119影院成人免费看| 日本久久久| 欧美成人免费大片888| 中文久草| www.99色.com| 日本一视频一区视频二区| 免费看一级毛片| 国产亚洲美女精品久久久2020 | 色版视频| 天堂网www中文在线| 好硬好湿好爽再深一点h| 黄色18网站| 男人cao女人视频在线观看| 日韩三级毛片| 免费高清在线观看a网站| 新版天堂中文资源官网| 1000部啪啪未满十八勿入中国| 中文字幕一区二区三区永久| 免费一级毛片女人图片| 国产精品午夜寂寞视频| 日日摸人人看97人人澡| 免费观看在线永久免费xx视频| 亚洲成人高清在线观看|