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

这篇具有很好参考价值的文章主要介绍了VL53L5CX驱动开发(2)----设置自主模式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

概述

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

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

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

视频教学

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

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

样品申请

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

vl53l5cx,传感器,stm32cube,单片机,STM32CUBEMX,Autonomous mode,vl53l5cx,tof,飞行时间,雪崩二极管,自主模式

源码下载

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

自主模式与连续模式区别

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

生成STM32CUBEMX

选择MCU

测试版所用的MCU为STM32G431CB。
vl53l5cx,传感器,stm32cube,单片机,STM32CUBEMX,Autonomous mode,vl53l5cx,tof,飞行时间,雪崩二极管,自主模式

串口配置

查看原理图,PA9和PA10设置为开发板的串口。
vl53l5cx,传感器,stm32cube,单片机,STM32CUBEMX,Autonomous mode,vl53l5cx,tof,飞行时间,雪崩二极管,自主模式

配置串口。
vl53l5cx,传感器,stm32cube,单片机,STM32CUBEMX,Autonomous mode,vl53l5cx,tof,飞行时间,雪崩二极管,自主模式

IIC配置

在这个应用中,VL53L5CX模块通过I2C(IIC)接口与主控器通信。具体来说,VL53L5CX模块的I2C引脚连接到主控器的PA8和PB5两个IO口。
vl53l5cx,传感器,stm32cube,单片机,STM32CUBEMX,Autonomous mode,vl53l5cx,tof,飞行时间,雪崩二极管,自主模式

配置IIC为快速模式,速度为400k。
vl53l5cx,传感器,stm32cube,单片机,STM32CUBEMX,Autonomous mode,vl53l5cx,tof,飞行时间,雪崩二极管,自主模式

INT设置

自主模式可以通过获取INT管脚进行判断数据是否准备好。
vl53l5cx,传感器,stm32cube,单片机,STM32CUBEMX,Autonomous mode,vl53l5cx,tof,飞行时间,雪崩二极管,自主模式

配置PB4为输入模式。
vl53l5cx,传感器,stm32cube,单片机,STM32CUBEMX,Autonomous mode,vl53l5cx,tof,飞行时间,雪崩二极管,自主模式

配置使能与复位

驱动中有对模块进行复位的操作。
vl53l5cx,传感器,stm32cube,单片机,STM32CUBEMX,Autonomous mode,vl53l5cx,tof,飞行时间,雪崩二极管,自主模式

配置PB15和PB3为输出管脚。
vl53l5cx,传感器,stm32cube,单片机,STM32CUBEMX,Autonomous mode,vl53l5cx,tof,飞行时间,雪崩二极管,自主模式

X-CUBE-TOF1

本节介绍在不需要使用样例应用时如何使用STM32CubeMX将X-CUBE-TOF1软件包添加到项目中。有了这样的设置,就只配置了驱动层。
vl53l5cx,传感器,stm32cube,单片机,STM32CUBEMX,Autonomous mode,vl53l5cx,tof,飞行时间,雪崩二极管,自主模式

由于需要自主模式,所以可以不开启主程序TOF执行代码。
vl53l5cx,传感器,stm32cube,单片机,STM32CUBEMX,Autonomous mode,vl53l5cx,tof,飞行时间,雪崩二极管,自主模式

串口重定向

打开魔术棒,勾选MicroLIB
vl53l5cx,传感器,stm32cube,单片机,STM32CUBEMX,Autonomous mode,vl53l5cx,tof,飞行时间,雪崩二极管,自主模式

在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,所以需要注释掉。
vl53l5cx,传感器,stm32cube,单片机,STM32CUBEMX,Autonomous mode,vl53l5cx,tof,飞行时间,雪崩二极管,自主模式

由于没加载串口定义,所以注释掉#include “custom.h”
vl53l5cx,传感器,stm32cube,单片机,STM32CUBEMX,Autonomous mode,vl53l5cx,tof,飞行时间,雪崩二极管,自主模式
vl53l5cx,传感器,stm32cube,单片机,STM32CUBEMX,Autonomous mode,vl53l5cx,tof,飞行时间,雪崩二极管,自主模式
vl53l5cx,传感器,stm32cube,单片机,STM32CUBEMX,Autonomous mode,vl53l5cx,tof,飞行时间,雪崩二极管,自主模式

vl53l5cx,传感器,stm32cube,单片机,STM32CUBEMX,Autonomous mode,vl53l5cx,tof,飞行时间,雪崩二极管,自主模式

vl53l5cx,传感器,stm32cube,单片机,STM32CUBEMX,Autonomous mode,vl53l5cx,tof,飞行时间,雪崩二极管,自主模式

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:
  */
	// 设置传感器的测量分辨率为 4x4
  status = 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)

vl53l5cx,传感器,stm32cube,单片机,STM32CUBEMX,Autonomous mode,vl53l5cx,tof,飞行时间,雪崩二极管,自主模式

积分时间是一项仅在使用自主测距模式时可用的功能(请参阅第 4.5 节测距模式)。 它允许用户在启用 VCSEL 时更改时间。 如果测距模式设置为连续,则更改积分时间无效。 默认积分时间设置为 5 ms。
对于 4x4 和 8x8 分辨率,积分时间的影响是不同的。 分辨率 4x4 由一个积分时间组成,8x8 分辨率由四个积分时间组成。 下图表示两种分辨率的 VCSEL 发射。
vl53l5cx,传感器,stm32cube,单片机,STM32CUBEMX,Autonomous mode,vl53l5cx,tof,飞行时间,雪崩二极管,自主模式

所有积分时间之和 + 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。

vl53l5cx,传感器,stm32cube,单片机,STM32CUBEMX,Autonomous mode,vl53l5cx,tof,飞行时间,雪崩二极管,自主模式

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

