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

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

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

3天內不再提示

三軸加速度計LIS2DW12開發(2)----基于中斷信號獲取加速度數據

嵌入式單片機MCU開發 ? 來源:嵌入式單片機MCU開發 ? 作者:嵌入式單片機MCU開 ? 2023-12-18 10:46 ? 次閱讀

概述

本文將介紹實時獲取和處理加速度數據。程序的核心流程包括初始化硬件接口、配置加速度計的參數,以及通過輪詢檢查中斷信號來不斷讀取加速度數據。

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

在這里插入圖片描述

視頻教學

https://www.bilibili.com/video/BV1gC4y117z2/

樣品申請

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

源碼下載

https://download.csdn.net/download/qq_24312945/88592069

生成STM32CUBEMX

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

在這里插入圖片描述

串口配置

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

在這里插入圖片描述
配置串口。

在這里插入圖片描述

IIC配置

在這里插入圖片描述
配置IIC為快速模式,速度為400k。
在這里插入圖片描述

CS和SA0設置

在這里插入圖片描述

INT1設置

數據準備完畢可以通過INT1獲取中斷信號。
在這里插入圖片描述

INT1接入PA9,需要配置PA9為輸入模式。

在這里插入圖片描述

配置如下所示。
在這里插入圖片描述

串口重定向

打開魔術棒,勾選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/lis2dw12-pid

初始換管腳

由于需要向LIS2DW12_I2C_ADD_H寫入以及為IIC模式。
在這里插入圖片描述

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

stmdev_ctx_t dev_ctx;
	lis2dw12_reg_t int_route;
  dev_ctx.write_reg = platform_write;
  dev_ctx.read_reg = platform_read;
  dev_ctx.handle = &SENSOR_BUS;

  HAL_GPIO_WritePin(GPIOC, CS_Pin, GPIO_PIN_SET);
  HAL_GPIO_WritePin(GPIOC, SA0_Pin, GPIO_PIN_SET);

獲取ID

我們可以向WHO_AM_I (0Fh)獲取固定值,判斷是否為0x44。
在這里插入圖片描述

lis2dw12_device_id_get為獲取函數。
在這里插入圖片描述

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

/* Wait sensor boot time */
  platform_delay(BOOT_TIME);
  /* Check device ID */
  lis2dw12_device_id_get(&dev_ctx, &whoamI);
	printf("LIS2DW12_ID=0x%x,whoamI=0x%x",LIS2DW12_ID,whoamI);
  if (whoamI != LIS2DW12_ID)
    while (1) {
      /* manage here device not found */
    }

復位操作

可以向CTRL2 (21h)的SOFT_RESET寄存器寫入1進行復位。

在這里插入圖片描述
lis2dw12_reset_set為重置函數。

在這里插入圖片描述

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

/* Restore default configuration */
  lis2dw12_reset_set(&dev_ctx, PROPERTY_ENABLE);

  do {
    lis2dw12_reset_get(&dev_ctx, &rst);
  } while (rst);

BDU設置

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

在這里插入圖片描述

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

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

開啟INT1中斷

設置中斷通知方式。LIS2DW12_INT_LATCHED 表明使用鎖存型中斷,意味著中斷信號會保持激活狀態,直到被讀取或者清除。
在這里插入圖片描述

lis2dw12_int_notification_set(&dev_ctx, LIS2DW12_INT_LATCHED);

設置中斷引腳的極性。LIS2DW12_ACTIVE_LOW 指示中斷引腳在激活時是低電平。
在這里插入圖片描述

lis2dw12_pin_polarity_set(&dev_ctx, LIS2DW12_ACTIVE_LOW);

