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

2023-12-17 01:50

本文主要是介绍VL53L5CX驱动开发(3)----检测阈值,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

VL53L5CX驱动开发----3.检测阈值

  • 概述
  • 实现demo
  • 视频教学
  • 样品申请
  • 源码下载
  • 生成STM32CUBEMX
    • 选择MCU
    • 串口配置
    • IIC配置
  • INT设置
  • 配置使能与复位
  • X-CUBE-TOF1
  • 串口重定向
  • 代码配置
  • TOF代码配置
  • Kcps/SPAD定义
  • 状态说明
  • 演示结果

概述

本章展示如何使用VL53L5CX近接传感器的"检测阈值"功能。这个功能允许用户为传感器设置预定义的条件,当这些条件满足时,传感器可以触发一个中断。

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

在这里插入图片描述
VL53L5CX传感器允许用户更灵活地定义响应行为,特别是当检测到特定的测量结果时。例如,可以设置当对象的距离低于或高于特定值时,触发中断。这种功能在各种实际应用中,如智能开关、安全系统或机器人导航中,都非常有用。

实现demo

主要展示了如何使用VL53L5CX传感器来设置和使用检测阈值。
实现为每个区域(在4x4分辨率中有16个区域)设定了两个阈值:一个基于信号强度,另一个基于物体的测量距离。

视频教学

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

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

样品申请

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

在这里插入图片描述

源码下载

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

生成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”
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

TOF代码配置

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

/* USER CODE BEGIN Includes */
#include "stdio.h"
#include "vl53l5cx.h"
#include "custom_ranging_sensor.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;
}static int32_t status = 0;
static RANGING_SENSOR_Result_t Result;/* USER CODE END PFP */

添加TOF初始化。
主要为设置检测阈值。

  /* USER CODE BEGIN 2 *//*********************************//*  程序检测阈值 *//*********************************//* 在此示例中,我们希望每个区域有2个阈值,分辨率为4x4 *//* 创建阈值数组(大小不能更改) */VL53L5CX_DetectionThresholds thresholds[VL53L5CX_NB_THRESHOLDS];	/* Set all values to 0 */memset(&thresholds, 0, sizeof(thresholds));VL53L5CX_Object_t *pL5obj = CUSTOM_RANGING_CompObj[CUSTOM_VL53L5CX];/* 为所有区域添加阈值(在4x4的分辨率中有16个区域,或在8x8中有64个) */for (int i = 0; i < 16; i++) {/* 第一个所需的阈值是GREATER_THAN模式。请注意,第一个必须始终使用数学操作VL53L5CX_OPERATION_NONE设置。* 在此示例中,信号阈值设置为150 kcps/spads(格式会在驱动程序内自动更新)*/thresholds[2 * i].zone_num = i;thresholds[2 * i].measurement = VL53L5CX_SIGNAL_PER_SPAD_KCPS;thresholds[2 * i].type = VL53L5CX_GREATER_THAN_MAX_CHECKER;thresholds[2 * i].mathematic_operation = VL53L5CX_OPERATION_NONE;thresholds[2 * i].param_low_thresh = 150;thresholds[2 * i].param_high_thresh = 150;/* 第二个所需的检查器是IN_WINDOW模式。我们将设置一个数学阈值VL53L5CX_OPERATION_OR,以将前一个检查器添加到此检查器。* 在此示例中,距离阈值设置在200mm和400mm之间(格式会在驱动程序内自动更新)。*/thresholds[2 * i + 1].zone_num = i;thresholds[2 * i + 1].measurement = VL53L5CX_DISTANCE_MM;thresholds[2 * i + 1].type = VL53L5CX_IN_WINDOW;thresholds[2 * i + 1].mathematic_operation = VL53L5CX_OPERATION_OR;thresholds[2 * i + 1].param_low_thresh = 200;thresholds[2 * i + 1].param_high_thresh = 400;}/* 必须明确指出最后的阈值。因为我们有32个检查器(16个区域x 2),所以最后一个是第31个 */thresholds[31].zone_num = VL53L5CX_LAST_THRESHOLD | thresholds[31].zone_num;/* 向传感器发送阈值数组 */status |= vl53l5cx_set_detection_thresholds(&pL5obj->Dev, thresholds);/* 启用阈值检测 */status |= vl53l5cx_set_detection_thresholds_enable(&pL5obj->Dev, 1U);/* 设置传感器的测量频率,这决定了传感器执行测量的速度 */status |= vl53l5cx_set_ranging_frequency_hz(&(pL5obj->Dev), 10);if (status != VL53L5CX_STATUS_OK){printf("ERROR : Configuration programming error!\n\n");while (1);}status = vl53l5cx_start_ranging(&(pL5obj->Dev));if (status != VL53L5CX_STATUS_OK){printf("vl53l5cx_start_ranging failed\n");while (1);}static VL53L5CX_ResultsData data;/* USER CODE END 2 */

