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

news2024/11/20 3:20:51

概述

当使用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 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=%dmm\n",VL6180_L1*2);
		HAL_Delay(1000);				
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */

测试结果

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

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/680814.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

显卡检测工具:GPU-Z

今天小编为大家测试了一款轻量级的GPU显卡的测试工具&#xff0c;可以查看GPU的详细信息&#xff0c;以供各位同学们学习。 一、简单介绍 GPU-Z是一款方便实用的软件工具&#xff0c;专门为用户提供视频卡和GPU的详尽信息。它具有轻巧的特点&#xff0c;不需要安装即可使用&am…

2023版智慧高速智慧公路总体建设方案,售前人员必备方案

导读&#xff1a;原文《智慧高速智慧公路总体建设方案》共83页PPT&#xff08;获取来源见文尾&#xff09;&#xff0c;本文精选其中精华及架构部分&#xff0c;逻辑清晰、内容完整&#xff0c;为快速形成售前方案提供参考。 如需获取完整的电子版内容参考学习 您可以关注评论…

【雷达原理】基本雷达方程的推导

基本雷达方程 一、研究目的二、推导过程1、基本雷达方程常用的表达形式2、计算案例3、仿真代码 参考文献 一、研究目的 雷达方程定量地描述了作用距离与雷达参数及目标特性之间的关系。 研究雷达方程主要有以下作用&#xff1a; &#xff08;1&#xff09;根据雷达参数来估算雷…

慕课:笔记

课程链接&#xff1a;直面JavaScript中的30个疑难杂症_JavaScript面试题-慕课网 第二章&#xff1a;数据类型 数据类型是每门编程语言的必修之课&#xff0c;你是否对JavaScript的数据类型和检测存在困惑&#xff0c;本章节将为你揭晓其中的奥秘&#xff0c;让你对数据类型有…

矩阵压缩算法

当矩阵中存在着重复元素时&#xff0c;为了节省空间会采用压缩算法&#xff0c;关键在于原矩阵空间与压缩后数据结构的对应&#xff1b; 1.对称压缩&#xff1a;数据沿对角线对称的情况&#xff1b; 将矩阵压缩为一维数组&#xff0c;数组的长度是&#xff1a; 对于num[n][n…

VMware虚拟机暴露端口至公网方法流程详解

目录 需求背景 解决方法 准备工作 虚拟机ip设置方法 需求背景 一台电脑需要连接另一台电脑上的虚拟机的端口&#xff0c;直接ping是无法ping通的&#xff0c;因为本地虚拟机的端口未暴露至公网。 解决方法 虚拟机&#xff1a;CentOS 7 64 Linux 本机&#xff1a;Window…

C专家编程 —— 运行时数据结构

文章目录 代码和数据段代码与可执行文件中对应的位置可执行文件中的段在内存中的布局加入动态链接库的内存空间布局堆栈段的作用过程活动记录函数调用过程记录举例 static和auto关键字 汇编嵌入C代码 代码和数据 代码和数据的区别可以理解为编译时和运行时的分界线。 代码&…

guacamole 纯web rdp预研:相关JAVA基础

文章目录 guacamole 纯web rdp预研:相关JAVA基础1. pom.xml2 scm标签3 application/octet-stream4. tomcat webapps下war包5 maven-assembly-plugin maven assembly插件介绍什么是assembly&#xff1f; 6. Mavenz中的source插件的使用和注意事项。7. Maven私库安装与配置8. 配置…

深度学习之目标检测R-CNN模型算法流程详解说明(超详细理论篇)

1.R-CNN论文背景 2. R-CNN算法流程 3. R-CNN创新点 一、R-CNN论文背景 论文网址https://openaccess.thecvf.com/content_cvpr_2014/papers/Girshick_Rich_Feature_Hierarchies_2014_CVPR_paper.pdf   RCNN&#xff08;Region-based Convolutional Neural Networks&#xff…

牛客网基础语法81~90题

