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

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

3天内不再提示

VL53L4CD TOF开发(2)----修改测量频率

嵌入式单片机MCU开发 来源:嵌入式单片机MCU开发 作者:嵌入式单片机MCU开 2024-06-19 14:50 次阅读

概述

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

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

wKgaomZyRuuAJDs4AAvC61woylw153.png

视频教学

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

样品申请

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

完整代码下载

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

调整测量频率

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

提高响应速度:在需要快速检测目标物体的应用中,增加测量频率能够提升传感器的响应速度。

优化功耗:在电池供电的应用中,降低测量频率可以显著减少传感器的能耗,从而延长设备的续航时间。

增强测量稳定性:适当的测量频率设置有助于在不同环境条件下保持测量数据的稳定性和可靠性。

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

硬件准备

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

wKgaomZyRumAJYZxAAObseraVF8960.png


wKgZomZyRumADd1TAAICYmF1mN4269.png

技术规格

wKgaomZyRumAXGwZAAEE_XK62u0756.png

系统框图

wKgaomZyR5SANQo7AAR7EGhZH98157.png

wKgZomZyR5SAae7lAAH3irseaJs610.png

应用示意图

wKgZomZyR5WAcxaOAAjry_FhsuA787.png

生成STM32CUBEMX

选择MCU

测试版所用的MCU为STM32G431CB。

wKgZomZyRMGAdRRoAARB-YbOkK4270.png

串口配置

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

wKgZomZyQ1iARTymAAHBFIZYfLo226.png

配置串口。

wKgaomZyQ1mAc0EHAAKBhL00-c0246.png

IIC配置

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

wKgZomZyRumAUTR2AAHWyXsrrKk287.png

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

wKgZomZyRumAE3-DAAJ2SC28P9A806.png

XSHUT

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

wKgZomZyRumAdxeeAAG1-hi9O3o158.png

wKgZomZyRumAQLTdAAVJnROoQ-g090.png

GPIO1

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

wKgZomZyRuqAUHhiAAoTNZyms1k160.png

wKgaomZyRumAJEk1AAQ52KTwW-s266.png

wKgZomZyR5WAKPzRAAYZYCDf6ME172.png

X-CUBE-TOF1

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

wKgZomZyRumAc-JiAAR1OkKyPBc767.png

app_tof.c

app_tof.c定义了一个静态函数 MX_VL53L4CD_SimpleRanging_Process,用于配置和执行VL53L4CX传感器的简单测距操作。

wKgaomZyR5WAIPtSAAhLyCP32U8988.png

详细解释

CUSTOM_RANGING_SENSOR_ReadID(CUSTOM_VL53L4CD, &Id);:
○ 读取传感器的ID,并将其存储在变量 Id 中。

CUSTOM_RANGING_SENSOR_GetCapabilities(CUSTOM_VL53L4CD, &Cap);:
○ 获取传感器的能力,并将其存储在 Cap 结构中。

配置 Profile 结构的参数
○ Profile.RangingProfile 设置测距模式。
○ Profile.TimingBudget 设置测量时间预算。
○ Profile.Frequency 设置为0,不用于正常测距。
○ Profile.EnableAmbient 启用环境光测量。
○ Profile.EnableSignal 启用信号测量。

CUSTOM_RANGING_SENSOR_ConfigProfile(CUSTOM_VL53L4CD, &Profile);:
○ 如果配置文件与默认配置不同,则应用新的配置文件。

