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

发布时间:2024-05-30  

概述

当使用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结果如下所示。


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>