讀取 INT1 引腳的當前中斷路由配置到 ctrl4_int1_pad 結構體中,(CTRL4_INT1_PAD_CTRL, 地址為 0x23h)這個寄存器用于配置加速度計的中斷1引腳(INT1)的行為。
INT1_6D: 當設置為1時,6D定位識別的中斷會被路由到INT1引腳。
INT1_SINGLE_TAP: 單擊識別中斷的啟用/禁用。
INT1_WU: 喚醒識別中斷的啟用/禁用。
INT1_FF: 自由落體識別中斷的啟用/禁用。
INT1_TAP: 雙擊識別中斷的啟用/禁用。
INT1_DIFF5: FIFO滿識別中斷的啟用/禁用。
INT1_FTH: FIFO閾值中斷的啟用/禁用。
INT1_DRDY: 數據就緒(Data-Ready)中斷的啟用/禁用。

在這里插入圖片描述

需要將INT1_DRDY置為1。
然后再將數據寫入到(CTRL4_INT1_PAD_CTRL, 地址為 0x23h)這個寄存器鐘。

lis2dw12_pin_int1_route_get(&dev_ctx, &ctrl4_int1_pad);
  ctrl4_int1_pad.int1_drdy = PROPERTY_ENABLE;
  lis2dw12_pin_int1_route_set(&dev_ctx, &ctrl4_int1_pad);

設置傳感器的量程

FS[1:0] - 全量程選擇:這兩個位用于設置傳感器的量程。量程決定了傳感器可以測量的最大加速度值。例如,量程可以設置為±2g、±4g、±8g或±16g。這允許用戶根據應用的特定需求調整傳感器的靈敏度。
在這里插入圖片描述

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

/* Set full scale */
  lis2dw12_full_scale_set(&dev_ctx, LIS2DW12_2g);

配置過濾器鏈

lis2dw12_filter_path_set(&dev_ctx, LIS2DW12_LPF_ON_OUT);:設置加速度計輸出的過濾器路徑。這里選擇了輸出上的低通濾波器(LPF),用于去除高頻噪聲。
lis2dw12_filter_bandwidth_set(&dev_ctx, LIS2DW12_ODR_DIV_10);設置過濾器的帶寬。LIS2DW12_ODR_DIV_10 表明帶寬設置為輸出數據率(ODR)的十分之一。

配置電源模式

lis2dw12_power_mode_set(&dev_ctx, LIS2DW12_CONT_LOW_PWR_12bit);配置電源模式。這里設置為連續低功耗模式,且以 12 位分辨率運行。

設置輸出數據速率

lis2dw12_data_rate_set(&dev_ctx, LIS2DW12_XL_SET_SW_TRIG);設置加速度計的數據輸出速率。LIS2DW12_XL_SET_SW_TRIG 可能表示使用軟件觸發來設置數據輸出速率。

/* Wait sensor boot time */
  platform_delay(BOOT_TIME);
  /* Check device ID */
  lis2dw12_device_id_get(&dev_ctx, &whoamI);

  if (whoamI != LIS2DW12_ID)
    while (1) {
      /* manage here device not found */
    }

  /* Restore default configuration */
  lis2dw12_reset_set(&dev_ctx, PROPERTY_ENABLE);

  do {
    lis2dw12_reset_get(&dev_ctx, &rst);
  } while (rst);

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

  lis2dw12_int_notification_set(&dev_ctx, LIS2DW12_INT_LATCHED);
  lis2dw12_pin_polarity_set(&dev_ctx, LIS2DW12_ACTIVE_LOW);
  lis2dw12_pin_int1_route_get(&dev_ctx, &ctrl4_int1_pad);
  ctrl4_int1_pad.int1_drdy = PROPERTY_ENABLE;
  lis2dw12_pin_int1_route_set(&dev_ctx, &ctrl4_int1_pad);
  /* Set full scale */
  lis2dw12_full_scale_set(&dev_ctx, LIS2DW12_2g);
  /* Configure filtering chain accelerometer */
  lis2dw12_filter_path_set(&dev_ctx, LIS2DW12_LPF_ON_OUT);
  lis2dw12_filter_bandwidth_set(&dev_ctx, LIS2DW12_ODR_DIV_10);
  /* Configure power mode and Output Data Rate */
  lis2dw12_power_mode_set(&dev_ctx, LIS2DW12_CONT_LOW_PWR_12bit);
  lis2dw12_data_rate_set(&dev_ctx, LIS2DW12_XL_SET_SW_TRIG);

