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

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

3天内不再提示

VL53L8CX小板开发(4)----运动指示器

嵌入式单片机MCU开发 来源:嵌入式单片机MCU开发 作者:嵌入式单片机MCU开 2025-12-22 15:00 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

概述

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

VL53L8CX传感器内置了一个固件功能,可以检测场景中的运动。这个运动指示器是基于连续帧之间来计算的。使用插件vl53l8cx_plugin_motion_indicator可以使用这个选项。
运动指示器通过vl53l8cx_motion_indicator_init()函数进行初始化。如果用户想要更改传感器的分辨率,他必须使用专用函数vl53l8cx_motion_indicator_set_resolution()来更新运动指示器的分辨率。
用户还可以更改检测运动的最小和最大距离。最小距离和最大距离之间的差异不能超过1500毫米。默认情况下,距离是在400毫米到1500毫米之间初始化的。
结果存储在motion_indicator字段中。在这个字段里,数组motion给出了每个区域的运动强度值。高值表示帧之间的高运动变化。典型的运动会给出一个在100到500之间的值。这种敏感性取决于集成时间、目标距离和目标反射率。
对于低功耗应用,理想的组合是使用运动指示器与自主测距模式,并在运动上编程检测阈值。这允许在FoV(视场)中检测运动变化,同时保持最小的功耗。

视频教学

[https://www.bilibili.com/video/BV1obCLYnEJT]

样品申请

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

源码下载

[https://download.csdn.net/download/qq_24312945/90425887]

硬件准备

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

生成STM32CUBEMX

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

串口配置

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

配置串口,速率为921600。

IIC配置

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

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

LPn 设置

若进行IIC通讯,LPn设置为高电平状态。

这里对应管脚为PB0。

INT设置

自主模式可以通过获取INT管脚进行判断数据是否准备好。

配置PB1为输入模式。

X-CUBE-TOF1

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

堆栈设置

若无法正常运行需要修改优化等级。

串口重定向

打开魔术棒,勾选MicroLIB

代码配置

在custom_ranging_sensor.c代码中,有IO口驱动VL53L8CX进行复位的代码,由于没有配置对应的IO,所以需要注释掉。

检测流程

  1. 初始化阶段 (用户代码开始 2):
    1. ○ 声明并初始化一些变量,包括status(状态),isReady(准备就绪标志),i(循环变量),以及与VL53L8CX运动检测相关的结构。
    2. ○ 获取VL53L8CX设备的引用。
  2. 配置运动指示器:
    1. ○ 使用4x4的分辨率初始化运动指示器。如果失败,则打印错误信息并返回状态。
    2. ○ 可选地更改用于检测运动的最小和最大距离。这些距离有一些限制,如果超出这些限制,则会返回错误。
    3. ○ 如果用户需要,可以更改传感器的分辨率。同时,也需要更新运动指示器的分辨率。
    4. ○ 为示例设置测距频率为2Hz。如果设置失败,打印错误信息。
  3. 开始测距:
    1. ○ 启动VL53L8CX设备的测距功能。
  4. 测距循环 (无限循环):
    1. ○ 检查VL53L8CX设备是否有新的数据可用。
    2. ○ 如果有新数据:
      1. ■ 获取测距数据。
      2. ■ 打印数据流计数(可能是一个连续的测量编号)。
      3. ■ 打印每个区域(在4x4分辨率下有16个区域)的运动强度。
        这个程序主要用于配置VL53L5CX传感器的运动指示器,然后不断地从传感器获取测距数据,并打印出每个区域的运动强度。

TOF代码配置

在main.c中添加对应头文件。

/* USER CODE BEGIN Includes */
#include "stdio.h"

#include "custom_ranging_sensor.h"
#include "vl53l8cx_plugin_motion_indicator.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 */

添加TOF初始化。 主要为配置运动指示器。

/* USER CODE BEGIN 2 */
    uint8_t                 status, isReady, i;
    VL53L8CX_Motion_Configuration     motion_config;    /* 运动配置 */
    VL53L8CX_Object_t *pL8obj = CUSTOM_RANGING_CompObj[CUSTOM_VL53L8CX];
    VL53L8CX_ResultsData     Results;        /* 来自VL53L5CX的结果数据 */
    /*********************************/
    /*     编程运动指示器             */
    /*********************************/

    /* 使用4x4分辨率创建运动指示器 */
    status = vl53l8cx_motion_indicator_init(&pL8obj- >Dev, &motion_config, VL53L8CX_RESOLUTION_4X4);
    if(status)
    {
        printf("运动指示器初始化失败,状态 : %un", status);
        return status;
    }

    /* (可选) 更改用于检测运动的最小和最大距离。最小和最大之间的差异
     * 不得超过1500mm,最小值不能小于400mm,否则下面的函数返回错误127 */
    status = vl53l8cx_motion_indicator_set_distance_motion(&pL8obj- >Dev, &motion_config, 1000, 2000);
    if(status)
    {
        printf("设置运动指示器距离失败,状态 : %un", status);
        return status;
    }

    /* 如果用户想要更改分辨率,他还需要更新运动指示器的分辨率 */
    //status = vl53l5cx_set_resolution(&Dev, VL53L5CX_RESOLUTION_4X4);
    //status = vl53l5cx_motion_indicator_set_resolution(&Dev, &motion_config, VL53L5CX_RESOLUTION_4X4);

    /* 为了示例,增加测距频率 */
    status = vl53l8cx_set_ranging_frequency_hz(&pL8obj- >Dev, 2);
    if(status)
    {
        printf("设置vl53l8cx测距频率失败,状态 : %urn", status);
        return status;
    }

    /*********************************/
    /*          测距循环              */
    /*********************************/

    status = vl53l8cx_start_ranging(&pL8obj- >Dev);

  /* USER CODE END 2 */

主程序

主程序来获取对应的isReady位状态来判定数据是否准备好或者判断INT的IO状态也可。

/* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    if(HAL_GPIO_ReadPin  ( GPIOA, GPIO_PIN_11) ==0)        
    {

        status = vl53l8cx_check_data_ready(&pL8obj- >Dev, &isReady);            
        if(isReady)
        {
            vl53l8cx_get_ranging_data(&pL8obj- >Dev, &Results);

            /* 由于传感器默认设置为4x4模式,我们总共有
             * 16个区域要打印。在此示例中,只打印第一个区域的数据 */
            printf("打印数据编号 : %3un", pL8obj- >Dev.streamcount);
            for(i = 0; i < 16; i++)
            {
                printf("区域 : %3d, 运动强度 : %3lun",
                    i,
                    Results.motion_indicator.motion[motion_config.map_id[i]]);
            }
            printf("n");
        }


    }    

    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */

