当前位置: 首页 > news >正文

VL53L3CX小板开发(2)----修改测距范围及测量频率

VL53L3CX小板开发.2--修改测距范围及测量频率

  • 概述
  • 视频教学
  • 样品申请
  • 完整代码下载
  • 硬件准备
  • 参考程序
  • 调整测量频率
  • 技术规格
  • 系统框图
  • 应用示意图
  • 生成STM32CUBEMX
    • 串口配置
  • IIC配置
  • XSHUT
  • GPIO1
  • X-CUBE-TOF1
  • 堆栈设置
  • app_tof.c
  • 详细解释
  • 测量频率修改
  • 修改测距范围

概述

VL53L3CX是一款高度集成的飞行时间(ToF)传感器,广泛应用于距离测量和接近检测。为了满足不同应用场景的需求,合理调整传感器的测量频率至关重要。本文旨在介绍如何在VL53L3CX传感器上修改测量频率,以优化其性能和功耗。
测量频率指传感器每秒进行测量的次数,通常以赫兹(Hz)为单位。对于VL53L3CX传感器,测量频率的调整能够影响到传感器的响应速度、精度以及功耗表现。

最近在弄ST Demo,需要样片的可以加群申请:615061293 。

视频教学

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

VL53L3CX小板开发(2)----修改测量频率

样品申请

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

完整代码下载

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

硬件准备

首先需要准备一个开发板,这里我准备的是自己绘制的开发板,需要的可以进行申请。
主控为STM32H503CBT6,TOF为VL53L3CX

参考程序

https://github.com/CoreMaker-lab/VL53L3CX

https://gitee.com/CoreMaker/VL53L3CX

调整测量频率

根据不同应用场景,调整测量频率可以实现以下目的:

  1. 提高响应速度:在需要快速检测目标物体的应用中,增加测量频率能够提升传感器的响应速度。
  2. 优化功耗:在电池供电的应用中,降低测量频率可以显著减少传感器的能耗,从而延长设备的续航时间。
  3. 增强测量稳定性:适当的测量频率设置有助于在不同环境条件下保持测量数据的稳定性和可靠性。

调整VL53L3CX传感器的测量频率主要涉及修改传感器的配置文件。传感器提供了多种配置文件选项,可以通过配置时间预算和测量频率来实现不同的测量需求。

技术规格

系统框图

应用示意图

生成STM32CUBEMX

用STM32CUBEMX生成例程,这里使用MCU为STM32H503CB。
配置时钟树,配置时钟为250M。

串口配置

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

配置串口,速率为115200。

IIC配置

在这个应用中,VL53L3CX模块通过I2C(IIC)接口与主控器通信。具体来说,VL53L3CX模块的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_VL53L3CX_SimpleRanging_Process,用于配置和执行VL53L3CX传感器的简单测距操作。

