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

news/2024/11/29 13:34:24/

概述

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

默认情况下,VL6180传感器的测距范围约为0至200毫米。然而,通过调整缩放因子,您可以扩展或缩小该范围,以适应不同的应用需求。
缩放因子是一个乘法因子,用于调整传感器的测量范围。较小的缩放因子可以扩展测距范围,使传感器能够测量更远的距离,而较大的缩放因子可以缩小测距范围,使传感器适用于更近的测量。
要修改缩放因子,需要使用VL6180传感器的控制接口与其进行通信。通过发送适当的命令和参数,您可以设置所需的缩放因子值。具体的命令和参数取决于您使用的特定控制接口和驱动程序。
下面温度可以得知,主要有3种缩放,测量距离分别到20cm、40cm、60cm。

在这里插入图片描述

视频教程

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

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

样品申请

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

修改缩放因子

在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 invalidif (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_4HAL_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);//缩放x2uint8_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=%dmm\n",VL6180_L1*2);HAL_Delay(1000);				/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}/* USER CODE END 3 */

测试结果

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

在这里插入图片描述


http://www.ppmy.cn/news/554880.html

相关文章

【MySql】多版本并发控制MVCC前置知识——隐藏字段、undo日志与Read View

文章目录 3个记录隐藏列字段undo日志模拟 MVCCRead View 数据库并发的场景有三种&#xff1a; 读-读 &#xff1a;不存在任何问题&#xff0c;也不需要并发控制 读-写 &#xff1a;有线程安全问题&#xff0c;可能会造成事务隔离性问题&#xff0c;可能遇到脏读&#xff0c;幻读…

轻松学会研华屏幕下载和上传

&#x1f525;一个人走得远了&#xff0c;就会忘记自己为了什么而出发&#xff0c;希望你可以不忘初心&#xff0c;不要随波逐流&#xff0c;一直走下去&#x1f3b6; &#x1f98b; 欢迎关注&#x1f5b1;点赞&#x1f44d;收藏&#x1f31f;留言&#x1f43e; ✅ 如果觉得博主…

Docker中搭建RabbitMQ集群

Docker中搭建RabbitMQ集群 1、启动三个RabbitMQ容器2、为容器设置节点2.1、设置Erlang Cookie2.2、设置节点12.3、设置节点22.4、设置节点32.5、预览结果 3、配置镜像队列3.1、配置镜像的原因3.2、搭建步骤 1、启动三个RabbitMQ容器 服务器IP端口hostname管理界面地址192.168.…

查找空调面板型号及使用说明书

公司中央空调的控制面板&#xff0c;Honeywell品牌设计简约&#xff0c;没有看到关机按钮&#xff0c;面板上也没有具体型号&#xff0c;使用说明书都不好查。 想关机&#xff0c;周围没人知道&#xff0c;按select选择选项时&#xff0c;发现有zband diff等字样。 google 搜…

ShardingSphere-JDBC-若依框架集成(SpringBoot)

前言 ShardingSphere基础知识、ShardingSphere-JDBC如何集成进若依框架中 使用的是若依框架&#xff08;SpringBoot&#xff09;前后端版本、动态数据源&#xff0c;可自行切换&#xff0c;默认数据源为达梦8 文章目录 前言基础知识简介产品功能 使用方案一方案二方案三 注意点…

海尔商用空调20HP焓差冷水测试系统

Haier 20HP焓差冷水测试系统 1 简述 本测试室利用空气焓差法测定空调机组的制冷、制热量、名义工况下功率消耗、能效比&#xff08;EER值&#xff09;、运行电流、室内风量是较常用的&#xff0c;亦为标准所认可的一种方法。这种方法满足国标GB/T7725-1996“房间空气调节器…

海尔云谷创新中心A座能耗监测系统的应用

李婧婧 安科瑞电气股份有限公司 13651946738 摘要&#xff1a;公共建筑是节能大户和节能重点&#xff0c;做好公共建筑节能工作&#xff0c;对促进和带动全社会节能工作&#xff0c;实现节能减排目标&#xff0c;落实“转方式、调结构”重大战略具有重要意义。本文介绍海尔…

Spark7-9

7. Spark中的一些重要概念 7.1 Application 使用SparkSubmit提交的个计算应用&#xff0c;一个Application中可以触发多次Action&#xff0c;触发一次Action产生一个Job&#xff0c;一个Application中可以有一到多个Job 7.2 Job Driver向Executor提交的作业&#xff0c;触发…