VL53L5CX驱动开发(2)----设置自主模式

2023-11-07 15:10

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

VL53L5CX驱动开发----2.设置自主模式

  • 概述
  • 视频教学
  • 样品申请
  • 源码下载
  • 自主模式与连续模式区别
  • 生成STM32CUBEMX
    • 选择MCU
    • 串口配置
    • IIC配置
  • INT设置
  • 配置使能与复位
  • X-CUBE-TOF1
  • 串口重定向
  • 代码配置
  • TOF代码配置
  • 积分时间/曝光时间(Integration time)
  • 主程序
  • 演示结果

概述

“自主模式”(Autonomous mode)通常指的是设备或系统能够在没有外部输入的情况下独立完成任务。对于传感器,如VL53L5,自主模式可能意味着传感器可以独立、定期地进行测量,而不需要来自主控制器或主机的每一次单独指令。

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

在这里插入图片描述
选择使用自主模式的原因可能包括:
简化控制:一旦配置完成,传感器可以独立工作,减少主控制器与传感器之间的通信需求。
稳定的测量频率:在自主模式下,传感器可以以固定的频率进行测量,从而确保数据的稳定性和连续性。
减少响应延迟:由于传感器持续地或定期地进行测量,数据可能会更快地准备好,从而减少了从请求到获取数据的延迟。
主控制器工作量减少:主控制器可以被释放出来执行其他任务,而不是持续地向传感器发送测量命令。
低功耗应用:对于某些传感器,自主模式可能更加能效,因为它可以在测量之间进入低功耗状态。
实现预定任务:自主模式允许传感器在特定条件下执行预定的任务,例如当检测到某个特定值时触发警报。
然而,是否使用自主模式取决于特定的应用需求。有些应用可能更倾向于连续模式,其中主控制器更频繁地与传感器交互,以获得实时数据或更高的控制精度。

视频教学

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

VL53L5CX驱动开发(2)----设置自主模式

样品申请

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

在这里插入图片描述

源码下载

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

自主模式与连续模式区别

VL53L5CX 传感器的自主模式 (AUTONOMOUS) 和连续模式 (CONTINUOUS) 都允许连续的测量操作,但它们的工作方式和使用场景略有不同:
连续模式 (CONTINUOUS):
● 在此模式下,传感器连续进行测量,每次测量后,就会产生一个新的结果。
● 传感器会尽可能快地测量,基于所设置的时间预算。
● 主机通常需要周期性地从传感器中读取数据。
● 适用于需要高更新率或实时响应的应用。
自主模式 (AUTONOMOUS):
● 传感器独立地进行测量,而无需主机的常规干预。
● 主机可以进入低功耗休眠模式,而传感器仍然独立地执行测量。当传感器完成测量时,它可以通过中断唤醒主机,通知它读取数据。
● 这种模式特别适用于低功耗应用,因为大部分时间主机可以处于休眠状态。
● 这种模式可能与设置的测量频率或时间间隔一起使用,以确定传感器执行测量的频率。
总的来说,选择哪种模式取决于应用的需求。如果需要实时的高更新率数据,则连续模式可能更合适;而对于低功耗或不需要实时数据的应用,自主模式可能是更好的选择。

生成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中添加刷新速率,500ms刷新一次,所以频率为2Hz。

/* USER CODE BEGIN Includes */
#include "stdio.h"
#include "custom_ranging_sensor.h"#define TIMING_BUDGET (500U) /* 5 ms < TimingBudget < 1000 ms */
#define RANGING_FREQUENCY (2U) /* Ranging frequency Hz (shall be consistent with TimingBudget value) */
#define POLLING_PERIOD (1000U/RANGING_FREQUENCY) /* refresh rate for polling mode (milliseconds) *//* 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 uint8_t map_target_status(uint8_t status);
//将从VL53L5CX传感器获取的数据转换
static int32_t convert_data_format(VL53L5CX_Object_t *pObj,VL53L5CX_ResultsData *data, RANGING_SENSOR_Result_t *pResult);
//打印数据
static void print_result(RANGING_SENSOR_Result_t *Result);
static RANGING_SENSOR_ProfileConfig_t Profile;
static int32_t status = 0;
static RANGING_SENSOR_Result_t Result;
/* USER CODE END PFP */

添加TOF初始化。
若需要为8*8,修改对应vl53l5cx_set_resolution参数即可。
其中vl53l5cx_set_integration_time_ms和vl53l5cx_set_ranging_frequency_hz加载了对应的刷新速率。

  /* USER CODE BEGIN 2 */VL53L5CX_Object_t *pL5obj = CUSTOM_RANGING_CompObj[CUSTOM_VL53L5CX];static VL53L5CX_ResultsData data;uint8_t NewDataReady = 0;// 设置测距的配置文件为 4x4 的连续测量模式Profile.RangingProfile = RS_PROFILE_4x4_CONTINUOUS;// 设置测量的时间预算,这通常决定了测量的速度和准确度Profile.TimingBudget = TIMING_BUDGET; /* 5 ms < TimingBudget < 1000 ms */// 设置测量的频率,这决定了传感器执行测量的速率Profile.Frequency = RANGING_FREQUENCY; /* Ranging frequency Hz (shall be consistent with TimingBudget value) */// 确定是否启用环境光测量,0为禁用,1为启用Profile.EnableAmbient = 0; /* Enable: 1, Disable: 0 */// 确定是否启用信号测量,0为禁用,1为启用Profile.EnableSignal = 0; /* Enable: 1, Disable: 0 */pL5obj->IsAmbientEnabled = Profile.EnableAmbient;pL5obj->IsSignalEnabled = Profile.EnableSignal;/*use case VL53L5CX_PROFILE_4x4_CONTINUOUS:*/// 设置传感器的测量分辨率为 4x4status = vl53l5cx_set_resolution(&(pL5obj->Dev), VL53L5CX_RESOLUTION_4X4);// 设置传感器的测量模式为自主模式status |= vl53l5cx_set_ranging_mode(&(pL5obj->Dev), VL53L5CX_RANGING_MODE_AUTONOMOUS);// 设置传感器的集成时间,这通常关联到测量的时间预算status |= vl53l5cx_set_integration_time_ms(&(pL5obj->Dev), TIMING_BUDGET);// 设置传感器的测量频率,决定了传感器执行测量的速率status |= vl53l5cx_set_ranging_frequency_hz(&(pL5obj->Dev), RANGING_FREQUENCY);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);}/* USER CODE END 2 */

