基于STM32CUBEMX驱动TOF模块VL6180与VL6180X(2)----修改测量范围

发布者:SparklingSun最新更新时间:2024-05-30 来源: elecfans关键字:STM32CUBEMX  VL6180X  测量范围 手机看文章 扫描二维码
随时随地手机看文章

概述

当使用VL6180传感器进行测距时,可以通过修改缩放因子来改变可测量的距离范围。VL6180是一种基于飞行时间原理的传感器,通过测量光信号的往返时间来确定物体与传感器之间的距离。

默认情况下,VL6180传感器的测距范围约为0至200毫米。然而,通过调整缩放因子,您可以扩展或缩小该范围,以适应不同的应用需求。


缩放因子是一个乘法因子,用于调整传感器的测量范围。较小的缩放因子可以扩展测距范围,使传感器能够测量更远的距离,而较大的缩放因子可以缩小测距范围,使传感器适用于更近的测量。

要修改缩放因子,需要使用VL6180传感器的控制接口与其进行通信。通过发送适当的命令和参数,您可以设置所需的缩放因子值。具体的命令和参数取决于您使用的特定控制接口和驱动程序。

下面温度可以得知,主要有3种缩放,测量距离分别到20cm、40cm、60cm。

视频教程

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

样品申请

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

完整代码下载

[https://download.csdn.net/download/qq_24312945/87945856

修改缩放因子

在ST提供的en.STSW-IMG003.zip压缩包中,可以找到一个名为CodeSamples_UM.pdf的文档。在该文档中,有一个案例展示了如何修改缩放方式。通过调用函数VL6180x_UpscaleSetScaling(myDev, 2),您可以将缩放因子设置为2,实现将测量范围扩大两倍的效果。这个案例为您提供了一个具体的示例,可以帮助您了解如何在编程中使用该函数来修改缩放因子。

VL6180x_UpscaleSetScaling

在ST提供的en.STSW-IMG003.zip压缩包中,vl6180x_api.c文件包含了VL6180x_UpscaleSetScaling函数,这个函数是用来设置设备的测距缩放因子的。

当设备进行测量时,测距缩放因子会应用于设备测得的原始距离,以扩大测量范围,但会牺牲一定的精度。

需要注意的是,在设备处于固件待机状态(自由运行)以外的状态下修改缩放因子是不安全的。这可能导致误报中断、测距范围错误等问题。

为了简化和优化原始函数,并提供更清晰和易于理解的代码结构。去除不相关的部分,由于原始函数中的某些操作在新的函数中没有被使用到,这些部分被去除以提高代码的清晰度和可读性。

修改后的代码具有更简洁、易读和易于维护的结构,同时仍然保留了修改缩放因子所需的核心操作。这种修改的目的是使代码更易于理解和实现,并提供更好的可扩展性和可重用性。


修改为所需要的函数,如下所示:


uint8_t scaling;

// RANGE_SCALER values for 1x, 2x, 3x scaling - see STSW-IMG003 core/src/vl6180x_api.c (ScalerLookUP[])

static uint16_t const ScalerValues[] = {0, 253, 127, 84};



void VL6180x_UpscaleSetScaling(uint8_t add,uint8_t new_scaling)

{

 uint8_t const DefaultCrosstalkValidHeight = 20; // default value of SYSRANGE__CROSSTALK_VALID_HEIGHT

  // do nothing if scaling value is invalid

  if (new_scaling < 1 || new_scaling > 3) 

    { return; }


    scaling = new_scaling;


VL6180X_WriteByte_16Bit(add,RANGE_SCALER,ScalerValues[scaling]);


// apply scaling on part-to-part offset

VL6180X_WriteByte(add,SYSRANGE__PART_TO_PART_RANGE_OFFSET,ptp_offset / scaling);


  // apply scaling on CrossTalkValidHeight

//  writeReg(VL6180X::SYSRANGE__CROSSTALK_VALID_HEIGHT, DefaultCrosstalkValidHeight / scaling);


VL6180X_WriteByte(add,SYSRANGE__CROSSTALK_VALID_HEIGHT, DefaultCrosstalkValidHeight / scaling);





  // This function does not apply scaling to RANGE_IGNORE_VALID_HEIGHT.


  // enable early convergence estimate only at 1x scaling

//  uint8_t rce = readReg(VL6180X::SYSRANGE__RANGE_CHECK_ENABLES);

//  writeReg(VL6180X::SYSRANGE__RANGE_CHECK_ENABLES, (rce & 0xFE) | (scaling == 1));


uint8_t rce=VL6180X_ReadByte(add,SYSRANGE__RANGE_CHECK_ENABLES);

VL6180X_WriteByte(add,SYSRANGE__CROSSTALK_VALID_HEIGHT, DefaultCrosstalkValidHeight / scaling);


}

主函数

修改后的函数如下所示,修改缩放因子为x2。



/* USER CODE BEGIN 2 */

    printf('111');


    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);    

    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_RESET);    


    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_RESET);    

    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9, GPIO_PIN_RESET);    


    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_RESET);    

    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_14, GPIO_PIN_RESET);    



