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

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

3天内不再提示

陀螺仪LSM6DSV16X与AI集成(4)----Qvar触摸电容配置

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

概述

Qvar,全称为电荷变化检测(Qvar stands for "Quasi-static VARiation"),是一种用于检测电荷变化的技术。这种技术通常用于传感器和其他电子设备中,特别是在惯性测量单元(IMU)和微机电系统(MEMS)技术中。Qvar 技术可以用于检测微小的电荷变化,这些变化可能是由于物理运动、环境变化或其他因素导致的。 在 LSM6DSV16X 这类先进的 IMU 中,Qvar 技术用于增强用户界面功能,如轻触、双击、三击、长按或滑动手势。它通过检测和解析与这些手势相关的微小电荷变化,来实现高度精准和灵敏的用户交互。 最近在弄ST和瑞萨RA的课程,需要样片的可以加群申请:615061293 。

视频教学

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

样品申请

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

源码下载

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

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

Qvar 功能的实现和配置

  1. Qvar 传感器功能: ○ LSM6DSV16X 内置了 Qvar 传感器,能够检测连接到设备的外部电极附近的电荷变化。
  2. 激活 Qvar 功能: ○ 通过设置 CTRL7(16h)寄存器中的 AH_QVAR_EN 位为 1,可以激活 Qvar 通道。
  3. 加速度计设置要求: ○ 当启用 Qvar 通道时,加速度计必须设置为高性能模式或正常模式。
  4. 数据准备信号: ○ Qvar 数据准备好的信号由 STATUS_REG(1Eh)寄存器中的 AH_QVARDA 位表示。这个信号可以通过设置 CTRL7(16h)寄存器中的 INT2_DRDY_AH_QVAR 位为 1,来驱动到 INT2 引脚。
  5. Qvar 数据输出: ○ Qvar 数据以 16 位二进制补码形式提供,在 AH_QVAR_OUT_L(3Ah)和 AH_QVAR_OUT_H(3Bh)寄存器中以固定 240 Hz 的速率输出。
  6. 数据处理: ○ Qvar 数据也可以被机器学习核心(MLC)/有限状态机(FSM)逻辑处理。
  7. 接口模式限制: ○ Qvar 功能仅在 I²C 接口的模式 1 连接模式下可用。当使用 Qvar 时,不支持 I²C 主接口(模式 2)和辅助 SPI(模式 3)。
  8. 外部电极连接: ○ 外部电极需要连接到引脚 2(SDx/AH1/Qvar1)和/或引脚 3(SCx/AH2/Qvar2)。
  9. 输入阻抗选择: ○ 通过在 CTRL7(16h)寄存器中适当设置 AH_QVAR_C_ZIN_[1:0] 位,可以选择 Qvar 缓冲器的等效输入阻抗。

设置量程和速率

速率可以通过CTRL1 (10h)设置加速度速率。

设置加速度量程可以通过CTRL8 (17h)进行设置。

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

lsm6dsv16x_xl_data_rate_set(&dev_ctx, LSM6DSV16X_ODR_AT_15Hz);
  lsm6dsv16x_xl_full_scale_set(&dev_ctx, LSM6DSV16X_2g);

配置过滤链

/* Configure filtering chain */
  filt_settling_mask.drdy = PROPERTY_ENABLE;
  filt_settling_mask.irq_xl = PROPERTY_ENABLE;
  filt_settling_mask.irq_g = PROPERTY_ENABLE;
  lsm6dsv16x_filt_settling_mask_set(&dev_ctx, filt_settling_mask);
  lsm6dsv16x_filt_xl_lp2_set(&dev_ctx, PROPERTY_ENABLE);
  lsm6dsv16x_filt_xl_lp2_bandwidth_set(&dev_ctx, LSM6DSV16X_XL_STRONG);

激活 Qvar 功能

通过设置 CTRL7(16h)寄存器中的 AH_QVAR_EN 位为 1,可以激活 Qvar 通道。

/* Enable AH/QVAR function */
  qvar_mode.ah_qvar_en = 1;
  lsm6dsv16x_ah_qvar_mode_set(&dev_ctx, qvar_mode);

获取Qvar数据

可以通过STATUS_REG (1Eh)的AH_QVARDA获取数据是否准备好。

Qvar 数据以 16 位二进制补码形式提供,在 AH_QVAR_OUT_L(3Ah)和 AH_QVAR_OUT_H(3Bh)寄存器中以固定 240 Hz 的速率输出。