CUSTOM_RANGING_SENSOR_Start(CUSTOM_VL53L4CD, 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 */

测量频率修改

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

wKgZomZyRuuAYS8KAAyu84LR4e4235.png

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

/* 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_CONTINUOUS;// 设置测距配置文件为连续测距模式 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_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_VL53L4CD, &Result); if (status == BSP_ERROR_NONE) { print_result(&Result); } } /* USER CODE END WHILE */ // MX_TOF_Process(); /* USER CODE BEGIN 3 */ } /* USER CODE END 3 */

若无法正常打印,需要修改堆栈。

wKgaomZyR5SAeKumAAQWN4_kZnE813.png

wKgaomZyRumATqg5AAJIWryhJ_4811.png

此时时间为200ms输出一次,频率为5Hz。

wKgZomZyR5WAdTtCAAowjYbC4nQ658.png

修改TIMING_BUDGET为20,此时为20ms刷新一次,频率为50Hz,此时数据抖动较大。

wKgaomZyR5WATFlNAAqEwkwOmws060.png



审核编辑 黄宇

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

    关注

    10

    文章

    4401

    浏览量

    110071
  • 测距
    +关注

    关注

    2

    文章

    96

    浏览量

    19444
  • TOF
    TOF
    +关注

    关注

    9

    文章

    449

    浏览量

    35993
  • stm32cubemx
    +关注

    关注

    5

    文章

    276

    浏览量

    14518
收藏 人收藏

    评论

    相关推荐

    基于STM32CUBEMX驱动TOF模块VL53l0x(2)----修改设备地址

    本章主要介绍如何修改VL53L0X传感器的I2C地址,并成功驱动设备以使用新的地址。VL53L0X是一种多功能、高性能的接近和环境光传感器,常用于测量物体与传感器之间的距离、检测物体的
    的头像 发表于 12-01 15:46 1014次阅读
    基于STM32CUBEMX驱动<b class='flag-5'>TOF</b>模块<b class='flag-5'>VL53</b>l0x(2)----<b class='flag-5'>修改</b>设备地址

    VL53L4CD TOF开发(1)----驱动TOF进行测距

    使用。 与所有基于意法半导体的FlightSense技术的飞行时间 (ToF) 传感器一样,无论目标颜色和反射率如何,VL53L4CD均可记录绝对距离测量VL53L4CD
    的头像 发表于 05-17 14:54 567次阅读
    <b class='flag-5'>VL53L4CD</b> <b class='flag-5'>TOF</b><b class='flag-5'>开发</b>(1)----驱动<b class='flag-5'>TOF</b>进行测距

    VL53L4CD TOF开发(3)----检测阈值

    在现代嵌入式系统中,精确的距离测量和实时响应能力对于许多应用场景至关重要。VL53L4CD 是一款先进的飞行时间(Time-of-Flight, ToF)传感器,能够提供高精度的距离测量
    的头像 发表于 06-19 10:56 716次阅读
    <b class='flag-5'>VL53L4CD</b> <b class='flag-5'>TOF</b><b class='flag-5'>开发</b>(3)----检测阈值

    新一代ToF 激光测距模块VL53L0X

    ,所以回程距离的计算公式也很简单,即“光速” x “时间延迟”。VL53L0X 是新一代 ToF 激光测距模块,采用目前市场上最小型的封装,可基于各种目标物颜色和反射特性进行精确测距。该设备测量的绝对
    发表于 04-06 14:03

    VL53L0x环境光灵敏度无法测量距离

    你好我正在测试VL53L0X飞行时间传感器,以便了解它对环境光的抵抗力,结果证明,如果你将一个具有高红外线含量的光源(如卤素灯泡)指向传感器它无法测量距离。即使照度很低。它简单地说'没有目标'。角度
    发表于 04-15 16:42

    VL53L0X配置GPIO1 INTERRUPT时的2mA电流消耗异常

    你好。我们集成了VL53L0X TOF传感器,在测量电流消耗时我们非常惊讶。在数据表中,当GPIO1配置为中断时,没有提及电流消耗。我们在连续定时测距中使用传感器,并且当阈值通过时我们希望在CPU
    发表于 05-10 16:16

    VL53L1X简介

    VL53L1X是目前市场上最快的微型ToF传感器,精确测距能力达4米,测距频率快至50 Hz。它采用微型、可回流焊封装,集成了一个单光子雪崩二极管(SPAD)接收阵列、一个940nm
    发表于 08-06 07:54

    RT-Thread VL53L0X TOF传感器驱动设计资料实现

    1、RT-Thread VL53L0X TOF传感器驱动实现  Time of flight(TOF),中文翻译为“飞行时间”。飞行时间技术在广义上可理解为通过测量物体、粒子或波在固定
    发表于 09-15 17:08

    VL53L4CD能否实现~50uA@1Hz类似的功耗?

    我正在尝试为 1Hz 频率的近距离(低至 1mm)接近检测找到低功耗解决方案。看起来 VL53L4CD 可以很好地完成这项工作,但我没有在数据表中找到低功耗模式的功耗详细信息。我还发现有一个用于
    发表于 12-07 08:39

    我可以使用API VL53LX去支持VL53L1CB吗?

    使用 STM32CubeMX 重新制定项目。但是我找不到合适的软件支持,无论是在 X-CUBE-TOF1 库还是 X-CUBE-53L1A2 中,它似乎不支持自定义硬件的裸驱动程序 API。您认为我可以使用 VL53L3 父 A
    发表于 12-16 06:24

    VL53L5CX-SATEL和Rpi Linux驱动程序构建失败的原因?怎么解决?

    嗨,我正在尝试在我的树莓派 4 上为 VL53L5CX 模块构建用户模式 ​​linux 驱动程序,当我按照 RPI 指南中的说明进行操作时,我 cd 进入用户/测试并制作,我收到以下错误
    发表于 12-26 06:01

    VL53L5CX在i2cdetect树莓派上没有正确显示是为什么?

    以描述的方式将 VL53L5CX-SATEL 板连接到 Rpi 时,我现在看到 TOF 传感器时遇到问题。并且,avdd、iovdd、scl、sda 都已连接,但是当我在 Rpi 上运行
    发表于 12-26 07:37

    VL53L1X初始化序列后SW待机消耗的问题如何处理?

    大家好,我用我的微控制器和一个 VL53L1X-SATEL 开发了一块电路板——我的 X-NUCLEO-53L1A1 套件随附的分线板。我为没有稳压器的电路板使用 3v 电池,为 I2
    发表于 01-03 08:12

    VL53L3CX传感器靠在一起同时工作,会不会互相干扰?

    尝试用 ToF VL53L3CX 做一些简单的应用,出现了以下疑问:多个彼此靠近的 ToF 能否同时工作而不会干扰测量?换句话说,如果不同的ToF
    发表于 02-01 07:08

    VL53L4CX TOF开发(2)----修改测距范围及测量频率

    最佳性能。本篇文章将介绍如何通过修改VL53L4CX传感器的测距范围和测量频率来满足不同应用场景的需求。
    的头像 发表于 06-19 10:49 392次阅读
    <b class='flag-5'>VL53</b>L4CX <b class='flag-5'>TOF</b><b class='flag-5'>开发</b>(2)----<b class='flag-5'>修改</b>测距范围及<b class='flag-5'>测量</b><b class='flag-5'>频率</b>