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

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

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

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

三軸加速度計LIS2DUX12開發(fā)(3)----計步器

嵌入式單片機MCU開發(fā) ? 來源:嵌入式單片機MCU開發(fā) ? 作者:嵌入式單片機MCU開 ? 2024-05-17 15:36 ? 次閱讀

計步器

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

本文將介紹如何驅動和利用LIS2DUX12傳感器,實現(xiàn)計步器感應功能。
LIS2DUX12是一款數(shù)字式智能3軸線性加速度計,其MEMSASIC旨在將盡可能低的電流消耗與豐富的特性(如常開抗混疊濾波、有限狀態(tài)機 (FSM)、具有自適應自配置 (ASC) 的機器學習內(nèi)核 (MLC))相結合。
FSM和MLC(帶有ASC)為LIS2DUX12提供了始終可用的出色邊緣處理能力。LIS2DUX12 MIPI I3C?從接口嵌入式128級FIFO緩沖區(qū)構成了一系列功能,這讓該加速度計在物料清單、處理能力和功耗上成為系統(tǒng)集成方面的參考。
LIS2DUX12具有±2g/±4g/±8g/±16g的用戶可選滿量程,并且可通過1.6 Hz到800 Hz的輸出數(shù)據(jù)速率測量加速度。
LIS2DUX12包含專用內(nèi)部引擎,用于處理運動和加速度檢測,包括自由落體、喚醒、單/雙/三擊識別、活動/休止,以及6D/4D方向。
LIS2DUX12采用纖薄的小型塑料平面網(wǎng)格陣列封裝(LGA),可確保在更大的溫度范圍(-40°C至+85°C)內(nèi)正常工作。

硬件準備

首先需要準備一個開發(fā)板,這里我準備的是自己繪制的開發(fā)板,需要的可以進行申請。 主控為STM32U073CC,加速度計為LIS2DUX12

視頻教學

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

樣品申請

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

源碼下載

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

步數(shù)檢測說明

LIS2DUX12 集成了一個高級步數(shù)計算法,該算法在超低功耗域中運行,確保在電池受限的應用中延長電池壽命。步數(shù)計以 25 Hz 運行,不受所選設備功率模式(超低功耗、低功耗、高性能)的影響,保證超低功耗體驗并與其他設備功能靈活結合。 步數(shù)計算法由以下四個階段組成:

  1. 計算加速度量級信號的峰值:檢測信號中的峰值以識別步數(shù),獨立于設備的方向。
  2. FIR 濾波器:提取相關頻率成分并通過去除高頻信號來平滑信號。
  3. 峰值檢測器:找到波形的最大值和最小值并計算峰峰值。
  4. 步數(shù)計數(shù):如果峰峰值大于設定的閾值,則計為一步。

通信模式

對于LIS2DW12,可以使用SPI或者IIC進行通訊。 最小系統(tǒng)圖如下所示。

在CS管腳為1的時候,為IIC模式

本文使用的板子原理圖如下所示。

管腳定義

IIC通信模式

在使用IIC通訊模式的時候,SA0是用來控制IIC的地址位的。
對于IIC的地址,可以通過SDO/SA0引腳修改。SDO/SA0引腳可以用來修改設備地址的最低有效位。如果SDO/SA0引腳連接到電源電壓,LSb(最低有效位)為’1’(地址0011001b);否則,如果SDO/SA0引腳連接到地線,LSb的值為’0’(地址0011000b)。

對應的IIC接口如下所示。 主要使用的管腳為CS、SCL、SDA、SA0。

速率

該模塊支持的速度為普通模式(100k)到快速模式+(1M)。

生成STM32CUBEMX

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

IIC配置

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

INT配置

INT1管腳為PB1。

配置如下所示。

開啟中斷。

配置LED指示燈。

stm32u0xx_it.c添加中斷觸發(fā)后LED翻轉電平的代碼,添加對應變量。

/* USER CODE BEGIN 0 */
extern uint8_t step_event ;
/* USER CODE END 0 */

添加中斷代碼。

/**
  * @brief This function handles EXTI line 0 and line 1 interrupts.
  */
void EXTI0_1_IRQHandler(void)
{
  /* USER CODE BEGIN EXTI0_1_IRQn 0 */
    HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_1);

            step_event = 1;

  /* USER CODE END EXTI0_1_IRQn 0 */
  HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_1);
  /* USER CODE BEGIN EXTI0_1_IRQn 1 */

  /* USER CODE END EXTI0_1_IRQn 1 */
}

