VL53L4CX TOF开发(2)----修改测距范围及测量频率
VL53L4CX TOF开发.2--修改测距范围及测量频率
- 概述
- 视频教学
- 样品申请
- 完整代码下载
- 测距范围
- 测量频率
- 硬件准备
- 技术规格
- 系统框图
- 应用示意图
- 生成STM32CUBEMX
- 选择MCU
- 串口配置
- IIC配置
- XSHUT
- GPIO1
- X-CUBE-TOF1
- app_tof.c
- 详细解释
- 测量频率修改
- 修改测距范围
概述
最近在弄ST和瑞萨RA的课程,需要样片的可以加群申请:615061293 。
VL53L4CX传感器是一款高性能的飞行时间(Time-of-Flight)传感器,广泛应用于各种距离测量和目标检测场景。其灵活的配置选项使得用户可以根据具体应用需求调整测距范围和测量频率,从而实现最佳性能。本篇文章将介绍如何通过修改VL53L4CX传感器的测距范围和测量频率来满足不同应用场景的需求。
视频教学
https://www.bilibili.com/video/BV19s421g7dR/
VL53L4CX TOF开发(2)----修改测距范围及测量频率
样品申请
https://www.wjx.top/vm/OhcKxJk.aspx#
完整代码下载
测距范围
VL53L4CX传感器支持多种测距模式,包括短距离、中距离和长距离模式。每种模式针对不同的测量距离进行了优化,用户可以根据目标物体与传感器之间的距离选择合适的测距模式:
● 短距离模式:适用于目标物体距离较近的应用,提供较高的测量精度和响应速度。
● 中距离模式:在一定距离范围内平衡了测量精度和响应速度,适用于多数通用测量应用。
● 长距离模式:适用于目标物体距离较远的应用,能够覆盖更大的测量范围,但响应时间相对较长。
测量频率
测量频率决定了传感器进行测距操作的频次。通过调整测量频率,用户可以在响应速度和功耗之间找到平衡点:
● 高频测量:适用于需要实时监测和快速响应的应用场景,如手势识别和快速移动物体检测。然而,高频测量会增加功耗。
● 低频测量:适用于功耗敏感的应用,如电池供电设备或对响应速度要求较低的场景。低频测量可以显著降低功耗。
本文将详细介绍如何配置VL53L4CX传感器的测距范围和测量频率,包括具体的配置方法、相关代码示例以及在实际应用中的注意事项。通过合理调整这些参数,用户可以充分发挥VL53L4CX传感器的性能优势,满足各种复杂多样的应用需求。
硬件准备
首先需要准备一个开发板,这里我准备的是自己绘制的开发板,需要的可以进行申请。
技术规格
系统框图
应用示意图
生成STM32CUBEMX
选择MCU
测试版所用的MCU为STM32G431CB。
串口配置
查看原理图,PA9和PA10设置为开发板的串口。
配置串口。
IIC配置
在这个应用中,VL53L4CX模块通过I2C(IIC)接口与主控器通信。具体来说,VL53L4CX模块的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_VL53L4CX_SimpleRanging_Process,用于配置和执行VL53L4CX传感器的简单测距操作。
详细解释
- CUSTOM_RANGING_SENSOR_ReadID(CUSTOM_VL53L4CX, &Id);:
○ 读取传感器的ID,并将其存储在变量 Id 中。 - CUSTOM_RANGING_SENSOR_GetCapabilities(CUSTOM_VL53L4CX, &Cap);:
○ 获取传感器的能力,并将其存储在 Cap 结构中。 - 配置 Profile 结构的参数:
○ Profile.RangingProfile 设置为中距离多目标测距模式。
○ Profile.TimingBudget 设置测量时间预算。
○ Profile.Frequency 设置为0,不用于正常测距。
○ Profile.EnableAmbient 启用环境光测量。
○ Profile.EnableSignal 启用信号测量。 - CUSTOM_RANGING_SENSOR_ConfigProfile(CUSTOM_VL53L4CX, &Profile);:
○ 如果配置文件与默认配置不同,则应用新的配置文件。 - CUSTOM_RANGING_SENSOR_Start(CUSTOM_VL53L4CX, RS_MODE_BLOCKING_CONTINUOUS);:
○ 启动传感器,设置为阻塞连续测量模式。 - 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.TimingBudget 设置测量时间预算,初始化代码如下所示,TIMING_BUDGET设置为200ms。
/* USER CODE BEGIN 2 */uint32_t Id;// 读取传感器IDCUSTOM_RANGING_SENSOR_ReadID(CUSTOM_VL53L4CX, &Id);// 获取传感器的能力CUSTOM_RANGING_SENSOR_GetCapabilities(CUSTOM_VL53L4CX, &Cap);// 配置测距参数Profile.RangingProfile = VL53L4CX_PROFILE_MEDIUM; // 设置测距模式为中距离Profile.TimingBudget = TIMING_BUDGET; // 设置时间预算(测量时间)Profile.Frequency = 0; // 设置测量频率,这里不用于正常测距(设为0)Profile.EnableAmbient = 1; // 启用环境光测量(1:启用,0:禁用)Profile.EnableSignal = 1; // 启用信号测量(1:启用,0:禁用)// 如果配置文件与默认配置不同,则设置新的配置文件CUSTOM_RANGING_SENSOR_ConfigProfile(CUSTOM_VL53L4CX, &Profile);// 启动传感器,设置为短距离测量模式status = CUSTOM_RANGING_SENSOR_Start(CUSTOM_VL53L4CX, RS_MODE_BLOCKING_CONTINUOUS);/* USER CODE END 2 */
主程序如下所示,可以通过判断GPIO1来判定信号是否已经准备好。
/* 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_VL53L4CX, &Result);if (status == BSP_ERROR_NONE){print_result(&Result);}}/* USER CODE END WHILE */// MX_TOF_Process();/* USER CODE BEGIN 3 */}/* USER CODE END 3 */
若无法正常打印,需要修改堆栈。
此时时间为200ms输出一次,频率为5Hz。
修改测距范围
VL53L4CX最大可以测量6M距离,可以通过 Profile.RangingProfile 设置为测距模式。
- RS_MULTI_TARGET_SHORT_RANGE (VL53L4CX_PROFILE_SHORT):
○ 短距离多目标模式:
■ 此模式下,传感器优化用于较近距离的测量。
■ 适用于需要高精度但测量距离较短的应用。
■ 在短距离测量时,传感器可以提供更快的响应时间和更高的测量频率。 - RS_MULTI_TARGET_MEDIUM_RANGE (VL53L4CX_PROFILE_MEDIUM):
○ 中距离多目标模式:
■ 此模式下,传感器在中等距离范围内工作。
■ 适用于需要在中等距离内进行测量的应用。
■ 提供了距离和精度之间的平衡。 - RS_MULTI_TARGET_LONG_RANGE (VL53L4CX_PROFILE_LONG):
○ 长距离多目标模式:
■ 此模式下,传感器优化用于较远距离的测量。
■ 适用于需要测量更远距离的应用。
■ 在长距离测量时,响应时间可能会更长,但可以覆盖更大的测量范围。
此时 Profile.RangingProfile = VL53L4CX_PROFILE_MEDIUM; // 设置测距模式为中距离
若测量长距离,可能出现如下测量失败情况,TIMING_BUDGET修改为200。
Status状态位如下所示。
在使用VL53L4CX传感器时,返回的状态码(status)为4通常表示特定的错误类型。根据VL53L4CX传感器的文档,状态码4对应的具体错误类型是 VL53L4CX_RANGESTATUS_OUTOFBOUNDS_FAIL。
VL53L4CX_RANGESTATUS_OUTOFBOUNDS_FAIL:
● 状态码4:此状态码表示测距过程中发生了超出边界失败(out of bounds fail)的错误。
● 含义:传感器在测量过程中检测到目标物体距离超出了其测量范围,或者接收到的信号不在预期的范围内。
修改测量范围为长范围。
Profile.RangingProfile = RS_MULTI_TARGET_LONG_RANGE;
此时测距可以测量长距离范围。
相关文章:
VL53L4CX TOF开发(2)----修改测距范围及测量频率
VL53L4CX TOF开发.2--修改测距范围及测量频率 概述视频教学样品申请完整代码下载测距范围测量频率硬件准备技术规格系统框图应用示意图生成STM32CUBEMX选择MCU串口配置IIC配置 XSHUTGPIO1X-CUBE-TOF1app_tof.c详细解释测量频率修改修改测距范围 概述 最近在弄ST和瑞萨RA的课程…...
C++之noexcept
目录 1.概述 2.noexcept作为说明符 3.noexcept作为运算符 4.传统throw与noexcept比较 5.原理剖析 6.总结 1.概述 在C中,noexcept是一个关键字,用于指定函数不会抛出异常。如果函数保证不会抛出异常,编译器可以进行更多优化,…...
Kafka之Broker原理
1. 日志数据的存储 1.1 Partition 1. 为了实现横向扩展,把不同的数据存放在不同的 Broker 上,同时降低单台服务器的访问压力,我们把一个Topic 中的数据分隔成多个 Partition 2. 每个 Partition 中的消息是有序的,顺序写入&#x…...
RabbitMQ docker安装及使用
1. docker安装RabbitMQ docker下载及配置环境 docker pull rabbitmq:management # 创建用于挂载的目录 mkdir -p /home/docker/rabbitmq/{data,conf,log} # 创建完成之后要对所创建文件授权权限,都设置成777 否则在启动容器的时候容易失败 chmod -R 777 /home/doc…...
篇3:Mapbox Style Specification
接《篇2:Mapbox Style Specification》,继续解读Mapbox Style Specification。 目录 Spec Reference Root 附录: MapBox Terrain-RGB...
C#WPF数字大屏项目实战11--质量控制
1、区域划分 2、区域布局 3、视图模型 4、控件绑定 5、运行效果 走过路过,不要错过,欢迎点赞,收藏,转载,复制,抄袭,留言,动动你的金手指,财务自由...
第九十七节 Java面向对象设计 - Java Object.Finalize方法
Java面向对象设计 - Java Object.Finalize方法 Java提供了一种在对象即将被销毁时执行资源释放的方法。 在Java中,我们创建对象,但是我们不能销毁对象。 JVM运行一个称为垃圾收集器的低优先级特殊任务来销毁不再引用的所有对象。 垃圾回收器给我们一个…...
【scikit-learn009】异常检测系列:单类支持向量机(OC-SVM)实战总结(看这篇就够了,已更新)
1.一直以来想写下机器学习训练AI算法的系列文章,作为较火的机器学习框架,也是日常项目开发中常用的一款工具,最近刚好挤时间梳理、总结下这块儿的知识体系。 2.熟悉、梳理、总结下scikit-learn框架OCSVM模型相关知识体系。 3.欢迎批评指正,欢迎互三,跪谢一键三连! 4.欢迎…...
网络管理与运维
文章目录 网络管理与运维概念:传统网络管理:基于SNMP集中管理:基于iMaster NCE的网络管理:传统网络管理方式: 基于SNMP集中管理:交互方式:MIB:版本:SNMPv3配置网管平台&a…...
数据库查询字段在哪个数据表中
问题的提出 当DBA运维多个数据库以及多个数据表的时候,联合查询是必不可少的。则数据表的字段名称是需要知道在哪些数据表中存在的。故如下指令,可能会帮助到你: 问题的处理 查找sysinfo这个字段名称都存在哪个数据库中的哪个数据表 SELEC…...
第 400 场 LeetCode 周赛题解
A 候诊室中的最少椅子数 计数:记录室内顾客数,每次顾客进入时,计数器1,顾客离开时,计数器-1 class Solution {public:int minimumChairs(string s) {int res 0;int cnt 0;for (auto c : s) {if (c E)res max(res, …...
数据结构与算法之Floyd弗洛伊德算法求最短路径
目录 前言 Floyd弗洛伊德算法 定义 步骤 一、初始化 二、添加中间点 三、迭代 四、得出结果 时间复杂度 代码实现 结束语 前言 今天是坚持写博客的第18天,希望可以继续坚持在写博客的路上走下去。我们今天来看看数据结构与算法当中的弗洛伊德算法。 Flo…...
Ubuntu系统设置Redis与MySQL登录密码
Ubuntu系统设置Redis与MySQL登录密码 在Ubuntu 20.04系统中配置Redis和MySQL的密码,您需要分别对两个服务进行配置。以下是详细步骤: 配置Redis密码 打开Redis配置文件: Redis的配置文件通常位于/etc/redis/redis.conf。 sudo nano /etc/redis/redis.c…...
数据库连接池的概念和原理
目录 一、什么是数据库连接池 二、数据库连接池的工作原理 1.初始化阶段: 2.获取连接: 3.使用连接: 4.管理和优化: 三、数据库连接池的好处 一、什么是数据库连接池 数据库连接池(Database Connection Pooling&…...
国内常用的编程博客网址:技术资源与学习平台
一、国内常用的编程博客网址:技术资源与学习平台 大家初入编程,肯定会遇到各种各样的问题。我们除了找 AI 工具以外,我们还能怎么迅速解决问题呢? 大家可以通过谷歌,百度,必应,github…...
怎么给三极管基极或者MOS管栅极接下拉电阻
文章是瑞生网转载,PDF格式文章下载: 怎么给三极管基极或者MOS管栅极接下拉电阻.pdf: https://url83.ctfile.com/f/45573183-1247189078-52e27b?p7526 (访问密码: 7526)...
Java Web学习笔记5——基础标签和样式
<!DOCTYPE html> html有很多版本,那我们应该告诉用户和浏览器我们现在使用的是HMTL哪个版本。 声明为HTML5文档。 字符集: UTF-8:现在最常用的字符编码方式。 GB2312:简体中文 BIG5:繁体中文、港澳台等方式…...
01_深度学习基础知识
1. 感知机 感知机通常情况下指单层的人工神经网络,其结构与 MP 模型类似(按照生物神经元的结构和工作原理造出来的一个抽象和简化了模型,也称为神经网络的一个处理单元) 假设由一个 n 维的单层感知机,则: x 1 x_1 x1 至 x n x_n xn 为 n 维输入向量的各个分量w 1 j…...
60、最大公约数
最大公约数 题目描述 给定n对正整数ai,bi,请你求出每对数的最大公约数。 输入格式 第一行包含整数n。 接下来n行,每行包含一个整数对ai,bi。 输出格式 输出共n行,每行输出一个整数对的最大公约数。 数据范围 1 ≤ n ≤ 1 0 5 , 1≤n≤…...
设计模式在芯片验证中的应用——迭代器
一、迭代器设计模式 迭代器设计模式(iterator)是一种行为设计模式, 让你能在不暴露集合底层表现形式 (列表、 栈和树等数据结构) 的情况下遍历集合中所有的元素。 在验证环境中的checker会收集各个monitor上送过来的transactions࿰…...
imx6ull - 制作烧录SD卡
1、参考NXP官方的手册《i.MX_Linux_Users_Guide.pdf》的这一章节: 1、SD卡分区 提示:我们常用的SD卡一个扇区的大小是512字节。 先说一下i.MX6ULL使用SD卡启动时的分区情况,NXP官方给的镜像布局结构如下所示: 可以看到,…...
使用chatgpt api快速分析pdf
需求背景 搞材料的兄弟经常要分析pdf,然后看到国外有产品是专门调用chatpdf来分析pdf的,所以就来问我能不能帮他也做一个出来。正好我有chatgpt的api,所以就研究了一下这玩意怎么弄。 需求分析 由于chatgpt是按字符算钱的,所以…...
Vue:状态管理pinia
安装 npm install pinia在 main.js 中注册 // main.jsimport { createApp } from vue import { createPinia } from "pinia"; import App from ./app.vueconst app createApp(App) const pinia createPinia(); app.use(pinia).mount(#app)创建 store // stores/…...
【Android Studio】导入import android.support.v7.app.AppcompatActivity;时报错
一、问题描述 在进行安卓项目开发时使用import android.support.v7.app.AppcompatActivity;报错: 运行后会有乱码出现: 二、解决办法 将import android.support.v7.app.AppcompatActivity;改为import androidx.appcompat.app.AppCompatActivity;基本上…...
汽车区域控制器技术分析
汽车区域控制器的起源与发展 随着汽车技术的不断发展,汽车电子电气架构也在经历着深刻的变革。汽车区域控制器作为一种新兴的技术,正逐渐成为汽车电子电气架构的重要组成部分。 在早期,汽车电子电气架构主要采用分布式架构。这种架构下,各个电子控制单元(ECU)分别负责不…...
myEclipse新手使用教程
myEclipse新手使用教程 一、引言 myEclipse是一款流行的Java集成开发环境(IDE),它集成了众多的开发工具,为Java开发者提供了一个强大的开发平台。本文将详细介绍如何下载、安装和配置myEclipse,以及如何创建一个简单…...
【WPF编程宝典】第6讲:资源
研究了 WPF 资源系统使得在应用不同部分可以重用相同对象的原理,介绍了如何在代 码和标记中声明资源,如何提取系统资源,以及如何使用类库程序集在应用程序之间共享资源。 1.资源基础 1.1静态资源和动态资源 区别:静态资源只从资…...
容器化部署Pig微服务快速开发框架
系统说明 基于 Spring Cloud 、Spring Boot、 OAuth2 的 RBAC 企业快速开发平台, 同时支持微服务架构和单体架构 提供对 Spring Authorization Server 生产级实践,支持多种安全授权模式 提供对常见容器化方案支持 Kubernetes、Rancher2 、Kubesphere、E…...
Windows编程:图标资源、光标资源、字符串资源、加速键资源、WM_PAINT消息、绘图
承接前文: win32窗口编程windows 开发基础win32-注册窗口类、创建窗口win32-显示窗口、消息循环、消息队列win32-鼠标消息、键盘消息、计时器消息、菜单资源 本文目录 图标资源光标资源WM_SETCURSOR 消息 字符串资源加速键资源WM_PAINT 消息绘图绘图编程绘图基础基…...
【2024 短剧0元轻资产创业风口】做自己的老板,做新媒体的领路人
好省短剧邀请码2Urux1ZoQm(长按复制粘贴即可)大多数好省短剧推广活动都会通过官方渠道发布邀请码。您可以通过关注官方社交媒体账号、订阅电子邮件通知或参与官方网站上的活动,获得邀请码的机会。官方渠道通常会提前公布邀请码的获取方式和条件,您只需按照要求执行即可。好省…...
河南网站优化/跟我学seo
来自:http://blog.csdn.net/dawanganban/article/details/17679069在前面几篇文章中介绍了HTML5的特点和需要掌握的基础知识,下面我们开始真正的体验一下HTML5的优势,我们开始制作一个漂亮的视频播放器吧先别急,在开始制作之前先了解一下视频…...
海南私彩网站怎么做/产品推广方式有哪些
ch09-SpringBoot 打包1.1 SpringBoot 打包为 war1.1.1 pom.xml 文件1.1.2 创建 webapp 目录1.1.3 指定 webapp 为 web 目录1.1.4 创建 jsp 文件1.1.5 创建 Controller1.1.6 配置视图解析器1.1.7 启动主类,访问地址1.1.8 主启动类继承 SpringBootServletInitializer1…...
有没有专门做胜负彩的网站/营销是什么意思
安装opencv文件时若需要cmake编译,如果中间出现 解决办法是: 在opencv的文件中找到包含cmakelist.txt的文件夹,把where is the source code:的路径改成它。 然后在where to build the binaries 的路径中写上任何一个不存在的路径,…...
石家庄做外贸的网站建设/网上电商怎么做
ESRI Shapefile(shp)是一種美國ESRI公司開發的空間數據開放格式。目前,該文件格式已經成為了地理信息軟體界的一個開放標準,這表明ESRI公司在全球的地理信息系統市場的重要性。 Shapefile屬於一種向量圖形格式,它能夠保…...
做网站的资料/青岛网站建设运营推广
目录 文章目录目录概述准备测试文件方法实例演练方法1: 通过重定向到null来清空文件内容方法2: 使用冒号":" 或 "true"命令重定向来清空文件方法3: 使用"echo -n "命令清空文件内容方法4: 使用truncate命令来清空文件内容方法5: 使用cat命令和/d…...
网站建设营销/网站百度收录秒收方法
之前我拿这个问题问过我的同事,也问过国内的一些javascript高手。 最近,我一直在拿这个问题问自己。之所以会有这个问题,我基于两个前提:第一、我自认为自己不笨;第二、我学习和使用javascript也有一段时间了ÿ…...