中斷判斷加速度數據狀態

通過判斷INT1管腳來判斷數據是否準備完畢。
如果電平為低電平說明加速度數據已經準備完畢。

數據在28h-2Dh中。
在這里插入圖片描述

在這里插入圖片描述
加速度數據首先以原始格式(通常是整數)讀取,然后需要轉換為更有意義的單位,如毫重力(mg)。這里的轉換函數 lis2dw12_from_fs2_to_mg() 根據加速度計的量程(這里假設為±2g)將原始數據轉換為毫重力單位。
acceleration_mg[0] = lis2dw12_from_fs2_to_mg(data_raw_acceleration[0]); 等三行代碼分別轉換 X、Y、Z 軸的加速度數據。

在這里插入圖片描述

● LIS2DW12 加速度計通常會有一個固定的位分辨率,比如 16 位(即輸出值是一個 16 位的整數)。這意味著加速度計可以輸出的不同值的總數是 2^16=65536。這些值均勻地分布在 -2g 到 +2g 的范圍內。
● 因此,這個范圍(4g 或者 4000 mg)被分成了 65536 個步長。
● 每個步長的大小是 4000 mg/65536≈0.061 mg/LSB
所以,函數中的乘法 ((float_t)lsb) * 0.061f 是將原始的整數值轉換為以毫重力(mg)為單位的加速度值。這個轉換對于將加速度計的原始讀數轉換為實際的物理測量值是必需的。

/* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
	/* polling on DRDY signal */
    if (GPIO_PIN_RESET == HAL_GPIO_ReadPin(INT1_GPIO_Port, INT1_Pin)) {
      /* Read acceleration data */
      memset(data_raw_acceleration, 0x00, 3 * sizeof(int16_t));
      lis2dw12_acceleration_raw_get(&dev_ctx, data_raw_acceleration);
      acceleration_mg[0] = lis2dw12_from_fs2_lp1_to_mg(
                             data_raw_acceleration[0]);
      acceleration_mg[1] = lis2dw12_from_fs2_lp1_to_mg(
                             data_raw_acceleration[1]);
      acceleration_mg[2] = lis2dw12_from_fs2_lp1_to_mg(
                             data_raw_acceleration[2]);		
		
      lis2dw12_data_rate_set(&dev_ctx, LIS2DW12_XL_SET_SW_TRIG);
			printf("Acceleration [mg]:X=%4.2ftY=%4.2ftZ=%4.2frn",acceleration_mg[0], acceleration_mg[1], acceleration_mg[2]);

    }		
		
    /* USER CODE END WHILE */

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

演示

在這里插入圖片描述

審核編輯:湯梓紅

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

    關注

    128

    文章

    3854

    瀏覽量

    189695
  • 三軸加速度計

    關注

    1

    文章

    27

    瀏覽量

    13307
  • 三軸磁力計
    +關注

    關注

    0

    文章

    7

    瀏覽量

    8352
  • stm32cubemx
    +關注

    關注

    5

    文章

    278

    瀏覽量

    14581