串口配置

查看原理圖,PA9和PA10設置為開發(fā)板的串口。

配置串口。

CS和SA0設置

串口重定向

打開魔術棒,勾選MicroLIB

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

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

函數(shù)聲明和串口重定向:

/* 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/lis2dux12-pid]

計步器參考

[https://github.com/stm32duino/LIS2DUXS12/tree/main/examples]

初始換管腳

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

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

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

獲取ID

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

lis2dux12_device_id_get為獲取函數(shù)。

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

printf("HELLOn");

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

  lis2dux12_status_t status;
  uint8_t id;
  lis2dux12_md_t md;
  uint16_t steps = 0;
  lis2dux12_int_config_t int_mode;

  /* Initialize mems driver interface */
  dev_ctx.write_reg = platform_write;
  dev_ctx.read_reg = platform_read;
  dev_ctx.mdelay = platform_delay;
  dev_ctx.handle = &SENSOR_BUS;

  /* Wait sensor boot time */
  platform_delay(BOOT_TIME);    

  lis2dux12_exit_deep_power_down(&dev_ctx);// 退出深度休眠模式

  /* Check device ID */
  lis2dux12_device_id_get(&dev_ctx, &id);
    printf("LIS2DUX12_ID=0x%x,id=0x%xn",LIS2DUX12_ID,id);
  if (id != LIS2DUX12_ID)
    while(1);

  /* Restore default configuration */
  lis2dux12_init_set(&dev_ctx, LIS2DUX12_RESET);// 重置設備
  do {
    lis2dux12_status_get(&dev_ctx, &status);// 獲取設備狀態(tài)
  } while (status.sw_reset);// 獲取設備狀態(tài)

復位操作

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

lis2dux12_init_set為重置函數(shù)。 對應的驅動程序,如下所示。

/* Restore default configuration */
  lis2dux12_init_set(&dev_ctx, LIS2DUX12_RESET);
  do {
    lis2dux12_status_get(&dev_ctx, &status);
  } while (status.sw_reset);

BDU設置

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

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

/* Set bdu and if_inc recommended for driver usage */
  lis2dux12_init_set(&dev_ctx, LIS2DUX12_SENSOR_ONLY_ON);

設置傳感器的量程

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

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

/* Set Output Data Rate */
  md.fs =  LIS2DUX12_4g;
  md.odr = LIS2DUX12_25Hz_LP;
  lis2dux12_mode_set(&dev_ctx, &md);

啟用步數(shù)計和嵌入式功能

EMB_FUNC_EN 是一個寄存器位,用于啟用 LIS2DUX12 傳感器的嵌入式功能。這些嵌入式功能可能包括傳感器的各種高級特性,如步數(shù)計、活動檢測、自由落體檢測等。這些功能通過內(nèi)部算法處理傳感器數(shù)據(jù),而不需要主機處理器進行復雜計算,從而減輕了主機處理器的負擔。

if_add_inc 是一個控制寄存器位,用于啟用或禁用自動地址遞增功能。在多字節(jié)訪問模式下,當你讀取或寫入多個連續(xù)的寄存器時,啟用地址遞增功能可以使得寄存器地址自動增加。這在讀取或寫入一系列數(shù)據(jù)時非常有用,因為它可以減少通信開銷并簡化代碼。

// Enable Pedometer.    
    /* 啟用傳感器的嵌入式功能(例如,步數(shù)計),這通常推薦用于驅動程序 */
  lis2dux12_init_set(&dev_ctx, LIS2DUX12_SENSOR_EMB_FUNC_ON);// 啟用嵌入式功能
  platform_delay(10);

PEDO_EN 是一個用于啟用步數(shù)檢測功能的控制位。啟用此功能后,傳感器可以進行步數(shù)計數(shù)。這在運動檢測和健康監(jiān)控應用中非常重要,因為它可以記錄用戶的步數(shù)數(shù)據(jù)。