//VL6180_4

    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_SET);    

    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_6, GPIO_PIN_SET);            


    HAL_Delay(1);

    VL6180X_Init(VL6180X_DEFAULT_I2C_ADDR1);

    VL6180x_UpscaleSetScaling(VL6180X_DEFAULT_I2C_ADDR1,2);//缩放x2

    uint8_t id=VL6180X_Read_ID(VL6180X_DEFAULT_I2C_ADDR1);

    printf('id=%d',id);    

  /* USER CODE END 2 */


  /* Infinite loop */

  /* USER CODE BEGIN WHILE */

  while (1)

  {

        VL6180_L1=VL6180X_Read_Range(VL6180X_DEFAULT_I2C_ADDR1);

        printf('VL6180_L1=%dmmn',VL6180_L1*2);

        HAL_Delay(1000);                

    /* USER CODE END WHILE */


    /* USER CODE BEGIN 3 */

  }

  /* USER CODE END 3 */

测试结果

测试距离为20cm结果如下所示。


关键字:STM32CUBEMX  VL6180X  测量范围 引用地址:基于STM32CUBEMX驱动TOF模块VL6180与VL6180X(2)----修改测量范围

上一篇:基于STM32CUBEMX驱动TOF模块VL6180与VL6180X(4)----测量环境光
下一篇:机智云平台+STM32+树莓派的草莓采摘机器人控制系统

推荐阅读最新更新时间:2024-11-02 20:25

