0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

三轴加速度计LIS2DW12开发(3)----检测活动和静止状态

嵌入式单片机MCU开发 来源:嵌入式单片机MCU开发 作者:嵌入式单片机MC 2023-12-18 10:47 次阅读

概述

检测活动和静止状态主要用途是在嵌入式应用中实时监控加速度计的活动状态,例如在可穿戴设备、智能手机或安全系统中检测用户的动作或设备的位置变化。通过设置不同的阈值和时长,可以精确地确定何时设备处于静止状态,何时发生了活动,从而触发相应的操作或警报。

最近在弄ST和瑞萨RA的课程,需要样片的可以加群申请:615061293 。

在这里插入图片描述

视频教学

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

样品申请

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

源码下载

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

生成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/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);

设置传感器的量程

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:设置加速度计的滤波带宽,LIS2DW12_ODR_DIV_4 表示滤波器的截止频率为输出数据率(ODR)的四分之一。

配置电源模式

lis2dw12_power_mode_set(&dev_ctx, LIS2DW12_CONT_LOW_PWR_12bit);配置电源模式。这里设置为连续低功耗模式,且以 12 位分辨率运行。

设置加速度计的唤醒持续时间

lis2dw12_wkup_dur_set:设置加速度计的唤醒持续时间,此处设置为“2”,具体的时间取决于输出数据率(ODR)的倒数。

在这里插入图片描述

设置进入睡眠模式前的持续时间

lis2dw12_act_sleep_dur_set:设置进入睡眠模式前的持续时间,单位为输出数据率(ODR)的512分之一秒。

在这里插入图片描述

设置唤醒加速度计所需的活动阈值

如果设备由于静止或处于静止状态而进入睡眠模式,并且随后它检测到超过WAKE_UP_THS (34h)中设置的阈值的运动,它将从静止状态过渡到唤醒状态。这意味着它将重新开始更积极地监测运动。

在这里插入图片描述

lis2dw12_wkup_threshold_set:设置唤醒加速度计所需的活动阈值,这里设置为“2”,每个 LSB(最低有效位)等于全量程的1/64。

在这里插入图片描述

配置唤醒中断函数

lis2dw12_wkup_feed_data_set:配置唤醒中断函数所使用的数据类型。活动/静止功能可以使用高通滤波或偏移输出来确定设备的状态。这可以通过CTRL7 (3Fh)中的USR_OFF_ON_OUT位来配置。

在这里插入图片描述

在这里插入图片描述

/* Data sent to wake-up interrupt function */
  lis2dw12_wkup_feed_data_set(&dev_ctx, LIS2DW12_HP_FEED);

加速度计检测活动或静止的模式

lis2dw12_act_mode_set:设置加速度计检测活动或静止的模式,LIS2DW12_DETECT_ACT_INACT 用于配置设备以检测活动或静止状态。
这些检测功能的阈值和持续时间可以通过两个控制寄存器进行配置:
WAKE_UP_THS (34h) 用于设置唤醒的阈值水平。
WAKE_UP_DUR (35h) 用于设置唤醒和静止状态的持续时间。

在这里插入图片描述

在WAKE_UP_THS (34h)中设置SLEEP_ON位以启用静止状态检测。

在这里插入图片描述

在这里插入图片描述

/* Config activity / inactivity or stationary / motion detection */
  lis2dw12_act_mode_set(&dev_ctx, LIS2DW12_DETECT_ACT_INACT);

启用唤醒中断

lis2dw12_pin_int1_route_get 和 lis2dw12_pin_int1_route_set:这两个函数配合使用来获取和设置中断路由配置。首先获取当前的中断路由配置,然后启用唤醒中断(int1_wu),最后将配置写回加速度计。

在这里插入图片描述

/* Enable activity detection interrupt */
  lis2dw12_pin_int1_route_get(&dev_ctx, &int_route.ctrl4_int1_pad_ctrl);
  int_route.ctrl4_int1_pad_ctrl.int1_wu = PROPERTY_ENABLE;
  lis2dw12_pin_int1_route_set(&dev_ctx, &int_route.ctrl4_int1_pad_ctrl);

设置输出数据速率

设置加速度计的数据输出速率,LIS2DW12_XL_ODR_200Hz 表示每秒输出200个数据点。

/* Set Output Data Rate */
  lis2dw12_data_rate_set(&dev_ctx, LIS2DW12_XL_ODR_200Hz);

检测活动状态

可以不断地检查 LIS2DW12 加速度计的状态,以确定是否检测到活动或静止(无活动)事件。
sleep_state_ia 位,如果该位被设置(通常表示检测到静止状态)。
wu_ia 位,如果该位被设置(通常表示检测到活动状态)。
在这里插入图片描述

/* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
		
    lis2dw12_all_sources_t all_source;
    /* Read status register */
    lis2dw12_all_sources_get(&dev_ctx, &all_source);

    /* Check if Activity/Inactivity events */
    if (all_source.wake_up_src.sleep_state_ia) 
		{		
      printf("Inactivity Detectedrn");
    }

    if (all_source.wake_up_src.wu_ia) {
      printf("Activity Detectedrn");
    }		

    /* USER CODE END WHILE */

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

演示