lis2dux12_stpcnt_mode_t mode;
    lis2dux12_stpcnt_mode_get(&dev_ctx, &mode);// 獲取步數(shù)計模式
  /* Enable pedometer algorithm. */
  mode.step_counter_enable = PROPERTY_ENABLE;// 啟用步數(shù)計
  mode.false_step_rej = PROPERTY_DISABLE;// 禁用誤步拒絕功能
  mode.step_counter_in_fifo = PROPERTY_DISABLE;    // 禁用步數(shù)計 FIFO
  /* Turn on embedded features */
    lis2dux12_stpcnt_mode_set(&dev_ctx, mode) ;// 設置步數(shù)計模式

配置步數(shù)檢測中斷引腳

INT1_STEP_DET 是一個用于步數(shù)檢測中斷的寄存器位。當啟用這個中斷位時,LIS2DUX12 傳感器在檢測到步數(shù)事件時會觸發(fā)中斷信號,并將該信號輸出到指定的中斷引腳(如 INT1)。這使得主機微控制器可以通過中斷響應步數(shù)檢測事件,而不需要不斷輪詢傳感器的狀態(tài)。

INT1_EMB_FUNC 是一個用于配置 LIS2DUX12 傳感器的嵌入式功能中斷的寄存器位。當該位啟用時,傳感器會在嵌入式功能(例如步數(shù)檢測、活動檢測等)觸發(fā)事件時通過 INT1 引腳發(fā)出中斷信號。這個功能使得主機微控制器可以通過中斷快速響應傳感器的嵌入式功能事件,而不需要持續(xù)輪詢傳感器狀態(tài)。

lis2dux12_emb_pin_int_route_t emb_pin_int;
    lis2dux12_emb_pin_int1_route_get(&dev_ctx, &emb_pin_int);// 設置步數(shù)計模式
    emb_pin_int.step_det = PROPERTY_ENABLE;// 設置步數(shù)計模式
    lis2dux12_emb_pin_int1_route_set(&dev_ctx, &emb_pin_int);// 設置嵌入式中斷引腳

中斷檢測步數(shù)

可以通過判斷 INT1_STEP_DET 位來確定步數(shù)事件是否產(chǎn)生。根據(jù)您提供的截圖,INT1_STEP_DET 位位于 EMB_FUNC_INT1 寄存器中。當這個位被設置為 1 時,表示步數(shù)檢測中斷被路由到 INT1 引腳。因此,您可以通過讀取該寄存器來判斷步數(shù)事件是否產(chǎn)生。

EMB_FUNC_REG_ACCESS 是用于訪問和配置 LIS2DUX12 傳感器的嵌入式功能寄存器的寄存器位。啟用 EMB_FUNC_REG_ACCESS 后,可以訪問和配置與嵌入式功能相關的寄存器。這對于啟用步數(shù)檢測、活動檢測、自由落體檢測等功能非常重要。

獲取步數(shù)可以通過STEP_COUNTER_L (28h) 和 STEP_COUNTER_H (29h)進行獲取。

獲取完畢之后關閉EMB_FUNC_REG_ACCESS 。

/* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    if (step_event) {
            lis2dux12_emb_pin_int_route_t emb_pin_int1;
            lis2dux12_emb_pin_int1_route_get(&dev_ctx, &emb_pin_int1);
            if (emb_pin_int1.step_det) 
            {
                lis2dux12_stpcnt_steps_get(&dev_ctx, &steps);
                /* print number of steps  */
                printf("Steps: %drn", steps);
                }        
      step_event = 0;
    }        

        HAL_Delay(10);
    /* USER CODE END WHILE */

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

演示

審核編輯 黃宇

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

    關注

    2541

    文章

    49578

    瀏覽量

    745881
  • 加速度計
    +關注

    關注

    6

    文章

    690

    瀏覽量

    45669
  • 計步器
    +關注

    關注

    4

    文章

    76

    瀏覽量

    19845
  • stm32cubemx
    +關注

    關注

    5

    文章

    278

    瀏覽量

    14581
