VL53L4CD TOF开发(4)----单次测量(One-Shot)模式

VL53L4CD TOF开发.4--单次测量(One-Shot)模式

  • 概述
  • 视频教学
  • 样品申请
  • 完整代码下载
  • 实现demo
  • 硬件准备
  • 技术规格
  • 系统框图
  • 应用示意图
  • 生成STM32CUBEMX
    • 选择MCU
    • 串口配置
    • IIC配置
  • XSHUT
  • GPIO1
  • X-CUBE-TOF1
  • app_tof.c
  • 详细解释
  • 主程序
  • 演示结果

概述

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

在现代嵌入式系统中,精确的距离测量和实时响应能力对于许多应用场景至关重要。VL53L4CD 是一款先进的飞行时间(Time-of-Flight, ToF)传感器,能够提供高精度的距离测量。本文介绍了如何基于VL53L4CD传感器实现连续测距,并通过配置检测阈值来优化系统的响应能力。

我们将详细讲解如何初始化VL53L4CD传感器,设置其测量参数和检测阈值,并实现中断配置以响应特定的测量条件。通过这种方式,系统能够在距离测量达到预设的阈值范围内触发中断,从而实现实时响应和高效数据处理。
在这里插入图片描述

视频教学

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

VL53L4CD TOF开发(4)----单次测量(One-Shot)模式

样品申请

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

完整代码下载

实现demo

  1. 传感器初始化:介绍如何正确初始化 VL53L4CD 传感器,包括系统时钟配置和外设初始化。
  2. 传感器配置:讲解如何配置传感器的测量参数,包括测距模式、时间预算和环境光测量设置。
  3. 单次测量实现:演示如何启动传感器进行单次测量,获取测量结果,并在每次测量后停止传感器以准备下一次测量。
  4. 应用示例:提供一个实际的应用示例代码,展示如何在嵌入式系统中实现单次测量模式,并处理测量结果以适应具体应用需求。

硬件准备

首先需要准备一个开发板,这里我准备的是自己绘制的开发板,需要的可以进行申请。
在这里插入图片描述
在这里插入图片描述

技术规格

在这里插入图片描述

系统框图

在这里插入图片描述

在这里插入图片描述

应用示意图

在这里插入图片描述

生成STM32CUBEMX

选择MCU

测试版所用的MCU为STM32G431CB。

在这里插入图片描述

串口配置

查看原理图,PA9和PA10设置为开发板的串口。

在这里插入图片描述

配置串口。

在这里插入图片描述

IIC配置

在这个应用中,VL53L4CD模块通过I2C(IIC)接口与主控器通信。具体来说,VL53L4CD模块的I2C引脚连接到主控器的PA8和PB5两个IO口。

在这里插入图片描述

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

在这里插入图片描述

XSHUT

XSHUT引脚是由主机连接和控制的,这种设计优化了功耗,因为设备在不使用时可以被完全关闭,然后通过主机使用XSHUT引脚来唤醒。当AVDD存在且XSHUT为低电平时,设备处于硬件待机模式(HW Standby mode)。如果XSHUT引脚不由主机控制,而是通过上拉电阻连接到AVDD,那么设备在固件启动(FW BOOT)后会自动进入软件待机(SW STANDBY),而不会进入硬件待机。

在这里插入图片描述

在这里插入图片描述

GPIO1

当传感器完成一次测距操作时,GPIO1引脚可以被配置为输出中断信号,通知微控制器读取测量结果。
这种方式比持续轮询传感器状态更加高效,尤其在低功耗应用中非常有用。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

X-CUBE-TOF1

本节介绍在不需要使用样例应用时如何使用STM32CubeMX将X-CUBE-TOF1软件包添加到项目中。有了这样的设置,就只配置了驱动层。

在这里插入图片描述

app_tof.c

app_tof.c定义了一个静态函数 MX_VL53L4CD_SimpleRanging_Process,用于配置和执行VL53L4CX传感器的简单测距操作。
在这里插入图片描述