主程序
主程序来获取对应的INT位状态来判定数据是否准备好。

 /* Infinite loop *//* USER CODE BEGIN WHILE */while (1){if(HAL_GPIO_ReadPin  ( GPIOB, GPIO_PIN_4) ==0)		{// 获取传感器的测距数据status = vl53l5cx_get_ranging_data(&(pL5obj->Dev), &data);printf("\n");// 循环打印所有16个区域的数据for (int i = 0; i < 16; i++) {printf("Zone : %3d, Status : %3u, Distance : %4d mm, Signal : %5lu kcps/SPADs\r\n",i,data.target_status[VL53L5CX_NB_TARGET_PER_ZONE * i],data.distance_mm[VL53L5CX_NB_TARGET_PER_ZONE * i],data.signal_per_spad[VL53L5CX_NB_TARGET_PER_ZONE * i]);}}/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}/* USER CODE END 3 */

Kcps/SPAD定义

Kcps/SPAD 是一个测量单位,其中 “Kcps” 代表千计数每秒(Kilo Counts Per Second),而 “SPAD” 代表单光子雪崩二极管(Single Photon Avalanche Diode)。
SPAD是一种高度敏感的光电二极管,当它接收到单个光子时就能产生雪崩击穿,从而输出较大的电流。由于其极高的灵敏度,它经常用于低光强度的测量中,如激光时间飞行距离测量(ToF)中。
在这里插入图片描述

状态说明

正常的数据返回状态为5,为了保持数据一致,用户需要过滤无效的目标器状态。为了给出信心评级,状态为5的目标被认为是100%有效的。6或9的状态可以用50%的置信度来考虑。所有其他状态都低于50%置信度。
在这里插入图片描述

演示结果

当测量距离为200mm-400mm时,会触发中断,进行数据打印。

在这里插入图片描述

这篇关于VL53L5CX驱动开发(3)----检测阈值的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/502681

相关文章

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

Python如何实现PDF隐私信息检测

《Python如何实现PDF隐私信息检测》随着越来越多的个人信息以电子形式存储和传输,确保这些信息的安全至关重要,本文将介绍如何使用Python检测PDF文件中的隐私信息,需要的可以参考下... 目录项目背景技术栈代码解析功能说明运行结php果在当今,数据隐私保护变得尤为重要。随着越来越多的个人信息以电子形

基于Python开发PPTX压缩工具

《基于Python开发PPTX压缩工具》在日常办公中,PPT文件往往因为图片过大而导致文件体积过大,不便于传输和存储,所以本文将使用Python开发一个PPTX压缩工具,需要的可以了解下... 目录引言全部代码环境准备代码结构代码实现运行结果引言在日常办公中,PPT文件往往因为图片过大而导致文件体积过大,

使用DeepSeek API 结合VSCode提升开发效率

《使用DeepSeekAPI结合VSCode提升开发效率》:本文主要介绍DeepSeekAPI与VisualStudioCode(VSCode)结合使用,以提升软件开发效率,具有一定的参考价值... 目录引言准备工作安装必要的 VSCode 扩展配置 DeepSeek API1. 创建 API 请求文件2.

SpringBoot使用Apache Tika检测敏感信息

《SpringBoot使用ApacheTika检测敏感信息》ApacheTika是一个功能强大的内容分析工具,它能够从多种文件格式中提取文本、元数据以及其他结构化信息,下面我们来看看如何使用Ap... 目录Tika 主要特性1. 多格式支持2. 自动文件类型检测3. 文本和元数据提取4. 支持 OCR(光学

基于Python开发电脑定时关机工具

《基于Python开发电脑定时关机工具》这篇文章主要为大家详细介绍了如何基于Python开发一个电脑定时关机工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 简介2. 运行效果3. 相关源码1. 简介这个程序就像一个“忠实的管家”,帮你按时关掉电脑,而且全程不需要你多做

Java中的Opencv简介与开发环境部署方法

《Java中的Opencv简介与开发环境部署方法》OpenCV是一个开源的计算机视觉和图像处理库,提供了丰富的图像处理算法和工具,它支持多种图像处理和计算机视觉算法,可以用于物体识别与跟踪、图像分割与... 目录1.Opencv简介Opencv的应用2.Java使用OpenCV进行图像操作opencv安装j

基于Qt开发一个简单的OFD阅读器

《基于Qt开发一个简单的OFD阅读器》这篇文章主要为大家详细介绍了如何使用Qt框架开发一个功能强大且性能优异的OFD阅读器,文中的示例代码讲解详细,有需要的小伙伴可以参考一下... 目录摘要引言一、OFD文件格式解析二、文档结构解析三、页面渲染四、用户交互五、性能优化六、示例代码七、未来发展方向八、结论摘要

在 VSCode 中配置 C++ 开发环境的详细教程

《在VSCode中配置C++开发环境的详细教程》本文详细介绍了如何在VisualStudioCode(VSCode)中配置C++开发环境,包括安装必要的工具、配置编译器、设置调试环境等步骤,通... 目录如何在 VSCode 中配置 C++ 开发环境:详细教程1. 什么是 VSCode?2. 安装 VSCo

C#图表开发之Chart详解

《C#图表开发之Chart详解》C#中的Chart控件用于开发图表功能,具有Series和ChartArea两个重要属性,Series属性是SeriesCollection类型,包含多个Series对... 目录OverviChina编程ewSeries类总结OverviewC#中,开发图表功能的控件是Char