详细解释

  1. CUSTOM_RANGING_SENSOR_ReadID(CUSTOM_VL53L3CX, &Id);:
    ○ 读取传感器的ID,并将其存储在变量 Id 中。
  2. CUSTOM_RANGING_SENSOR_GetCapabilities(CUSTOM_VL53L3CX, &Cap);:
    ○ 获取传感器的能力,并将其存储在 Cap 结构中。
  3. 配置 Profile 结构的参数:
    ○ Profile.RangingProfile 设置测距模式。
    ○ Profile.TimingBudget 设置测量时间预算。
    ○ Profile.Frequency 设置为0,不用于正常测距。
    ○ Profile.EnableAmbient 启用环境光测量。
    ○ Profile.EnableSignal 启用信号测量。
  4. CUSTOM_RANGING_SENSOR_ConfigProfile(CUSTOM_VL53L3CX, &Profile);:
    ○ 如果配置文件与默认配置不同,则应用新的配置文件。
  5. CUSTOM_RANGING_SENSOR_Start(CUSTOM_VL53L3CX, 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 */#defineTIMING_BUDGET(200U)/* 8 ms < TimingBudget < 200 ms */#definePOLLING_PERIOD(250U)/* refresh rate for polling mode (ms, shall be consistent with TimingBudget value) */staticRANGING_SENSOR_Capabilities_t Cap;staticRANGING_SENSOR_ProfileConfig_t Profile;staticRANGING_SENSOR_Result_t Result;staticint32_tstatus=0;staticvoidprint_result(RANGING_SENSOR_Result_t*Result);staticint32_tdecimal_part(float_tx);/* USER CODE END 0 */

测量频率修改

增加计时预算会增加单次测量发射的光子数量。这提高了测量精度和最大测距距离。

Profile.TimingBudget 设置测量时间预算,初始化代码如下所示,TIMING_BUDGET设置为200ms。

/* USER CODE BEGIN 2 */uint32_tId;CUSTOM_RANGING_SENSOR_ReadID(CUSTOM_VL53L3CX,&Id);// 读取传感器ID并存储在Id变量中CUSTOM_RANGING_SENSOR_GetCapabilities(CUSTOM_VL53L3CX,&Cap);// 获取传感器的能力并存储在Cap变量中Profile.RangingProfile=RS_MULTI_TARGET_MEDIUM_RANGE;// 设置测距配置文件为正常测距模式Profile.TimingBudget=TIMING_BUDGET;// 设置测距的时间预算(以毫秒为单位)Profile.Frequency=0;// 设置测量频率为0,这意味着使用测量之间的间隔时间,而不是连续测量Profile.EnableAmbient=1;// 启用环境光测量Profile.EnableSignal=1;// 启用信号测量// 如果配置文件与默认配置文件不同,则应用新的配置文件CUSTOM_RANGING_SENSOR_ConfigProfile(CUSTOM_VL53L3CX,&Profile);// 启动传感器进行阻塞连续测距模式测量status=CUSTOM_RANGING_SENSOR_Start(CUSTOM_VL53L3CX,RS_MODE_BLOCKING_CONTINUOUS);/* USER CODE END 2 */

主程序如下所示,可以通过判断GPIO1来判定信号是否已经准备好。

/* Infinite loop *//* USER CODE BEGIN WHILE */while(1){if(HAL_GPIO_ReadPin(GPIO1_GPIO_Port,GPIO1_Pin)==0){/* polling mode */status=CUSTOM_RANGING_SENSOR_GetDistance(CUSTOM_VL53L3CX,&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 设置为测距模式。

  1. RS_MULTI_TARGET_SHORT_RANGE (VL53L4CX_PROFILE_SHORT):
    ○ 短距离多目标模式:
    ■ 此模式下,传感器优化用于较近距离的测量。
    ■ 适用于需要高精度但测量距离较短的应用。
    ■ 在短距离测量时,传感器可以提供更快的响应时间和更高的测量频率。
  2. RS_MULTI_TARGET_MEDIUM_RANGE (VL53L4CX_PROFILE_MEDIUM):
    ○ 中距离多目标模式:
    ■ 此模式下,传感器在中等距离范围内工作。
    ■ 适用于需要在中等距离内进行测量的应用。
    ■ 提供了距离和精度之间的平衡。
  3. 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;

此时测距可以测量长距离范围。

http://www.cnnetsun.cn/news/2435575.html

相关文章:

  • ChartGPT:用自然语言重塑数据可视化的智能革命
  • 从Postman到Newman:一键生成微信小程序接口测试报告(Node.js环境搭建指南)
  • 5分钟快速上手:Photoshop AI插件SD-PPP完整安装与使用教程
  • Dify定时任务调度器:实现工作流自动化与周期性执行
  • 歌词滚动姬:3分钟掌握专业歌词制作的全流程指南
  • 终极macOS窗口切换指南:让AltTab彻底改变你的多任务体验
  • polarmix单卡训练后test报错
  • 组合模式深度解析:从树形结构到统一接口的设计艺术
  • Carbone自定义格式化器开发指南:扩展你的数据处理能力
  • Douban CODE 权限体系深度解析:用户、项目与团队权限管理
  • 企业如何借助Taotoken实现多模型API的容灾与智能路由保障业务连续性
  • ActionView开发者指南:基于Laravel+ReactJS的二次开发完整教程 [特殊字符]
  • 电赛信号分析必备:避开STM32 FFT应用的这三个坑(采样、内存、精度实战心得)
  • Llama模型微调实战:从原理到部署的完整工具箱指南
  • Python封装币安API:从零构建Binance-Claw量化数据工具
  • AI Agent安全加固实战:从威胁模型到权限管控的纵深防御体系
  • 如何用Illustrator脚本在3分钟内完成1小时的设计工作
  • 一键管理6款热门游戏模组:XXMI启动器让你的游戏体验全面升级 [特殊字符]
  • 高效解密QQ音乐加密文件:qmc-decoder快速转换QMC到MP3/FLAC完整指南
  • big_screen最佳实践:10个真实项目案例深度解析
  • 求职效率革命:用智能时间标记插件3秒识别最新招聘机会
  • 嵌入式安全纵深防御:从MCU硬件到通信协议的全链路实战指南
  • 终极宝可梦游戏随机化器:Universal Pokemon Randomizer ZX完全指南
  • JSON数据自动修复工具:原理、应用与最佳实践
  • MAA_Punish终极指南:如何让战双帕弥什日常任务自动化
  • ChatGPT实时支付功能到底存不存在?实测17国账户+8种认证方式后,我们发现了这1个关键前提条件
  • 用 Flask 做一个极简网页(10 行代码)
  • 值得信赖的成都App开发服务解决方案
  • HiveWE:重构魔兽争霸III地图编辑的现代技术架构与性能突破
  • OpenTelemetry全链路可观测性实战