详细解释

  1. CUSTOM_RANGING_SENSOR_ReadID(CUSTOM_VL53L4CD, &Id);:
    ○ 读取传感器的ID,并将其存储在变量 Id 中。
  2. CUSTOM_RANGING_SENSOR_GetCapabilities(CUSTOM_VL53L4CD, &Cap);:
    ○ 获取传感器的能力,并将其存储在 Cap 结构中。
  3. 配置 Profile 结构的参数:
    ○ Profile.RangingProfile 设置测距模式。
    ○ Profile.TimingBudget 设置测量时间预算。
    ○ Profile.Frequency 设置为0,不用于正常测距。
    ○ Profile.EnableAmbient 启用环境光测量。
    ○ Profile.EnableSignal 启用信号测量。
  4. CUSTOM_RANGING_SENSOR_ConfigProfile(CUSTOM_VL53L4CD, &Profile);:
    ○ 如果配置文件与默认配置不同,则应用新的配置文件。
  5. CUSTOM_RANGING_SENSOR_Start(CUSTOM_VL53L4CD, RS_MODE_BLOCKING_CONTINUOUS);:
    ○ 启动传感器,设置为阻塞连续测量模式。
  6. while (1) 循环:
    ○ 在无限循环中,定期读取传感器的距离数据。
    ○ 如果成功读取距离数据,则调用 print_result(&Result) 打印结果。
    ○ 使用 HAL_Delay(POLLING_PERIOD) 延迟一段时间,以控制轮询频率。

main.c种添加头文件。

/* USER CODE BEGIN Includes */
#include "app_tof.h"
#include "custom_ranging_sensor.h"

/* USER CODE END Includes */

添加对应变量。

/* USER CODE BEGIN 0 */
#define TIMING_BUDGET (200U) /* 8 ms < TimingBudget < 200 ms */
#define POLLING_PERIOD (250U) /* refresh rate for polling mode (ms, shall be consistent with TimingBudget value) */


static RANGING_SENSOR_Capabilities_t Cap;
static RANGING_SENSOR_ProfileConfig_t Profile;
static RANGING_SENSOR_Result_t Result;
static int32_t status = 0;

static void print_result(RANGING_SENSOR_Result_t *Result);
static int32_t decimal_part(float_t x);
/* USER CODE END 0 */

修改 Profile.RangingProfile 为自主测量模式,同事开启单次测量。

  /* USER CODE BEGIN 2 */

  uint32_t Id;

  CUSTOM_RANGING_SENSOR_ReadID(CUSTOM_VL53L4CD, &Id);// 读取传感器ID并存储在Id变量中
  CUSTOM_RANGING_SENSOR_GetCapabilities(CUSTOM_VL53L4CD, &Cap);// 获取传感器的能力并存储在Cap变量中

  Profile.RangingProfile = VL53L4CD_PROFILE_AUTONOMOUS;// 设置测距配置文件为自主测量模式
  Profile.TimingBudget = TIMING_BUDGET;// 设置测距的时间预算(以毫秒为单位)
  Profile.Frequency = 0; // 设置测量频率为0,这意味着使用测量之间的间隔时间,而不是连续测量
  Profile.EnableAmbient = 1; // 启用环境光测量
  Profile.EnableSignal = 1; // 启用信号测量

	// 如果配置文件与默认配置文件不同,则应用新的配置文件
  CUSTOM_RANGING_SENSOR_ConfigProfile(CUSTOM_VL53L4CD, &Profile);
	// 启动传感器进行单次测量
  status = CUSTOM_RANGING_SENSOR_Start(CUSTOM_VL53L4CD, RS_MODE_BLOCKING_ONESHOT);
	
  /* USER CODE END 2 */

主程序

轮询方式检测 GPIO 引脚状态,并在满足条件时获取 VL53L4CD 传感器的测距结果并进行处理。
检查 GPIO 引脚状态,当 GPIO 引脚状态为低电平(表示测量完成且数据已准备好)时,进行以下操作:
● 调用 CUSTOM_RANGING_SENSOR_GetDistance(CUSTOM_VL53L4CD, &Result); 获取测距结果。
● 如果测量成功,调用 print_result(&Result); 打印测距结果。
● 停止当前测量以准备下一次测量。
● 再次启动单次测量。

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
	if(HAL_GPIO_ReadPin  ( GPIOB, GPIO_PIN_15) ==0)		
	{		
    /* polling mode */
    status = CUSTOM_RANGING_SENSOR_GetDistance(CUSTOM_VL53L4CD, &Result);

    if (status == BSP_ERROR_NONE)
    {
      print_result(&Result);
    }
		// 停止测量
		CUSTOM_RANGING_SENSOR_Stop(CUSTOM_VL53L4CD);
		HAL_Delay(1000);
		// 再次启动传感器进行单次测量
		status = CUSTOM_RANGING_SENSOR_Start(CUSTOM_VL53L4CD, RS_MODE_BLOCKING_ONESHOT);
	}
    /* USER CODE END WHILE */