收藏 人收藏

    評論

    相關推薦

    e2studio開發加速度計LIS2DW12(2)----基于中斷信號獲取加速度數據

    本文將介紹實時獲取和處理加速度數據。程序的核心流程包括初始化硬件接口、配置加速度計的參數,以及通過輪詢檢查中斷信號來不斷讀取
    的頭像 發表于 05-17 14:42 ?665次閱讀
    e<b class='flag-5'>2</b>studio<b class='flag-5'>開發</b><b class='flag-5'>三</b><b class='flag-5'>軸</b><b class='flag-5'>加速度計</b><b class='flag-5'>LIS2DW12</b>(<b class='flag-5'>2</b>)----基于<b class='flag-5'>中斷</b><b class='flag-5'>信號</b><b class='flag-5'>獲取</b><b class='flag-5'>加速度數據</b>

    e2studio開發加速度計LIS2DW12(3)----檢測活動和靜止狀態

    本文將介紹實時獲取和處理加速度數據。程序的核心流程包括初始化硬件接口、配置加速度計的參數,以及通過輪詢檢查中斷信號來不斷讀取
    的頭像 發表于 05-17 14:51 ?864次閱讀
    e<b class='flag-5'>2</b>studio<b class='flag-5'>開發</b><b class='flag-5'>三</b><b class='flag-5'>軸</b><b class='flag-5'>加速度計</b><b class='flag-5'>LIS2DW12</b>(3)----檢測活動和靜止狀態

    e2studio開發加速度計LIS2DW12(4)----測量傾斜度

    本文將介紹如何驅動和利用LIS2DW12加速度計的傾斜檢測理論和傾斜角測量方法。一般來說,這里描述的程序也可以應用于
    的頭像 發表于 05-17 15:00 ?872次閱讀
    e<b class='flag-5'>2</b>studio<b class='flag-5'>開發</b><b class='flag-5'>三</b><b class='flag-5'>軸</b><b class='flag-5'>加速度計</b><b class='flag-5'>LIS2DW12</b>(4)----測量傾斜度

    加速度計LIS2DUX12開發(1)----輪詢獲取加速度數據

    本文將介紹如何驅動和利用LIS2DUX12傳感器,實現精確的運動感應功能。 LIS2DUX12是一款數字式智能3軸線性加速度計,其MEMS和ASIC旨在將盡可能低的電流消耗與豐富的特性(如常開抗混
    的頭像 發表于 05-17 15:22 ?912次閱讀
    <b class='flag-5'>三</b><b class='flag-5'>軸</b><b class='flag-5'>加速度計</b><b class='flag-5'>LIS2DUX12</b><b class='flag-5'>開發</b>(1)----輪詢<b class='flag-5'>獲取</b><b class='flag-5'>加速度數據</b>

    e2studio開發加速度計LIS2DW12(1)----輪詢獲取加速度數據

    本文將介紹如何驅動和利用LIS2DW12傳感器,實現精確的運動感應功能。 IS2DW12是一款高性能、超低功耗的軸線性加速度計,屬于“femto”系列,利用了成熟的微機械
    的頭像 發表于 08-09 14:54 ?1153次閱讀
    e<b class='flag-5'>2</b>studio<b class='flag-5'>開發</b><b class='flag-5'>三</b><b class='flag-5'>軸</b><b class='flag-5'>加速度計</b><b class='flag-5'>LIS2DW12</b>(1)----輪詢<b class='flag-5'>獲取</b><b class='flag-5'>加速度數據</b>

    設計具有成本效益的加速度計

    板)獲取加速度數據的示例,但只有少數項目足以用于地震環境或建筑監測。談到 MEMS 加速度計傳感器,我們可以找到非常好的用于地震目的的 MEMS 傳感器,但它們非常昂貴(注意你可以以相同的價格購買專業
    發表于 08-23 06:20

    是否可以使用LIS2DW12加速度計進行傾斜角度檢測呢?

    我正在使用 LIS2DW12 加速度計進行傾斜角度檢測是否可以如圖所示檢測兩個方向的傾斜角度(A和B)并在喚醒中斷模式下觸發中斷事件?在 6d 方向模式下是可能的,但我需要喚醒
    發表于 01-05 07:01

    LIS2DW12的應用筆記

    本文檔旨在提供 ST 的 LIS2DW12 運動傳感器相關的使用信息和應用提示。LIS2DW12 是系統級封裝的 3D 數字加速度計,具有數字 I2C/SPI 串口標準輸出,在高分辨率模式下功耗
    發表于 09-13 06:58

    AIS2DW12軸線性加速度計應用筆記

    電子發燒友網站提供《AIS2DW12軸線性加速度計應用筆記.pdf》資料免費下載
    發表于 07-31 09:53 ?0次下載
    AIS<b class='flag-5'>2DW12</b><b class='flag-5'>三</b>軸線性<b class='flag-5'>加速度計</b>應用筆記

    LIS2DW12 3D數字加速度計應用筆記

    電子發燒友網站提供《LIS2DW12 3D數字加速度計應用筆記.pdf》資料免費下載
    發表于 07-31 09:40 ?1次下載
    <b class='flag-5'>LIS2DW12</b> 3D數字<b class='flag-5'>加速度計</b>應用筆記

    e2studio開發加速度計LIS2DW12(1)----輪詢獲取加速度數據

    本文將介紹如何驅動和利用LIS2DW12傳感器,實現精確的運動感應功能。 IS2DW12是一款高性能、超低功耗的軸線性加速度計,屬于“femto”系列,利用了成熟的微機械
    的頭像 發表于 01-09 16:21 ?539次閱讀
    e<b class='flag-5'>2</b>studio<b class='flag-5'>開發</b><b class='flag-5'>三</b><b class='flag-5'>軸</b><b class='flag-5'>加速度計</b><b class='flag-5'>LIS2DW12</b>(1)----輪詢<b class='flag-5'>獲取</b><b class='flag-5'>加速度數據</b>

    加速度計LIS2DW12開發(4)----測量傾斜度

    本文將介紹如何驅動和利用LIS2DW12加速度計的傾斜檢測理論和傾斜角測量方法。一般來說,這里描述的程序也可以應用于
    的頭像 發表于 05-16 17:18 ?428次閱讀
    <b class='flag-5'>三</b><b class='flag-5'>軸</b><b class='flag-5'>加速度計</b><b class='flag-5'>LIS2DW12</b><b class='flag-5'>開發</b>(4)----測量傾斜度

    e2studio開發加速度計LIS2DW12(2)----基于中斷信號獲取加速度數據

    本文將介紹實時獲取和處理加速度數據。程序的核心流程包括初始化硬件接口、配置加速度計的參數,以及通過輪詢檢查中斷信號來不斷讀取
    的頭像 發表于 08-09 15:43 ?130次閱讀
    e<b class='flag-5'>2</b>studio<b class='flag-5'>開發</b><b class='flag-5'>三</b><b class='flag-5'>軸</b><b class='flag-5'>加速度計</b><b class='flag-5'>LIS2DW12</b>(<b class='flag-5'>2</b>)----基于<b class='flag-5'>中斷</b><b class='flag-5'>信號</b><b class='flag-5'>獲取</b><b class='flag-5'>加速度數據</b>

    e2studio開發加速度計LIS2DW12(3)----檢測活動和靜止狀態

    本文將介紹實時獲取和處理加速度數據。程序的核心流程包括初始化硬件接口、配置加速度計的參數,以及通過輪詢檢查中斷信號來不斷讀取
    的頭像 發表于 08-09 15:53 ?136次閱讀
    e<b class='flag-5'>2</b>studio<b class='flag-5'>開發</b><b class='flag-5'>三</b><b class='flag-5'>軸</b><b class='flag-5'>加速度計</b><b class='flag-5'>LIS2DW12</b>(3)----檢測活動和靜止狀態

    e2studio開發加速度計LIS2DW12(4)----測量傾斜度

    本文將介紹如何驅動和利用LIS2DW12加速度計的傾斜檢測理論和傾斜角測量方法。一般來說,這里描述的程序也可以應用于
    的頭像 發表于 08-09 16:00 ?156次閱讀
    e<b class='flag-5'>2</b>studio<b class='flag-5'>開發</b><b class='flag-5'>三</b><b class='flag-5'>軸</b><b class='flag-5'>加速度計</b><b class='flag-5'>LIS2DW12</b>(4)----測量傾斜度