积分时间/曝光时间(Integration time)

在这里插入图片描述

积分时间是一项仅在使用自主测距模式时可用的功能(请参阅第 4.5 节测距模式)。 它允许用户在启用 VCSEL 时更改时间。 如果测距模式设置为连续,则更改积分时间无效。 默认积分时间设置为 5 ms。
对于 4x4 和 8x8 分辨率,积分时间的影响是不同的。 分辨率 4x4 由一个积分时间组成,8x8 分辨率由四个积分时间组成。 下图表示两种分辨率的 VCSEL 发射。
在这里插入图片描述

所有积分时间之和 + 1 ms 开销必须低于测量周期,否则测距周期将自动增加。

主程序

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

  /* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* polling mode */
if(HAL_GPIO_ReadPin  ( GPIOB, GPIO_PIN_14) ==0)		
{do {(void)vl53l5cx_check_data_ready(&(pL5obj->Dev), &NewDataReady);} while (!NewDataReady);if (NewDataReady != 0){status = vl53l5cx_get_ranging_data(&(pL5obj->Dev), &data);if (status == VL53L5CX_STATUS_OK){/*Convert the data format to Result format.Note that you can print directly from data format*/if (convert_data_format(pL5obj, &data, &Result) < 0){printf("convert_data_format failed\n");while (1);}print_result(&Result);}}		}		/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}/* USER CODE END 3 */

演示结果

当分辨率为4*4时候,需要积分1次,设置的积分时间为500ms,那么对应的频率应该是2Hz。

在这里插入图片描述

当分辨率为8*8时候,需要积分4次,设置的积分时间为500ms,那么对应的频率应该是0.5Hz。

在这里插入图片描述

配置完成侯可以在Tera Term下查看结果,如下是4*4的显示。

在这里插入图片描述

这篇关于VL53L5CX驱动开发(2)----设置自主模式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Nginx设置连接超时并进行测试的方法步骤

《Nginx设置连接超时并进行测试的方法步骤》在高并发场景下,如果客户端与服务器的连接长时间未响应,会占用大量的系统资源,影响其他正常请求的处理效率,为了解决这个问题,可以通过设置Nginx的连接... 目录设置连接超时目的操作步骤测试连接超时测试方法:总结:设置连接超时目的设置客户端与服务器之间的连接

mybatis和mybatis-plus设置值为null不起作用问题及解决

《mybatis和mybatis-plus设置值为null不起作用问题及解决》Mybatis-Plus的FieldStrategy主要用于控制新增、更新和查询时对空值的处理策略,通过配置不同的策略类型... 目录MyBATis-plusFieldStrategy作用FieldStrategy类型每种策略的作

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

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

CSS弹性布局常用设置方式

《CSS弹性布局常用设置方式》文章总结了CSS布局与样式的常用属性和技巧,包括视口单位、弹性盒子布局、浮动元素、背景和边框样式、文本和阴影效果、溢出隐藏、定位以及背景渐变等,通过这些技巧,可以实现复杂... 一、单位元素vm 1vm 为视口的1%vh 视口高的1%vmin 参照长边vmax 参照长边re

Windows设置nginx启动端口的方法

《Windows设置nginx启动端口的方法》在服务器配置与开发过程中,nginx作为一款高效的HTTP和反向代理服务器,被广泛应用,而在Windows系统中,合理设置nginx的启动端口,是确保其正... 目录一、为什么要设置 nginx 启动端口二、设置步骤三、常见问题及解决一、为什么要设置 nginx

Java实现状态模式的示例代码

《Java实现状态模式的示例代码》状态模式是一种行为型设计模式,允许对象根据其内部状态改变行为,本文主要介绍了Java实现状态模式的示例代码,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来... 目录一、简介1、定义2、状态模式的结构二、Java实现案例1、电灯开关状态案例2、番茄工作法状态案例

基于Python开发PPTX压缩工具

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

vue基于ElementUI动态设置表格高度的3种方法

《vue基于ElementUI动态设置表格高度的3种方法》ElementUI+vue动态设置表格高度的几种方法,抛砖引玉,还有其它方法动态设置表格高度,大家可以开动脑筋... 方法一、css + js的形式这个方法需要在表格外层设置一个div,原理是将表格的高度设置成外层div的高度,所以外层的div需要

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

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

电脑密码怎么设置? 一文读懂电脑密码的详细指南

《电脑密码怎么设置?一文读懂电脑密码的详细指南》为了保护个人隐私和数据安全,设置电脑密码显得尤为重要,那么,如何在电脑上设置密码呢?详细请看下文介绍... 设置电脑密码是保护个人隐私、数据安全以及系统安全的重要措施,下面以Windows 11系统为例,跟大家分享一下设置电脑密码的具体办php法。Windo