//  MX_TOF_Process();
    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */

演示结果

配置成功,数据可以正常打印。

在这里插入图片描述
若对部分代码进行注释,可以查看到测距只执行一次,可以判断当前已经进入单次模式。
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/715853.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Spark常见的可以优化的点

Shuffle 复用 # 1.以下操作会复用的shuffle结果&#xff0c;只会读一遍数据源 val rdd1 sc.textFile("hdfs://zjyprc-hadoop/tmp/hive-site.xml").flatMap(_.split(" ")).map(x > (x,1)).reduceByKey(_ _).filter(_._2 > 1) rdd1.count() rdd1.fil…

H5小程序视频编辑解决方案,广泛适用,灵活部署

如何在微信小程序、网页、HTML5等WEB场景中实现轻量化视频制作&#xff0c;满足多样化的运营需求&#xff0c;一直是企业面临的挑战。美摄科技凭借其在视频编辑领域的深厚积累和创新技术&#xff0c;为企业量身打造了一套H5/小程序视频编辑解决方案&#xff0c;助力企业轻松应对…

函数(上)(C语言)

函数(上&#xff09; 一. 函数的概念二. 函数的使用1. 库函数和自定义函数(1) 库函数(2) 自定义函数的形式 2. 形参和实参3. return语句4. 数组做函数参数 一. 函数的概念 数学中我们其实就见过函数的概念&#xff0c;比如&#xff1a;一次函数ykxb&#xff0c;k和b都是常数&a…

Java17 --- SpringSecurity之OAuth2

一、OAuth2 1.1、使用github以授权码方式 1.1.1、注册应用程序 1.1.2、测试代码 pom依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-oauth2-client</artifactId></dependency> spring…

python flask配置数据库并进行orm操作 flask_sqlalchemy

&#x1f308;所属专栏&#xff1a;【Flask】✨作者主页&#xff1a; Mr.Zwq✔️个人简介&#xff1a;一个正在努力学技术的Python领域创作者&#xff0c;擅长爬虫&#xff0c;逆向&#xff0c;全栈方向&#xff0c;专注基础和实战分享&#xff0c;欢迎咨询&#xff01; 您的点…

LeetCode | 28.找出字符串中第一个匹配项的下标 KMP

这是字符串匹配问题&#xff0c;朴素做法是两重遍历&#xff0c;依次从主串的i位置开始查看是否和模式串匹配&#xff0c;若不匹配就换下一个位置进行判断&#xff0c;直到找到或者遍历完&#xff0c;时间复杂度 O ( m n ) O(m \times n) O(mn) 还可以对主串进行处理&#xff…

第一个 JavaFX 应用程序

在本教程中&#xff0c;我将向你展示如何创建您的第一个 JavaFX 应用程序。因此&#xff0c;本教程既可以向你介绍核心 JavaFX 概念&#xff0c;也可以为你提供一些 JavaFX 代码&#xff0c;你可以将其用作你自己的实验的模板。 JavaFX 应用程序类 JavaFX 应用程序需要一个主…

【论文复现|智能算法改进】基于多策略融合灰狼算法的移动机器人路径规划

目录 1.算法原理2.改进点3.结果展示4.参考文献5.代码获取 1.算法原理 【智能算法】灰狼算法&#xff08;GWO&#xff09;原理及实现 2.改进点 混沌反向学习策略 融合Logistic混沌映射和Tent混沌映射生成Logistic-Tent复合混沌映射: Z i 1 { ( r Z i ( 1 − Z i ) ( 4 −…

下载mysql-8.0.33-1.el7.x86_64.rpm-bundle.tar操作教程

1、下载地址&#xff1a;MySQL :: Download MySQL Community Server (Archived Versions) 2、截图如下

中华老字号李良济,展现百年匠心之魅力,释放千年中医药文化自信

6月14-16日&#xff0c;“潮品老字号 国货LU锋芒”江苏老字号博览会在南京隆重启幕&#xff0c;中华老字号李良济凭借过硬的品牌实力和优质的口碑再次受邀参加&#xff0c;并在展会上绽放百年匠心魅力&#xff0c;彰显千年中医药文化自信&#xff01; 百年匠心 以实力铸就荣耀…

Autosar诊断-FIM模块功能介绍

文章目录 前言一、FIM模块概述二、FID概念介绍Event ID和DTC之间的关系Event ID与FID之间的关系FIM数据结构三、FiM模块与SW-C模块交互关系四、FIM模块函数调用关系FiM功能模块作用过程前言 Autosar诊断的主体为UDS(Unified Diagnostic Services)协议,即统一的诊断服务,是…

linux如何部署前端项目和安装nginx

要在Linux上部署前端项目并安装Nginx&#xff0c;你可以按照以下步骤操作&#xff1a; 安装Nginx: sudo apt update sudo apt install nginx 启动Nginx服务: sudo systemctl start nginx 确保Nginx服务开机自启: sudo systemctl enable nginx 部署前端项目&#xff0c;假设前…

PromptMRG: Diagnosis-Driven Prompts for Medical Report Generation

文章汇总 存在的问题 罕见疾病在训练数据中的代表性不足&#xff0c;使其诊断性能不可靠。 解决办法 1&#xff1a;利用预训练的CLIP模型从数据库中检索相似的报告来辅助查询图像的诊断。 2&#xff1a;设计SDL模块根据不同疾病的学习状态自适应调整优化目标。 流程解读 文…

MPLS VPN一

R1为客户&#xff0c;现在进行一些基本配置&#xff0c;来确保可以通路由 先启动OSPF跑通 在R3上 等一会 现在启动MPLS 对R3 对R4 然后在R2上 再把接口划到空间里面 原来的IP在公网里面&#xff0c;被清除了 然后再配置接口 查看 对R1&#xff08;相当于客户&#xff09; …

2024年最易被破解的密码TOP50,你中招了吗?

今天&#xff0c;我们要聊聊一个每个人都会用到&#xff0c;但可能并不那么重视的话题——密码安全。密码&#xff0c;这个看似简单的字符组合&#xff0c;其实与我们的信息安全、财产安全密切相关。想象一下&#xff0c;如果你的手机、邮箱、银行账户等都被一个简单的密码保护…

vulnhub靶机hacksudoLPE中Challenge-1

下载地址&#xff1a;https://download.vulnhub.com/hacksudo/hacksudoLPE.zip 主机发现 目标146 端口扫描 服务扫描 漏洞扫描 上面那整出来几个洞&#xff0c;可以试试 easy&#xff1f; 估计就是看源码 看来是的 登入咯 这里进不去就是ssh咯 这个看着有点像提权的操作 一…

Java与数据库连接技术JDBC关键核心之PreparedStatement以及SQL注入演示解决和原理

PreparedStatement SQL注入 执行预编译的SQL对象 这样也能登录成功 模拟 SQL注入是这个原因 现在基本上不存在SQL注入的问题 解决 SQL注入就是传一些语句导致原来的SQL语句改变了 修改代码 通过设置参数的方式 就能防止SQL注入 实际上我们进行了一个转化 将字符和关键字进…

【健身经验】3 拜拜肉

1 女性手臂粗细与紧实程度&#xff0c;除了取决于运动和生活习惯&#xff0c;很大程度上取决于遗传因素 2 2 如果体脂已经很正常了&#xff0c;整体看起来匀称不胖&#xff0c;偏偏这两块肌肉附近的脂肪“顽固不化”的话&#xff0c;可以试试以下两个简单方法 对于体脂率正常…

Python第二语言(十一、Python面向对象(下))

目录 1. 封装 1.1 私有成员&#xff1a;__成员、__成员方法 2. 继承&#xff1a;单继承、多继承 2.1 继承的基础语法 2.2 复写 & 子类使用父类成员 3. 变量的类型注解&#xff1a;给变量标识变量类型 3.1 为什么需要类型注解 3.2 类型注解 3.3 类型注解的语法 3.…