收藏 人收藏

    評論

    相關推薦

    AI增強型智能加速度計

    。 以下是本周新品情報,請及時查收: 第代MEMS技術 STMicroelectronics LIS2DUX12LIS2DUXS12 AI增強型智能加速度計 貿(mào)澤電子即日起
    的頭像 發(fā)表于 07-12 08:10 ?673次閱讀
    AI增強型智能<b class='flag-5'>加速度計</b>

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

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

    加速度計LIS2DUX12開發(fā)(1)----輪詢獲取加速度數(shù)據(jù)

    本文將介紹如何驅動和利用LIS2DUX12傳感器,實現(xiàn)精確的運動感應功能。 LIS2DUX12是一款數(shù)字式智能3軸線性加速度計,其MEMS和ASIC旨在將盡可能低的電流消耗與豐富的特
    的頭像 發(fā)表于 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'>開發(fā)</b>(1)----輪詢獲取<b class='flag-5'>加速度</b>數(shù)據(jù)

    加速度計LIS2DUX12開發(fā)(2)----靜態(tài)校準

    零偏是影響加速度計輸出精度的重要指標之一,零偏可分為靜態(tài)零偏和動態(tài)零偏 。靜態(tài)零偏也稱為固定零偏,通常經(jīng)標定與補償減小靜態(tài)零偏。動態(tài)零偏是由于加速度計自身的缺陷或環(huán)境因素(如溫度、振動、電子干擾等
    的頭像 發(fā)表于 05-17 15:27 ?865次閱讀
    <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'>開發(fā)</b>(<b class='flag-5'>2</b>)----靜態(tài)校準

    加速度計加速度計的使用區(qū)別?

    有個問題請教一下:在靜態(tài)測量的情況下,兩加速度計在測得X、Y上的加速度后,是不是就可以根據(jù)這兩個值和重力加速度g算出Z
    發(fā)表于 12-29 06:06

    MSP430F5508對LIS2DH12加速度計的驅動設計

    MSP430F5508對LIS2DH12加速度計的驅動設計,見附件
    發(fā)表于 09-23 10:46

    LIS33DE加速度計的特點性能分析

    LIS33DE是一種超小型低功耗的加速度計屬于ST的運動傳感器的“納米”的家庭。它包括一個傳感元件和一個集成電路接口能夠通過I2C和SP
    的頭像 發(fā)表于 05-14 14:24 ?4344次閱讀
    <b class='flag-5'>LIS</b>33DE<b class='flag-5'>三</b><b class='flag-5'>軸</b><b class='flag-5'>加速度計</b>的特點性能分析

    加速度計、陀螺儀和磁力的應用原理

    加速度計是一種慣性傳感器,能夠測量物體的比力,即去掉重力后的整體加速度或者單位質量上作用的非引力。當加速度計保持靜止時,
    的頭像 發(fā)表于 10-09 15:43 ?6493次閱讀

    意法半導體推出款內(nèi)置先進處理引擎的MEMS加速度計

    LIS2DUX12LIS2DUXS12采用意法半導體第代MEMS制造工藝,新增可編程功能,包括機器學習核心(MLC)、先進有限狀態(tài)機(FSM)和增強型計步器。另外一款入門級
    的頭像 發(fā)表于 04-16 09:57 ?1505次閱讀

    貿(mào)澤開售面向可穿戴和始終感知應用的STMicroelectronics LIS2DUX12LIS2DUXS12智能加速度計

    LIS2DUX12LIS2DUXS12 AI增強型智能加速度計。這些加速度計采用STMicroelectronics的第代MEMS技術
    發(fā)表于 06-02 17:43 ?763次閱讀
    貿(mào)澤開售面向可穿戴和始終感知應用的STMicroelectronics <b class='flag-5'>LIS2DUX12</b>和<b class='flag-5'>LIS2DUXS12</b>智能<b class='flag-5'>加速度計</b>

    LIS2DW12 3D數(shù)字加速度計應用筆記

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

    LIS2DH12高性能3軸線性加速度計應用筆記

    電子發(fā)燒友網(wǎng)站提供《LIS2DH12高性能3軸線性加速度計應用筆記.pdf》資料免費下載
    發(fā)表于 07-31 09:52 ?14次下載
    <b class='flag-5'>LIS2DH12</b>高性能<b class='flag-5'>3</b>軸線性<b class='flag-5'>加速度計</b>應用筆記

    LIS2DS12 3D數(shù)字加速度計應用筆記

    電子發(fā)燒友網(wǎng)站提供《LIS2DS12 3D數(shù)字加速度計應用筆記.pdf》資料免費下載
    發(fā)表于 07-31 16:48 ?10次下載
    <b class='flag-5'>LIS2DS12</b> <b class='flag-5'>3</b>D數(shù)字<b class='flag-5'>加速度計</b>應用筆記

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

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

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

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