在这里插入图片描述

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • mems
    +关注

    关注

    128

    文章

    3769

    浏览量

    189295
  • 加速度计
    +关注

    关注

    6

    文章

    679

    浏览量

    45542
  • 三轴加速度计

    关注

    1

    文章

    23

    浏览量

    13292
  • stm32cubemx
    +关注

    关注

    5

    文章

    269

    浏览量

    14495
收藏 人收藏

    评论

    相关推荐

    e2studio开发三轴加速度计LIS2DW12(3)----检测活动和静止状态

    本文将介绍实时获取和处理加速度数据。程序的核心流程包括初始化硬件接口、配置加速度计的参数,以及通过轮询检查中断信号来不断读取加速度数据。
    的头像 发表于 05-17 14:51 656次阅读
    e2studio<b class='flag-5'>开发</b>三轴<b class='flag-5'>加速度计</b><b class='flag-5'>LIS2DW12</b>(3)----<b class='flag-5'>检测</b><b class='flag-5'>活动</b><b class='flag-5'>和静止</b><b class='flag-5'>状态</b>

    e2studio开发三轴加速度计LIS2DW12(4)----测量倾斜度

    本文将介绍如何驱动和利用LIS2DW12三轴加速度计的倾斜检测理论和倾斜角测量方法。一般来说,这里描述的程序也可以应用于三轴模拟或数字加速度计,这取决于它们各自的规格。
    的头像 发表于 05-17 15:00 665次阅读
    e2studio<b class='flag-5'>开发</b>三轴<b class='flag-5'>加速度计</b><b class='flag-5'>LIS2DW12</b>(4)----测量倾斜度

    加速度计加速度计的使用区别?

    有个问题请教一下:在静态测量的情况下,两加速度计在测得X、Y上的加速度后,是不是就可以根据这两个值和重力加速度g算出Z
    发表于 12-29 06:06

    MSP430F5508对LIS2DH12加速度计的驱动设计

    MSP430F5508对LIS2DH12加速度计的驱动设计,见附件
    发表于 09-23 10:46

    请问两加速度计加速度计的使用区别是什么?

    有个问题请教一下:在静态测量的情况下,两加速度计在测得X、Y上的加速度后,是不是就可以根据这两个值和重力加速度g算出Z
    发表于 08-08 09:12

    LIS2DW12如何保留引脚功能?

    你好,我正在调试我的定制板,我在上面焊接了一个 LIS2DW12 加速度计。我忘了按照数据表中的建议将保留的引脚 (7) 接地。这就是我连接它的方式:这是它应该如何连接:这是必需的,加速度计可以正常
    发表于 12-27 06:57

    LIS2DW12定向位问题求解

    您好,我们正在使用加速度计 LIS2DW12。根据数据表中的图表。如果加速度计处于这种状态,我们会看到 zlzh 方向位升高了吗?
    发表于 01-03 09:35

    是否可以使用LIS2DW12加速度计进行倾斜角度检测呢?

    我正在使用 LIS2DW12 加速度计进行倾斜角度检测是否可以如图所示检测两个方向的倾斜角度(A和B)并在唤醒中断模式下触发中断事件?在 6d 方向模式下是可能的,但我需要唤醒中断模式
    发表于 01-05 07:01

    关于LIS2HH12TR读加速度计的问题求解

    大家好: 我在使用LIS2HH123 “pico”加速度计时遇到了 读数不准的问题,请大家看一下。 首先我的应用场景:安装在设备上,FPGA通过IIC时刻读出当前的位置,不会有突
    发表于 08-07 14:45

    LIS2DW12相关资料分享

    LIS2DW12 是系统级封装的 3D 数字加速度计,具有数字 I²C/SPI 串口标准输出,在高分辨率模式下功耗 90 µA,在低功耗模式下功耗低于 1 µA。由于加速度计具有超低噪
    发表于 09-06 06:03

    LIS2DW12的应用笔记

    本文档旨在提供 ST 的 LIS2DW12 运动传感器相关的使用信息和应用提示。LIS2DW12 是系统级封装的 3D 数字加速度计,具有数字 I²C/SPI 串口标准输出,在高分辨率
    发表于 09-13 06:58

    用于汽车应用的AIS2DW12超低功耗3加速度计

    本文档旨在提供 STAIS2DW12 运动传感器相关的使用信息和应用提示。AIS2DW12 是一种超低功耗轴线性加速度计,设计用于处理非安全汽车应用,利用了已用于微型机械
    发表于 09-13 06:33

    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具备自测功能,可在最终应用中验证传感器功能,并集成了一个处理运动和加速度检测的内部引擎。这包括自由落体、唤醒、敲击识别、活动/
    的头像 发表于 01-09 16:21 385次阅读
    e2studio<b class='flag-5'>开发</b>三轴<b class='flag-5'>加速度计</b><b class='flag-5'>LIS2DW12</b>(1)----轮询获取<b class='flag-5'>加速度</b>数据

    三轴加速度计LIS2DW12开发(4)----测量倾斜度

    本文将介绍如何驱动和利用LIS2DW12三轴加速度计的倾斜检测理论和倾斜角测量方法。一般来说,这里描述的程序也可以应用于三轴模拟或数字加速度计,这取决于它们各自的规格。
    的头像 发表于 05-16 17:18 187次阅读
    三轴<b class='flag-5'>加速度计</b><b class='flag-5'>LIS2DW12</b><b class='flag-5'>开发</b>(4)----测量倾斜度