0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

嵌入式单片机MCU开发 来源:嵌入式单片机MCU开发 作者:嵌入式单片机MCU开 2023-12-01 13:52 次阅读

概述

当使用VL6180传感器进行测距时,可以通过修改缩放因子来改变可测量的距离范围。VL6180是一种基于飞行时间原理的传感器,通过测量光信号的往返时间来确定物体与传感器之间的距离。
最近在弄ST和瑞萨RA的课程,需要样片的可以加群申请:615061293 。

默认情况下,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结果如下所示。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 传感器
    +关注

    关注

    2526

    文章

    48093

    浏览量

    740061
  • 测距
    +关注

    关注

    2

    文章

    90

    浏览量

    19398
  • TOF
    TOF
    +关注

    关注

    9

    文章

    435

    浏览量

    35902
  • stm32cubemx
    +关注

    关注

    5

    文章

    260

    浏览量

    14447
收藏 人收藏

    评论

    相关推荐

    基于STM32CUBEMX驱动TOF模块VL6180VL6180X(3)----修改设备地址

    本章主要介绍如何修改VL6180X传感器的I2C地址,并成功驱动设备以使用新的地址。VL6180X是一种多功能、高性能的接近和环境光传感器,常用于
    的头像 发表于 12-01 14:30 256次阅读
    基于<b class='flag-5'>STM32CUBEMX</b><b class='flag-5'>驱动</b><b class='flag-5'>TOF</b><b class='flag-5'>模块</b><b class='flag-5'>VL6180</b>与<b class='flag-5'>VL6180X</b>(3)----<b class='flag-5'>修改</b>设备地址

    基于STM32CUBEMX驱动TOF模块VL6180VL6180X(4)----测量环境光

    在本章中,我们将介绍如何配置VL6180X传感器以测量环境光,并获取环境光的强度值。VL6180X是一种多功能、高性能的接近和环境光传感器,其环境光测量功能可以用于检测周围环境的亮度水
    的头像 发表于 12-01 14:34 329次阅读
    基于<b class='flag-5'>STM32CUBEMX</b><b class='flag-5'>驱动</b><b class='flag-5'>TOF</b><b class='flag-5'>模块</b><b class='flag-5'>VL6180</b>与<b class='flag-5'>VL6180X</b>(4)----<b class='flag-5'>测量</b>环境光

    基于STM32CUBEMX驱动TOF模块VL6180VL6180X(5)----驱动多个VL6180X

    驱动多个VL6180X传感器进行距离测量和光强测量VL6180X传感器在VL6180的基础上增
    的头像 发表于 12-01 14:36 560次阅读
    基于<b class='flag-5'>STM32CUBEMX</b><b class='flag-5'>驱动</b><b class='flag-5'>TOF</b><b class='flag-5'>模块</b><b class='flag-5'>VL6180</b>与<b class='flag-5'>VL6180X</b>(5)----<b class='flag-5'>驱动</b>多个<b class='flag-5'>VL6180X</b>

    VL6180x单次测量范围测量后的系统错误代码

    /sparkfun/ToF_Range_Finder-VL6180_Library 我正在为范围测量读取值255,而(0x004D)RESULT_RANGE_STATUS寄存器位[7:
    发表于 09-21 16:55

    寻找手册中引用的F401和VL6180板的mbed资源

    我正在寻找手册中引用的F401和VL6180板的mbed资源。 可以吗?#vl6180x以上来自于谷歌翻译以下为原文 I was looking for mbed resources
    发表于 09-21 16:57

    VL6180X该设备的功耗是多少?

    亲, VL6180X的功耗是多少? 问候。 一个。#proximity-sensor#vl6180x以上来自于谷歌翻译以下为原文 Dear, What is the power
    发表于 09-25 17:21

    VL6180X包含多少个传感器?

    VL6180X包含多少个传感器? #vl6180x#vl6180x-outline-drawing #sensor以上来自于谷歌翻译以下为原文 How many sensors does
    发表于 09-25 17:14

    VL6180X操作如何测量距离

    的问题是:由于VL6180X计算距离作为发射和接收红外线之间的时间,它如何测量距离(例如约1cm),其对应于皮秒级的飞行时间? 谢谢#vl6180x以上来自于谷歌翻译以下为原文 I
    发表于 10-10 10:47

    VL6180X:什么是线性误差率?

    亲, VL6180X的线性误码率是多少? Tks和问候。 一个。 #proximity-sensor#vl6180x以上来自于谷歌翻译以下为原文 Dear, What
    发表于 10-22 16:29

    VL6180X范围偏移怎么更改

    大家好我在自定义主板上使用了一些VL6180X设备。 然后,它们的范围偏移似乎每次启动都会改变大约mm5mm,尽管我按应用说明中的指示调整了偏移。什么影响范围偏移?在正常情况下,只需一次调整就够了吗
    发表于 10-23 16:52

    VL6180X增加了范围

    嗨,我想增加VL6180X范围,但我不知道我必须修改哪个寄存器。我看到RangingAndALS_NucleoXXX样本中的代码,但我不明白VL6180X寄存器是如何被
    发表于 04-08 16:02

    近距离测量VL6180X错误

    嘿,我正在使用VL6180X卫星传感器进行测距测量。连接后,我收到一些测量值 - 但它们是错误的。传感器不会对0mm和~50mm之间的距离变化做出反应。它不断向我显示'4 mm'的值。超过50毫米
    发表于 05-13 07:13

    请问VL6180X的基本功能有哪些?

    VL6180X的基本功能有哪些? #vl6180x #features以上来自于谷歌翻译以下为原文 What are the basic features of VL6180X ?#vl61
    发表于 06-05 09:26

    Vl6180x 官方盖玻片模型的使用

    本帖最后由 yppc 于 2019-12-31 12:09 编辑 我最近在使用Vl6180x芯片,因为应用环境,我准备增加盖玻片防尘,我在ST官网上查询到Vl6180芯片的盖玻片模型,我想咨询
    发表于 12-31 11:41

    基于STM32CUBEMX驱动TOF模块VL6180VL6180X(1)----单模块距离获取的最佳实践

    VL6180X是基于ST FlightSense™专利技术的最新产品。作为一项突破性技术,它实现了独立于目标反射率的绝对距离测量。传统的测量方法通过测量反射光的光量来估算距离,然而这种
    的头像 发表于 07-27 09:47 1297次阅读
    基于<b class='flag-5'>STM32CUBEMX</b><b class='flag-5'>驱动</b><b class='flag-5'>TOF</b><b class='flag-5'>模块</b><b class='flag-5'>VL6180</b>与<b class='flag-5'>VL6180X</b>(1)----单<b class='flag-5'>模块</b>距离获取的最佳实践