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

概述vl53l5cx传感器内置了一个固件功能,可以检测场景中的运动。这个运动指示器是基于连续帧之间来计算的。使用插件vl53l5cx_plugin_motion_indicator可以使用这个选项。
运动指示器通过vl53l5cx_motion_indicator_init()函数进行初始化。如果用户想要更改传感器的分辨率,他必须使用专用函数vl53l5cx_motion_indicator_set_resolution()来更新运动指示器的分辨率。
用户还可以更改检测运动的最小和最大距离。最小距离和最大距离之间的差异不能超过1500毫米。默认情况下,距离是在400毫米到1500毫米之间初始化的。
结果存储在motion_indicator字段中。在这个字段里,数组motion给出了每个区域的运动强度值。高值表示帧之间的高运动变化。典型的运动会给出一个在100到500之间的值。这种敏感性取决于集成时间、目标距离和目标反射率。
对于低功耗应用,理想的组合是使用运动指示器与自主测距模式,并在运动上编程检测阈值。这允许在fov(视场)中检测运动变化,同时保持最小的功耗。
最近在弄st的课程,需要样片的可以加群申请:615061293 。
视频教学[https://www.bilibili.com/video/bv1lj411x7sg/
样品申请[https://www.wjx.top/vm/ohckxjk.aspx#]
源码下载[https://download.csdn.net/download/qq_24312945/88430756]
生成stm32cubemx选择mcu测试版所用的mcu为stm32g431cb。
串口配置查看原理图,pa9和pa10设置为开发板的串口。
配置串口。
iic配置在这个应用中,vl53l5cx模块通过i2c(iic)接口与主控器通信。具体来说,vl53l5cx模块的i2c引脚连接到主控器的pa8和pb5两个io口。
配置iic为快速模式,速度为400k。
int设置自主模式可以通过获取int管脚进行判断数据是否准备好。
配置pb4为输入模式。
配置使能与复位驱动中有对模块进行复位的操作。
配置pb15和pb3为输出管脚。
x-cube-tof1本节介绍在不需要使用样例应用时如何使用stm32cubemx将x-cube-tof1软件包添加到项目中。有了这样的设置,就只配置了驱动层。
由于需要自主模式,所以可以不开启主程序tof执行代码。
串口重定向打开魔术棒,勾选microlib
在main.c中,添加头文件,若不添加会出现 identifier file is undefined报错。
/* user code begin includes */#include stdio.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 */代码配置在custom_ranging_sensor.c代码中,有io口驱动vl53l5cx进行复位的代码,由于没有配置对应的io,所以需要注释掉。
由于没加载串口定义,所以注释掉#include custom.h
检测流程初始化阶段 (用户代码开始 2):
○ 声明并初始化一些变量,包括status(状态),isready(准备就绪标志),i(循环变量),以及与vl53l5cx运动检测相关的结构。
○ 获取vl53l5cx设备的引用。配置运动指示器:
○ 使用4x4的分辨率初始化运动指示器。如果失败,则打印错误信息并返回状态。
○ 可选地更改用于检测运动的最小和最大距离。这些距离有一些限制,如果超出这些限制,则会返回错误。
○ 如果用户需要,可以更改传感器的分辨率。同时,也需要更新运动指示器的分辨率。
○ 为示例设置测距频率为2hz。如果设置失败,打印错误信息。开始测距:
○ 启动vl53l5cx设备的测距功能。测距循环 (无限循环):
○ 检查vl53l5cx设备是否有新的数据可用。
○ 如果有新数据:
■ 获取测距数据。
■ 打印数据流计数(可能是一个连续的测量编号)。
■ 打印每个区域(在4x4分辨率下有16个区域)的运动强度。
这个程序主要用于配置vl53l5cx传感器的运动指示器,然后不断地从传感器获取测距数据,并打印出每个区域的运动强度。tof代码配置在main.c中添加对应头文件。
/* user code begin includes */#include stdio.h#include custom_ranging_sensor.h#include vl53l5cx_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; vl53l5cx_motion_configuration motion_config; /* 运动配置 */ vl53l5cx_object_t *pl5obj = custom_ranging_compobj[custom_vl53l5cx]; vl53l5cx_resultsdata results; /* 来自vl53l5cx的结果数据 */ /* 编程运动指示器 */ /* 使用4x4分辨率创建运动指示器 */ status = vl53l5cx_motion_indicator_init(&pl5obj- >dev, &motion_config, vl53l5cx_resolution_4x4); if(status) { printf(运动指示器初始化失败,状态 : %un, status); return status; } /* (可选) 更改用于检测运动的最小和最大距离。最小和最大之间的差异 * 不得超过1500mm,最小值不能小于400mm,否则下面的函数返回错误127 */ status = vl53l5cx_motion_indicator_set_distance_motion(&pl5obj- >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 = vl53l5cx_set_ranging_frequency_hz(&pl5obj- >dev, 2); if(status) { printf(设置vl53l5cx测距频率失败,状态 : %urn, status); return status; } /* 测距循环 */ status = vl53l5cx_start_ranging(&pl5obj- >dev); /* user code end 2 */主程序主程序来获取对应的isready位状态来判定数据是否准备好或者判断int的io状态也可。
/* infinite loop */ /* user code begin while */ while (1) {// if(hal_gpio_readpin ( gpiob, gpio_pin_4) ==0) status = vl53l5cx_check_data_ready(&pl5obj- >dev, &isready); if(isready) { vl53l5cx_get_ranging_data(&pl5obj- >dev, &results); /* 由于传感器默认设置为4x4模式,我们总共有 * 16个区域要打印。在此示例中,只打印第一个区域的数据 */ printf(打印数据编号 : %3un, pl5obj- >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 */演示结果静止状态下运动强度如下所示。
检测运动情况下运动强度如下所示。


苹果13最适合买的配置
集成隔离电源的隔离器芯片主要应用领域
既然C编译器是C语言写,那么第一个C编译器是怎样来的?
让镜头更小更好的方法——超透镜
AI视觉在教育场景中的创新应用
VL53L5CX驱动开发(4)----运动指示器
网络安全工作需要具备的10种能力
防水透气膜的应用,提升声波电动牙刷防水性能
人工智能给人们的生产生活方式带来了颠覆性影响
万用表经典口诀科普
中国电信宣布李正茂获委任为公司总裁兼COO首席运营官
单线激光雷达是什么 如何选型
苹果芯片研发主管Johny Srouji放弃竞争英特尔CEO
AI时代,英特尔如何助力物联网变革?
台积电7纳米订单暴冲 将奠定客户更高接受度的基石
苹果2020财年结束后 iPhone这13年累计销量将达到近20亿部
使用RapidIO技术搭建可重构信号处理平台
如何利用相位噪声分析程序和传递函数来降低锁相环的输出相位噪声?
自动驾驶排名:“竞争者”之后是“挑战者”
高压超低功耗LDO PC56LXXX带限流调节稳压芯片的典型应用