vl53l5cx,传感器,stm32cube,单片机,STM32CUBEMX,Autonomous mode,vl53l5cx,tof,飞行时间,雪崩二极管,自主模式

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

vl53l5cx,传感器,stm32cube,单片机,STM32CUBEMX,Autonomous mode,vl53l5cx,tof,飞行时间,雪崩二极管,自主模式文章来源地址https://www.toymoban.com/news/detail-764872.html

到了这里,关于VL53L5CX驱动开发(2)----设置自主模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • VL53L8CX驱动开发(1)----驱动TOF进行区域检测

    VL53L8CX是一款8x8多区域ToF测距传感器,它在环境光下能够在降低功耗的同时增强性能。该传感器基于意法半导体的FlightSense技术设计,能够提供最高400 cm的精确测距,并具有65°对角线视场。 VL53L8CX集成了功能强大的新一代VCSEL,以及两个先进的超表面镜头。硬件封装在创新的“

    2024年03月18日
    浏览(69)
  • ESP32应用教程(1)— VL53L3CX距离传感器

    文章目录 前言 1 产品概述 1.1 技术规格 1.2 系统框图 1.3 设备引脚分布 2 工作流程 2.1 系统功能描述 2.2 状态机描述 2.3 测距模式说明 3 控制接口 3.1 设备地址 3.2 I²C写1个字节数据 3.3 I²C读1个字节数据 3.4 I²C写多个字节数据 3.5 I²C读多个字节数据 3.6 I²C 接口 - 参考寄存

    2024年02月11日
    浏览(59)
  • K_A12_022 基于STM32等单片机驱动VL53L0X模块 串口与OLED0.96双显示

    注:偏差校准步骤(均十六进制发送) 1、偏差校准命令 A5 21 0A D0(此处是在10CM处校准) 2、加载数据命令 A5 43 04 EC(断电重启后加载偏差补偿) 3、保存设置命令 A5 87 01 2D(保存设置后生效) 单片机型号 测试条件 模块名称 代码功能 STC89C52RC 晶振11.0592M VL53L0X模块 STC89C52RC驱动VL53L0X模

    2024年02月13日
    浏览(35)
  • STM32F103实现激光测距传感器测距WT-VL53L0 L1

    目录 本博客将采用标准库和HAL库实现 所用设备选择 引脚说明 与单片机的接线表 标准库实现  HAL库实现 本博客将采用 标准库 和 HAL库 实现 所用设备选择 单片机型号:STM32F103C8T6  激光测距传感器型号:WT-VL53L0 L1   采用串口TTL电平输出,可以接USB-TTL串口到电脑,或者直接接

    2024年02月14日
    浏览(40)
  • MSP432自主开发笔记4:DS3115舵机的0~180全角度驱动

    芯片使用:MSP432P401R. 今日学习一款全角度15KG大扭力舵机的驱动,最近电赛学习任务紧,更新一篇比较水的文章: 文章提供原理解释,全部代码,整体工程: 目录 舵机驱动原理: 这是舵机DS3115MG: 全角度反馈编程设计: 初始化定时器TA3: 设计转角函数: 整体测试工程下载:

    2024年02月15日
    浏览(35)
  • MSP432自主开发笔记5:IIC通信移植与驱动AT24Cxx存储芯片

    今日学习移植MSP432的IIC总线协议,并用此驱动AT24C02芯片实现写入以及读取的功能,然后实现打印开机复位次数的效果。 文章贴出测试工程,测试截图,测试代码~  其实是实在看不懂MSP432有关于FLASH存储操作相关的英文手册与例程,没法实现掉电保护数据等功能,才想到用A

    2024年02月15日
    浏览(41)
  • 基于STM32CUBEMX驱动TOF模块VL6180与VL6180X(1)----单模块距离获取的最佳实践

    VL6180X是基于ST FlightSense™专利技术的最新产品。作为一项突破性技术,它实现了独立于目标反射率的绝对距离测量。传统的测量方法通过测量反射光的光量来估算距离,然而这种方法存在一个主要缺点,即被测物体的颜色和表面特性对测量精度产生很大影响。VL6180X采用了一种

    2024年02月10日
    浏览(37)
  • 测试计划驱动开发模式 TPDD:一种比 TDD 更友好的开发模式

    相信大部分开发团队都在使用TDD,并且还有很多开发团队都 对外声明 在使用 TDD 开发模式。 之所以说是“对外声明”,是因为很多开发团队虽然号称使用的是 TDD 开发模式,实际开发过程中却无法满足 TDD 的要求。 实际上,测试驱动的开发模式确实有效,它将可能发生的问题

    2024年02月06日
    浏览(37)
  • 数据驱动开发模式将软件开发过程改造成一个公式化的迭代模式,可以提升软件开发效率,缩短开发周期,降低开发成本。

    作者:禅与计算机程序设计艺术 随着云计算、大数据等新兴技术的应用,软件开发领域迎来了蓬勃发展的时期。各种编程语言、框架、工具不断涌现,协同工作的强烈需求已经成为当今社会的一个主要挑战。这就需要一种新的开发方式来适应这种复杂多变的环境。传统的瀑布

    2024年02月06日
    浏览(76)
  • 微软向开发者推出搭载高通骁龙8cx Gen 3的迷你主机

    在 Microsoft Build 2022 开发者大会上,微软宣布将向开发者推出定制的 Windows Dev Kit 2023 开发套件,该套件实际就是一套迷你主机,搭载高通骁龙 8cx Gen 3 计算平台。 推出这个开发套件显而易见是为了 ARM 平台的,微软希望帮助开发者将他们的应用程序带到 ARM 设备上。目前 Windo

    2024年02月13日
    浏览(71)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包