牛客网基础语法81~90题&#x1f618;&#x1f618;&#x1f618; &#x1f4ab;前言&#xff1a;今天是咱们第九期刷牛客网上的题目。 &#x1f4ab;目标&#xff1a;可以循环嵌套使用熟练&#xff0c;数组的变问题&#xff0c;对数学知识掌握更加清晰。 &#x1f4ab;鸡汤&…

Matplotlib---热力图

1. 热力图 imshow 是 Matplotlib 库中一个函数&#xff0c;主要用于在 Python 中显示图像。它的完整参数列表如下&#xff1a; matplotlib.pyplot.imshow(X, cmapNone, normNone, aspectNone, interpolationNone, alphaNone, vminNone, vmaxNone, originNone, extentNone, sh…

管理类联考——逻辑——知识篇——论证推理——三、假设——haimian

假设 考点分析 假设 年度 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023题量1132111 主要问法 上述论述是基于以下哪项假设?基于以下哪项假设能使上述推理成立?上述论证依赖于以下哪项假设?得到这一结论的前提条件是? 解题思路 阅读问题&#xff0c;确…

【TCP/IP】多播 - 定义、原理及编程实现(TTL、多播组、收发信息)

目录 多播 多播的原理 多播的数据传输时的特点 TTL 的概念 TTL 和 多播组的配置方法 多播的编程与实现 发送者 接收者 多播 多播是一种介于单播和广播通信之间的技术方式&#xff0c;可以将发送者所需要发送的数据包分别发送给分散在不同子网中的一组接收者。 多播的原…

分布式软件架构——事务ACID

事务概念 事务处理几乎是每一个信息系统中都会涉及到的问题&#xff0c;它存在的意义就是保证系统中的数据是正确的&#xff0c;不同数据间不会产生矛盾&#xff0c;也就是保证数据状态的一致性&#xff08;Consistency&#xff09; 关于一致性&#xff0c;我们重点关注的是数…

ElasticSearch-安装Head可视化插件

安装Head可视化插件 首先需要依赖node.js和npm环境 1 安装node.js 官方下载地址:http://nodejs.cn/download/ 下载LTS版本&#xff08;长期稳定版本&#xff09; 安装可以更改安装路径,其余的都是选择 下一步傻瓜是安装 安装成功后如下 命令测试 node -v 查看node的版本 n…

理解redis的多线程和IO多路复用

参考资料 https://blog.csdn.net/TZ845195485/article/details/119745735 Redis单线程和多线程问题的背景 Redis里程碑版本迭代 Redis的单线程 主要是指Redis的网络IO和键值对读写是由一个线程来完成的&#xff0c;Redis在处理客户端的请求时包括获取&#xff08;socket读&a…

「实验记录」MIT 6.824 KVRaft Lab3A Without Log Compaction

#Lab3A - KVRaft without log compaction I. SourceII. My CodeIII. MotivationIV. SolutionS1 - client请求S2 - server回应 V. Result I. Source MIT-6.824 2020 课程官网Lab3: KVRaft 实验主页simviso 精品付费翻译 MIT 6.824 课程Paper - Raft extended version II. My C…

Python顺序结果、选择结构、循环结构(超详细讲解+多段代码案例)

我本微末凡尘&#xff0c;可也心向天空 文章目录 一、顺序结构 二、选择结构 1.if----elif----else语句 2.条件表达式 三、循环结构 1.range函数 2.while 循环 3. for----in 循环 四、continue、break在循环中的使用 大家好&#xff0c;我是纪宁 今天要介绍的是python…

fatal error: ‘type_traits‘ file not found错误解决

错误如下 In file included from ../test_opencv_qt/main.cpp:1: In file included from ../../Qt/6.5.1/android_x86_64/include/QtGui/QGuiApplication:1: In file included from ../../Qt/6.5.1/android_x86_64/include/QtGui/qguiapplication.h:7: In file included from .…

Nginx 限流算法大揭秘

博主介绍&#xff1a; ✌博主从事应用安全和大数据领域&#xff0c;有8年研发经验&#xff0c;5年面试官经验&#xff0c;Java技术专家✌ Java知识图谱点击链接&#xff1a;体系化学习Java&#xff08;Java面试专题&#xff09; &#x1f495;&#x1f495; 感兴趣的同学可以收…