VL53L4CD TOF开发.3--检测阈值
- 概述
- 视频教学
- 样品申请
- 完整代码下载
- 实现demo
- 硬件准备
- 技术规格
- 系统框图
- 应用示意图
- 生成STM32CUBEMX
- 选择MCU
- 串口配置
- IIC配置
- XSHUT
- GPIO1
- X-CUBE-TOF1
- app_tof.c
- 详细解释
- 主程序
- 演示结果
概述
最近在弄ST和瑞萨RA的课程,需要样片的可以加群申请:615061293 。
在现代嵌入式系统中,精确的距离测量和实时响应能力对于许多应用场景至关重要。VL53L4CD 是一款先进的飞行时间(Time-of-Flight, ToF)传感器,能够提供高精度的距离测量。本文介绍了如何基于VL53L4CD传感器实现连续测距,并通过配置检测阈值来优化系统的响应能力。
我们将详细讲解如何初始化VL53L4CD传感器,设置其测量参数和检测阈值,并实现中断配置以响应特定的测量条件。通过这种方式,系统能够在距离测量达到预设的阈值范围内触发中断,从而实现实时响应和高效数据处理。
视频教学
https://www.bilibili.com/video/BV1X1421C7Qd/
VL53L4CD TOF开发(3)----检测阈值
样品申请
https://www.wjx.top/vm/OhcKxJk.aspx#
完整代码下载
实现demo
- 初始化VL53L4CD传感器和配置测量参数,包括测距模式、时间预算和测量频率。
- 配置检测阈值,以便在测量结果处于特定范围内时触发中断。
- 实现一个主循环,持续监测测量结果并在需要时处理中断。
硬件准备
首先需要准备一个开发板,这里我准备的是自己绘制的开发板,需要的可以进行申请。
技术规格
系统框图
应用示意图
生成STM32CUBEMX
选择MCU
测试版所用的MCU为STM32G431CB。
串口配置
查看原理图,PA9和PA10设置为开发板的串口。
配置串口。
IIC配置
在这个应用中,VL53L4CD模块通过I2C(IIC)接口与主控器通信。具体来说,VL53L4CD模块的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_VL53L4CD_SimpleRanging_Process,用于配置和执行VL53L4CX传感器的简单测距操作。
详细解释
- 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 */
/* USER CODE BEGIN 2 */
RANGING_SENSOR_ITConfig_t ITConfig;
// 配置中断触发条件
ITConfig.Criteria = VL53L4CD_IT_IN_WINDOW ; // 设置中断条件为在窗口内触发
ITConfig.LowThreshold = 100; // 设置低阈值为100mm
ITConfig.HighThreshold = 300; // 设置高阈值为300mm
status = CUSTOM_RANGING_SENSOR_ConfigIT(CUSTOM_VL53L4CD, &ITConfig);
if (status != BSP_ERROR_NONE)
{
printf("Error: Unable to configure interrupt. Status code: %d\n", status);
}
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 */
CUSTOM_RANGING_SENSOR_ConfigIT 的主要功能是配置测距传感器的中断事件生成参数。它接受一个传感器实例和一个指向中断配置结构体的指针,并返回一个状态码,有如下触发情况。
- VL53L4CD_IT_DEFAULT (0xFFU):
● 默认中断条件,当新的测量结果准备好时触发中断。此时不考虑任何阈值条件。
● 适用于需要每次测量完成后都触发中断的场景。 - VL53L4CD_IT_IN_WINDOW (3U):
● 当测量距离在低阈值(LowThreshold)和高阈值(HighThreshold)之间时触发中断。
● 条件:distance >= LowThreshold AND distance <= HighThreshold
● 适用于需要检测目标物体在特定距离范围内的应用。 - VL53L4CD_IT_OUT_OF_WINDOW (2U):
● 当测量距离小于低阈值或大于高阈值时触发中断。
● 条件:distance < LowThreshold OR distance > HighThreshold
● 适用于需要检测目标物体在特定距离范围外的应用。 - VL53L4CD_IT_BELOW_LOW (0U):
● 当测量距离小于低阈值时触发中断。
● 条件:distance < LowThreshold
● 适用于需要检测目标物体靠近传感器的应用。 - VL53L4CD_IT_ABOVE_HIGH (1U):
● 当测量距离大于高阈值时触发中断。
● 条件:distance > HighThreshold
● 适用于需要检测目标物体远离传感器的应用。
主程序
轮询方式检测 GPIO 引脚状态,并在满足条件时获取 VL53L4CD 传感器的测距结果并进行处理。
/* 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 */
演示结果
当距离在100-300mm内时候会触发对应中断。