演示结果

静止状态下运动强度如下所示。

检测运动情况下运动强度如下所示。

审核编辑 黄宇

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

    关注

    26

    文章

    6507

    浏览量

    121359
  • TOF
    TOF
    +关注

    关注

    9

    文章

    551

    浏览量

    38704
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    VL53L5CX驱动开发(4)----运动指示器

    VL53L5CX传感内置了一个固件功能,可以检测场景中的运动。这个运动指示器是基于连续帧之间来计算的。使用插件
    的头像 发表于 12-01 16:31 1914次阅读
    <b class='flag-5'>VL53L5CX</b>驱动<b class='flag-5'>开发</b>(<b class='flag-5'>4</b>)----<b class='flag-5'>运动</b><b class='flag-5'>指示器</b>

    VL53L5CX驱动开发(5)----运动阈值检测

    本章目的是展示如何充分利用VL53L5CX传感的高级特性,通过结合运动指示器和阈值检测功能,实现对特定场景的精确监控。首先,程序通过特定的配置,确保了传感
    的头像 发表于 12-01 16:33 2025次阅读
    <b class='flag-5'>VL53L5CX</b>驱动<b class='flag-5'>开发</b>(5)----<b class='flag-5'>运动</b>阈值检测

    VL53L8CX TOF开发(1)----驱动TOF进行区域检测

    VL53L8CX是一款8x8多区域ToF测距传感,它在环境光下能够在降低功耗的同时增强性能。该传感基于意法半导体的FlightSense技术设计,能够提供最高400 cm的精确测距
    的头像 发表于 05-20 09:42 2790次阅读
    <b class='flag-5'>VL53L8CX</b> TOF<b class='flag-5'>开发</b>(1)----驱动TOF进行区域检测

    VL53L8CX TOF开发(4)----运动指示器

    VL53L8CX传感内置了一个固件功能,可以检测场景中的运动。这个运动指示器是基于连续帧之间来计算的。使用插件
    的头像 发表于 06-19 10:43 3047次阅读
    <b class='flag-5'>VL53L8CX</b> TOF<b class='flag-5'>开发</b>(<b class='flag-5'>4</b>)----<b class='flag-5'>运动</b><b class='flag-5'>指示器</b>

    VL53L8CX TOF开发(5)----运动阈值检测

    本章目的是展示如何充分利用VL53L8CX传感的高级特性,通过结合运动指示器和阈值检测功能,实现对特定场景的精确监控。首先,程序通过特定的配置,确保了传感
    的头像 发表于 06-19 10:45 2960次阅读
    <b class='flag-5'>VL53L8CX</b> TOF<b class='flag-5'>开发</b>(5)----<b class='flag-5'>运动</b>阈值检测

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

    VL53L8CX传感以实现特定条件下的目标检测和距离测量。通过设置信号强度和距离阈值,可以根据具体应用需求定制传感的检测行为,使其在各种场景中发挥作用。 实现为每个区域(在4x4
    的头像 发表于 06-19 10:36 3403次阅读
    <b class='flag-5'>VL53L8CX</b> TOF<b class='flag-5'>开发</b>(3)----检测阈值

    基于ST VL53L8CX ToF传感的技术解析与应用设计

    STMicroelectronics VL53L8CX 8x8多区域飞行时间传感提高了环境光下的性能,降低了功耗。VL53L8CX基于ST的FlightSense技术,设计用于提供高
    的头像 发表于 10-25 17:44 2450次阅读
    基于ST <b class='flag-5'>VL53L8CX</b> ToF传感<b class='flag-5'>器</b>的技术解析与应用设计

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

    VL53L4CX传感是一款高性能的飞行时间(Time-of-Flight)传感,广泛应用于各种距离测量和目标检测场景。其灵活的配置选项使得用户可以根据具体应用需求调整测距范围和测量频率,从而实现
    的头像 发表于 12-22 09:57 1417次阅读
    <b class='flag-5'>VL53L4CX</b><b class='flag-5'>小板</b><b class='flag-5'>开发</b>(2)----修改测距范围及测量频率

    VL53L8CX小板开发(1)----驱动TOF进行区域检测

    VL53L8CX是一款8x8多区域ToF测距传感,它在环境光下能够在降低功耗的同时增强性能。该传感基于意法半导体的FlightSense技术设计,能够提供最高400 cm的精确测距
    的头像 发表于 12-22 14:12 1656次阅读
    <b class='flag-5'>VL53L8CX</b><b class='flag-5'>小板</b><b class='flag-5'>开发</b>(1)----驱动TOF进行区域检测

    VL53L8CX小板开发(3)----检测阈值

    本章展示如何使用VL53L8CX近接传感的"检测阈值"功能。这个功能允许用户为传感设置预定义的条件,当这些条件满足时,传感可以触发一个中断。V
    的头像 发表于 12-22 14:53 1496次阅读
    <b class='flag-5'>VL53L8CX</b><b class='flag-5'>小板</b><b class='flag-5'>开发</b>(3)----检测阈值

    VL53L8CX小板开发(5)----运动阈值检测

    本章目的是展示如何充分利用VL53L8CX传感的高级特性,通过结合运动指示器和阈值检测功能,实现对特定场景的精确监控。首先,程序通过特定的配置,确保了传感
    的头像 发表于 12-22 15:10 1803次阅读
    <b class='flag-5'>VL53L8CX</b><b class='flag-5'>小板</b><b class='flag-5'>开发</b>(5)----<b class='flag-5'>运动</b>阈值检测

    STM32H5开发VL53L8CX(1)----驱动TOF进行区域检测

    VL53L8CX是一款8x8多区域ToF测距传感,它在环境光下能够在降低功耗的同时增强性能。该传感基于意法半导体的FlightSense技术设计,能够提供最高400 cm的精确测距
    的头像 发表于 12-22 15:22 1653次阅读
    STM32H5<b class='flag-5'>开发</b><b class='flag-5'>VL53L8CX</b>(1)----驱动TOF进行区域检测

    STM32H5开发VL53L8CX(3)----检测阈值

    本章展示如何使用VL53L8CX近接传感的"检测阈值"功能。这个功能允许用户为传感设置预定义的条件,当这些条件满足时,传感可以触发一个中断。
    的头像 发表于 12-22 16:00 2033次阅读
    STM32H5<b class='flag-5'>开发</b><b class='flag-5'>VL53L8CX</b>(3)----检测阈值

    STM32H5开发VL53L8CX(4)----运动指示器

    VL53L8CX传感内置了一个固件功能,可以检测场景中的运动。这个运动指示器是基于连续帧之间来计算的。使用插件
    的头像 发表于 12-22 17:15 2039次阅读
    STM32H5<b class='flag-5'>开发</b><b class='flag-5'>VL53L8CX</b>(<b class='flag-5'>4</b>)----<b class='flag-5'>运动</b><b class='flag-5'>指示器</b>

    STM32H5开发VL53L8CX(5)----运动阈值检测

    本章目的是展示如何充分利用VL53L8CX传感的高级特性,通过结合运动指示器和阈值检测功能,实现对特定场景的精确监控。首先,程序通过特定的配置,确保了传感
    的头像 发表于 12-22 17:20 2366次阅读
    STM32H5<b class='flag-5'>开发</b><b class='flag-5'>VL53L8CX</b>(5)----<b class='flag-5'>运动</b>阈值检测