VL53L4CD ToF传感器单次测量模式开发指南
创作时间:
作者:
@小白创作中心
VL53L4CD ToF传感器单次测量模式开发指南
引用
1
来源
1.
https://m.elecfans.com/article/3379709.html
概述
在现代嵌入式系统中,精确的距离测量和实时响应能力对于许多应用场景至关重要。VL53L4CD 是一款先进的飞行时间(Time-of-Flight, ToF)传感器,能够提供高精度的距离测量。本文介绍了如何基于VL53L4CD传感器实现连续测距,并通过配置检测阈值来优化系统的响应能力。
我们将详细讲解如何初始化VL53L4CD传感器,设置其测量参数和检测阈值,并实现中断配置以响应特定的测量条件。通过这种方式,系统能够在距离测量达到预设的阈值范围内触发中断,从而实现实时响应和高效数据处理。
硬件准备
首先需要准备一个开发板,这里使用的是STM32G431CB MCU。开发板的硬件连接如下:
- 串口:PA9和PA10
- I2C接口:PA8和PB5
- XSHUT引脚:用于控制传感器的开启和关闭
- GPIO1:用于中断输出
软件配置
STM32CubeMX配置
- IIC配置:配置IIC为快速模式,速度为400k。
- XSHUT:XSHUT引脚由主机控制,设备在不使用时可以被完全关闭,然后通过主机使用XSHUT引脚来唤醒。
- GPIO1:当传感器完成一次测距操作时,GPIO1引脚可以被配置为输出中断信号,通知微控制器读取测量结果。
代码实现
在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 */
在main函数中进行传感器初始化和配置:
/* 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_AUTONOMOUS;// 设置测距配置文件为自主测量模式
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_ONESHOT);
/* USER CODE END 2 */
在主循环中轮询GPIO状态并处理测量结果:
/* 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);
}
// 停止测量
CUSTOM_RANGING_SENSOR_Stop(CUSTOM_VL53L4CD);
HAL_Delay(1000);
// 再次启动传感器进行单次测量
status = CUSTOM_RANGING_SENSOR_Start(CUSTOM_VL53L4CD, RS_MODE_BLOCKING_ONESHOT);
}
/* USER CODE END WHILE */
}
/* USER CODE END 3 */
演示结果
配置成功后,数据可以正常打印。若对部分代码进行注释,可以查看到测距只执行一次,可以判断当前已经进入单次模式。
热门推荐
抑郁症患者的“不真实感”:科学解释与治疗方案
APF是指什么?APF值越高越好还是越低越好?
心脏的构造之一:心脏自身血供系统——冠状动脉
项目制管理调研表怎么写
超速对车祸的影响:应对后果的法律资源
超速撞到人保险赔吗?律师在线为您详解交通事故赔偿法律问题
莲子用电饭锅大概要熬多久才熟
种植牙话术:如何有效沟通种植牙方案与患者需求?
从“18A”到“18C”:硬科技推动港股生态深刻变革
如何分析实物黄金的趋势形势?这种趋势形势受哪些宏观因素影响?
汽车报废需要哪些手续?车管所提醒:这3件事情必须做!
庆阳市成为甘肃省第二个GDP千亿级城市
项目台账怎么管理不乱
云南一出租车司机遇害,仅40岁,事发全过程披露,凶手正面照凶煞
减脂期食谱推荐
天竺葵如何施肥?用什么肥料施肥?
花多多、奥绿肥怎么用,有哪些注意事项
千禧一代为什么叫千禧一代
如何依法变更保险受益人?保险受益人变更的手续和注意事项有哪些?
如何了解保险受益人的变更与生育保险的领取?这些操作有哪些规定?
电感与磁珠的异同
宏观经济跑稳“第一棒” 发展态势向新向好
有欠条是否算诈骗
计算机内存管理中的分页与分段技术详解
计算机内存管理中的分页与分段技术详解
基于预训练模型的持续学习方法综述
传承非遗,近九成受访青年认为重要的是坚持匠心守正创新
菏泽:“沉浸式”体验,让非遗文化“触手可及”
房贷利率浮动幅度及其对购房者的影响
破伤风疫苗接种时机:超12小时后还能否保护你?