/* Read output only if new values are available */
    lsm6dsv16x_all_sources_get(&dev_ctx, &all_sources);
    if ( all_sources.drdy_ah_qvar ) {
      lsm6dsv16x_ah_qvar_raw_get(&dev_ctx, &data);
            printf("QVAR [mV]:%6.2frn", lsm6dsv16x_from_lsb_to_mv(data));

    }        
        HAL_Delay(10);

演示

触摸上按键。

触摸下按键。

审核编辑:汤梓红

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

    关注

    2548

    文章

    50765

    浏览量

    752182
  • mems
    +关注

    关注

    129

    文章

    3905

    浏览量

    190388
  • 陀螺仪
    +关注

    关注

    44

    文章

    780

    浏览量

    98593
  • AI
    AI
    +关注

    关注

    87

    文章

    30272

    浏览量

    268498
收藏 人收藏

    评论

    相关推荐

    陀螺仪LSM6DSV16XAI集成(1)----轮询获取陀螺仪数据

    本文将介绍如何使用 LSM6DSV16X 传感器来读取数据。主要步骤包括初始化传感器接口、验证设备ID、配置传感器的数据输出率和滤波器,以及通过轮询方式持续读取加速度、角速率和温度数据。读取到的数据
    的头像 发表于 12-18 10:49 1620次阅读
    <b class='flag-5'>陀螺仪</b><b class='flag-5'>LSM6DSV16X</b>与<b class='flag-5'>AI</b><b class='flag-5'>集成</b>(1)----轮询获取<b class='flag-5'>陀螺仪</b>数据

    陀螺仪LSM6DSV16XAI集成(2)----姿态解算

    LSM6DSV16X包含三轴陀螺仪与三轴加速度计。
    的头像 发表于 12-18 10:51 2102次阅读
    <b class='flag-5'>陀螺仪</b><b class='flag-5'>LSM6DSV16X</b>与<b class='flag-5'>AI</b><b class='flag-5'>集成</b>(2)----姿态解算

    陀螺仪LSM6DSV16XAI集成(3)----读取融合算法输出的四元数

    LSM6DSV16X 特性涉及到的是一种低功耗的传感器融合算法(Sensor Fusion Low Power, SFLP). 低功耗传感器融合(SFLP)算法:
    的头像 发表于 12-18 10:53 1149次阅读
    <b class='flag-5'>陀螺仪</b><b class='flag-5'>LSM6DSV16X</b>与<b class='flag-5'>AI</b><b class='flag-5'>集成</b>(3)----读取融合算法输出的四元数

    陀螺仪LSM6DSV16XAI集成(7)----FIFO数据读取与配置

    LSM6DSV16X是一款高性能、低功耗的6轴IMU传感器,集成了3轴加速度计和3轴陀螺仪。本文将详细介绍如何配置和读取
    的头像 发表于 07-18 10:40 1397次阅读
    <b class='flag-5'>陀螺仪</b><b class='flag-5'>LSM6DSV16X</b>与<b class='flag-5'>AI</b><b class='flag-5'>集成</b>(7)----FIFO数据读取与<b class='flag-5'>配置</b>

    陀螺仪LSM6DSV16XAI集成(11)----融合磁力计进行姿态解算

    MotionFX库包含用于校准陀螺仪、加速度计和磁力计传感器的例程。 将磁力计的数据与加速度计和陀螺仪的数据融合,可以大幅提高姿态估计的精度。三轴加速度计提供设备的倾斜信息,陀螺仪提供角速度信息,而磁力计提供方位信息,三者结合可
    的头像 发表于 09-06 16:57 1862次阅读
    <b class='flag-5'>陀螺仪</b><b class='flag-5'>LSM6DSV16X</b>与<b class='flag-5'>AI</b><b class='flag-5'>集成</b>(11)----融合磁力计进行姿态解算

    LSM6DSV16X基于MLC智能笔动作识别(2)----MLC数据采集

    MLC 是“机器学习核心”(Machine Learning Core)的缩写。在 LSM6DSV16X 传感器 中,MLC 是一种嵌入式功能,它使传感器能够直接运行基于决策树的机器学习算法。通过
    的头像 发表于 10-22 10:02 683次阅读
    <b class='flag-5'>LSM6DSV16X</b>基于MLC智能笔动作识别(2)----MLC数据采集

    陀螺仪LSM6DSV16XAI集成(13)----中断获取SFLP四元数

    本文将介绍如何通过中断机制获取 LSM6DSV16X 传感器的 SFLP(Sensor Fusion Low Power)四元数数据。LSM6DSV16X 是一款高性能的 6 轴惯性传感器,支持
    的头像 发表于 11-25 11:44 430次阅读
    <b class='flag-5'>陀螺仪</b><b class='flag-5'>LSM6DSV16X</b>与<b class='flag-5'>AI</b><b class='flag-5'>集成</b>(13)----中断获取SFLP四元数

    陀螺仪LSM6DSV16XAI集成(14)----上报匿名上位机

    本文介绍了如何将 LSM6DSV16X 传感器的姿态数据通过匿名通信协议上报到上位机。通过获取传感器的四元数数据,并将其转换为欧拉角(Roll、Pitch、Yaw),然后按照协议格式化数据帧并通过
    的头像 发表于 11-25 11:53 447次阅读
    <b class='flag-5'>陀螺仪</b><b class='flag-5'>LSM6DSV16X</b>与<b class='flag-5'>AI</b><b class='flag-5'>集成</b>(14)----上报匿名上位机

    请问lsm6dsv16x可以直接读取触摸手势吗?

    已经读出来了LSM6DSV16x的QVRmv值,也写出了单击的状态机。但是在写触摸滑动手势时没有找到好的计算方式。请问是不是有直接读出这些手势的函数?
    发表于 07-02 08:14

    求助,是否有在LSM6DSV16X中使用传感器融合低功耗算法的示例

    你好我想知道是否有在 LSM6DSV16X 中使用传感器融合低功耗算法的示例。我想检索当前的 Heading、Pitch 和 Roll 信息。或者我也很高兴有一个例子解释如何从 SFLP 中获取四元
    发表于 02-03 09:12

    ST LSM6DSV16X iNEMO惯性模块相关的使用信息和应用提示

    AN5763,LSM6DSV16X是一款ST的3 轴加速度计和 3 轴陀螺仪LSM6DSV16X 是系统级封装的 3 轴数字加速度计和 3 轴数字陀螺仪,具有数字 I²C、SPI
    发表于 08-31 11:12 0次下载

    陀螺仪LSM6DSV16XAI集成(5)----6D方向检测功能

    4.Y轴反向旋转、5.Z轴正向旋转、6.Z轴反向旋转 通过检测陀螺仪在每个方向上的旋转,可以确定物体的旋转姿态和方向,从而用于导航、飞行控制等应用。
    的头像 发表于 01-09 16:14 1064次阅读
    <b class='flag-5'>陀螺仪</b><b class='flag-5'>LSM6DSV16X</b>与<b class='flag-5'>AI</b><b class='flag-5'>集成</b>(5)----<b class='flag-5'>6</b>D方向检测功能

    意法半导体发布LSM6DSV32X 6轴惯性模块

    意法半导体近日发布了其最新的LSM6DSV32X 6轴惯性模块(IMU),该模块集成了高性能的加速度计和陀螺仪。加速度计的最大量程达到32g,而陀螺
    的头像 发表于 05-13 09:59 630次阅读

    LSM6DSV16X基于MLC智能笔动作识别(1)----轮询获取陀螺仪数据

    本文将介绍如何使用 LSM6DSV16X 传感器来读取数据。主要步骤包括初始化传感器接口、验证设备ID、配置传感器的数据输出率和滤波器,以及通过轮询方式持续读取加速度、角速率和温度数据。读取到的数据
    的头像 发表于 10-16 10:38 286次阅读
    <b class='flag-5'>LSM6DSV16X</b>基于MLC智能笔动作识别(1)----轮询获取<b class='flag-5'>陀螺仪</b>数据

    LSM6DSV16X基于MLC智能笔动作识别(4)----中断获取智能笔状态

    LSM6DSV16X 支持通过中断(INT)输出 MLC(机器学习核)识别的动作。具体来说,MLC 可以配置为在满足某些条件或机器学习分类结果发生变化时生成中断信号。 LSM6DSV16X 的机器
    的头像 发表于 11-25 11:39 93次阅读
    <b class='flag-5'>LSM6DSV16X</b>基于MLC智能笔动作识别(<b class='flag-5'>4</b>)----中断获取智能笔状态