STM32CUBEMX开发GD32F303读保护与写保护概述
概述 芯片读保护以后,flash将不可以从外部读取,这样可以防止别人读取或者盗取芯片代码,如果想再次烧录代码,需要解除保护,有时候在代码调试的过程中,也有可能会触发读保护,解除读保护也可以使用代码,也可以使用软件进行读保护解锁。 软件进入读保护 芯片读保护以后,flash将不可以从外部读取,这样可以防止别人读取或者盗取芯片代码,如果想再次烧录代码,需要解除保护,有时候在代码调试的过程中,也有可能会触发读保护,解除读保护也可以使用代码,也可以使用软件进行读保护解锁。 软件进入读保护 打开GD-Link Programmer,点击Target- Security可以进入读保护模式。 这时候会提示是否进入读保护。 进入读保护
[单片机]
<font color='red'>STM32CUBEMX</font>开发GD32F303读保护与写保护概述
STM32cubeMX使用心得
使用STM32cubeMX创建工程 首先你需要下载STM32cubeMX软件版本,我使用的是——5.0.1.软件版本可以去官网下载。 其次你需要一个合适你工程的《STMcube_FW_F1_Vxx》库链接如下:提取码:uqbw https://pan.baidu.com/s/1x-tMOqPwUC0R9O2xAx2QfQ 当我们使用STM32cubeMX创建一个工程时选择MCU selector - core,series。 最后在选择具体什么型号的芯片。 工程配置说明: 系统核心- systeam core 数模转换- analog 定时器功能- timers 通讯功能- connectivity 音频- multi
[单片机]
<font color='red'>STM32cubeMX</font>使用心得
扩展向量网路分析仪范围 精确测量陶瓷电容
陶瓷电容是影响稳压器控制回路稳定性和供电网路阻抗的主要因素,对于电路性能发挥重要作用。使用这类电路进行设计时必须在宽频率范围提供良好的阻抗资料。本文讨论如何使用简单技术实现精确、宽频的频率测量。 陶瓷电容是影响电压稳压器控制回路稳定性与供电网路(PDN)阻抗的主要因素,因而对于电路性能发挥重要作用。在使用这类电路进行设计时,你必须在较宽的频率范围内提供良好的阻抗资料。正确的测量技术是实现精确测量的关键。本文讨论借由扩展向量网路分析仪(VNA)的范围,如何有效利用两种简单的技术实现精确、宽频的频率测量。 陶瓷电容由于具有高阻抗动态范围,因而难以测量其电容值。较大的钽电容和铝电解电容的动态范围较小,其电容值较容易测量。 就
[手机便携]
STM32双缓冲机制初始化(使用STM32CubeMX
1.使用STM32CubeMX配置的串口引脚设置和dma的设置会生成在usart.c。 1)如果DMA接收想采用循环缓冲区的方式,可以直接将RX-DMA设置成Circle方式,然后数据就会硬件上自动实现环形缓冲区的功能,省了不少时间。 2)DMA在采用Normal模式的时候,当一次任务完成后,DMA- DMA_BufferSize自动清零,并且DMA自动停止。如果想再次设置DMA的BufferSize的话,必须要进行如下操作: step1:DMA_CMD(DMAx_Channely,DISABLE); step2: 设置DMA_BufferLen step3:DMA_CMD(DMAx_Channely
[单片机]
STM32CubeMX帮你写代码,移植代码工程。
下载template,实验1:https://github.com/qqfoxmail/helloworld.git 在SYSTEM文件下,新建头文件夹led,添加头文件led.h 或 注意路径!!!!! 打开keil5添加头文件路径 keil5中SYSTEM下新建led.c文件 之后移植CubeMX中的所需代码 注意!!! 把CubeMX中函数前static去掉!!!!!不然编译会报错!!! ..SYSTEMledled.h(6): error: #114: function MX_GPIO_Init was referenced but not defined
[单片机]
让<font color='red'>STM32CubeMX</font>帮你写代码,移植代码工程。
STM32CubeMX串口配置及库printf打印
最新版STM32CubeMXV5.0.0已经上传到了网盘,或者自己通过软件在线升级。 STM32CubeMX运行环境搭建包含两个部分。首先是 Java运行环境安装,其次是STM32CubeMX软件安装。Java 软件和STM32CubeMX 软件都可以在官网找到最新的下载。 1. Java运行环境,大家可以到 Java 官网 www.java.com下载最新的 Java 软件; 2.STM32CubeMX可以在ST官网www.st.com/content/st_com/zh.html下载最新的版本; 3.或者在我网盘上下载全部所需软件资料,链接:https://pan.baidu.com/s/1kWUH08n 密码:
[单片机]
<font color='red'>STM32CubeMX</font>串口配置及库printf打印
使用STM32CubeMX开发:按键中断实验
硬件平台:stm32F407Zet6 软件平台:stm32cubeMX 4.7+MDK5.14 电路连接:PE8-LED0、PE9-LED1、PE10-LED2、PE11-LED3、PE12-KEY0、PE13-KEY1、PE14-KEY2、PE15-KEY3 第一步、使用stm32cubeMX创建工程,选择相应的芯片,配置RCC、SYS、引脚和时钟如下图所示: 注意,由于按键上有上拉电阻,这里选择中断模式的时候,我们选择下降沿触发中断。 第二步,配置输出Keil工程 第三步、编写程序下载验证 STM32CubeMx把代码都生成了,查找函数,分析调用的过程,添加应用层代码就行 首先在stm32f4x
[单片机]
使用<font color='red'>STM32CubeMX</font>开发:按键中断实验
STM32CubeMX | 31-使用硬件FMC读写SDRAM(W9825G6KH)
本篇详细的记录了如何使用STM32CubeMX配置 STM32F767IGT6 的硬件FMC外设与 SDRAM 通信(W9825G6KH)。 1. 准备工作 硬件准备 开发板 首先需要准备一个开发板,这里我准备的是STM32F767IGT6的核心板。 SDRAM 核心板板载一片SDRAM,型号为 W9825G6KH,大小为 32 MB。 软件准备 需要准备一份 W9825G6KH-6 的数据手册。 2. STM32 FMC外设概述 2.1. 什么是FMC FMC全称Flexible Memory Controller,灵活的内存控制器,顾名思义,其主要作用是:负责向外部扩展的存储类设备提供控制信号。 FMC内存控
[单片机]
<font color='red'>STM32CubeMX</font> | 31-使用硬件FMC读写SDRAM(W9825G6KH)
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved