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

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

3天内不再提示

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

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

概述

在本章中,我们将介绍如何配置VL6180X传感器以测量环境光,并获取环境光的强度值。VL6180X是一种多功能、高性能的接近和环境光传感器,其环境光测量功能可以用于检测周围环境的亮度水平。
最近在弄ST和瑞萨RA的课程,需要样片的可以加群申请:6_15061293 。
在这里插入图片描述
查看VL6180X手册可得知,VL6180X模块是内置了环境光感应(Ambient Light Sensing,ALS)功能的。ALS功能使得VL6180X不仅能够测量物体与传感器之间的距离,还能够检测周围环境的光照强度。
在这里插入图片描述

样品申请

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

视频教程

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

video(video-xBRvtoF6-1689419585615)(type-bilibili)(url-https://player.bilibili.com/player.html?aid=913388199)(image-https://img-blog.csdnimg.cn/img_convert/24f308bcc28d55fb5395548d0a23231c.jpeg)(title-基于STM32CUBEMX驱动TOF模块VL6180与VL6180X(4)----测量环境光)

完整代码下载

https://download.csdn.net/download/qq_24312945/88051751

VL6180X传感器的测量流程

下图给出了vl6180x测量距离和环境光的驱动流程图,可以得知他们的测量方式是大同小异的。
需要注意的是,虽然距离测量和环境光测量的流程图在基本原理和操作步骤上是相似的,但在具体的配置和参数设置上可能存在差异。因此,在使用VL6180X进行距离测量和环境光测量时,需要根据具体的需求和应用场景,相应地配置和调整传感器的设置。
在这里插入图片描述

ALS动态范围

ALS动态范围是指VL6180X传感器在不同增益设置下可以测量的光线范围。在VL6180X手册的表中,展示了在有和无玻璃情况下的各个增益下可测量的光线范围。
选择适当的增益设置对于获得准确的环境光测量结果至关重要。在大多数应用中,可以使用单个增益设置来进行操作,而无需在不同的增益之间切换。这样可以简化配置和使用过程,提高系统的稳定性和可靠性。
根据实际应用的需求,可以根据表中的数据选择最合适的增益设置。根据是否使用玻璃覆盖物,以及环境光的强度范围,可以确定在哪个增益下获得最佳的测量精度和范围。
在这里插入图片描述

ALS动态范围

ALS动态范围是指VL6180X传感器在不同增益设置下可以测量的光线范围。在VL6180X手册的表中,展示了在有和无玻璃情况下的各个增益下可测量的光线范围。
选择适当的增益设置对于获得准确的环境光测量结果至关重要。在大多数应用中,可以使用单个增益设置来进行操作,而无需在不同的增益之间切换。这样可以简化配置和使用过程,提高系统的稳定性和可靠性。
根据实际应用的需求,可以根据表中的数据选择最合适的增益设置。根据是否使用玻璃覆盖物,以及环境光的强度范围,可以确定在哪个增益下获得最佳的测量精度和范围。
在这里插入图片描述

可以通过设置SYSALS__ANALOGUE_GAIN(0x03F)来配置模拟增益。根据实际需求和环境条件,选择适当的增益值非常重要。建议在调整增益时进行实际测试,以找到最佳的平衡点,以获得所需的性能和图像质量。记住,过高的增益可能会引入噪声,对测量产生不利影响。
在这里插入图片描述

测量流程

具体流程如下所示:

  1. 开始单次环境光测量:应用调谐设置后,将值0b100写入寄存器的位[5:3](寄存器0x0014),以启动单次环境光测量。
  2. 等待测量完成:等待测量完成。您可以根据实际需求决定等待的时间。
  3. 从寄存器0x0040读取数据,并清除位[0],然后将值0x31写入寄存器0x0041。
  4. 将值0b1(二进制)写入寄存器0x0038的位[0]。
  5. 从寄存器0x004F的位[5:3]中读取数值,并且该数值为0b100跳出循环,否则等待。
  6. 从寄存器0x0050读取2个字节的数值,这个数值代表环境光强度的测量结果。
  7. 将值0b111(二进制)写入寄存器0x0015的位[2:0]。
    以上是获取光强的简要概述,根据您的实际需求,可能需要更详细的代码和配置。请参考VL6180X传感器的相关文档和手册,以获取更多详细的信息编程指南。
    在这里插入图片描述

光强计算公式

"ALS count to lux conversion" 指的是将环境光传感器的输出值(一个16位计数值)转换为光照强度(单位为勒克斯)的过程,由上一步的流程进行获取。
工厂校准的ALS光照分辨率是0.32(lux/count),适用于模拟增益为1且积分时间为100毫秒的情况(在无玻璃覆盖的条件下进行校准)。计算公式如下所示。
在这里插入图片描述
读取lux代码参考如下所示。

float VL6180X_Read_Lux(uint8_t add,uint8_t Gain)
{
	float lux;
	static uint8_t reg;
	reg = VL6180X_ReadByte(add,VL6180X_REG_SYSTEM_INTERRUPT_CONFIG);
	reg &= ~0x38;		//[5:3]清0
	reg |= (0x4< < 3);	//开启转换New sample ready	开启转换
	
	VL6180X_WriteByte(add,VL6180X_REG_SYSALS_INTEGRATION_PERIOD_HI,0);
	VL6180X_WriteByte(add,VL6180X_REG_SYSALS_INTEGRATION_PERIOD_LO,100);	//101ms
	if (Gain > VL6180X_ALS_GAIN_40)
	{
		Gain = VL6180X_ALS_GAIN_40;
	}
	VL6180X_WriteByte(add,VL6180X_REG_SYSALS_ANALOGUE_GAIN, 0x40 | Gain);
	VL6180X_WriteByte(add,VL6180X_REG_SYSALS_START, 0x1);	//连续模式
	// New Sample Ready threshold event 新样本就绪
	while (4 != ((VL6180X_ReadByte(add,VL6180X_REG_RESULT_INTERRUPT_STATUS_GPIO) > > 3) & 0x7));
	
	lux = VL6180X_Read_HalfWold(add,VL6180X_REG_RESULT_ALS_VAL);
	VL6180X_WriteByte(add,VL6180X_REG_SYSTEM_INTERRUPT_CLEAR,0x07);	//0111b 清除了三种中断标志
	//矫正增益算法
	lux *= 0.32f; // calibrated count/lux
	switch(Gain) { 
	case VL6180X_ALS_GAIN_1: 
	break;
	case VL6180X_ALS_GAIN_1_25: 
	lux /= 1.25f;
	break;
	case VL6180X_ALS_GAIN_1_67: 
	lux /= 1.67f;
	break;
	case VL6180X_ALS_GAIN_2_5: 
	lux /= 2.5f;
	break;
	case VL6180X_ALS_GAIN_5: 
	lux /= 5;
	break;
	case VL6180X_ALS_GAIN_10: 
	lux /= 10;
	break;
	case VL6180X_ALS_GAIN_20: 
	lux /= 20;
	break;
	case VL6180X_ALS_GAIN_40: 
	lux /= 40;
	break;
	}
	lux *= 100;
	lux /= 100; // integration time in ms
	return lux;
}

配置vl6180x

在对应的demo板子中,使用U6进行光强读取。
在这里插入图片描述

初始化配置如下所示。

/* USER CODE BEGIN 2 */

	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_4, GPIO_PIN_SET);	
	HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_SET);
uint8_t ii;
uint8_t id;
	HAL_Delay(1);

/************修改VL6180_4地址为VL6180X_DEFAULT_I2C_ADDR4(0x2C)*********************/
	VL6180X_Init(VL6180X_DEFAULT_I2C_ADDR1);
	VL6180X_WriteByte(VL6180X_DEFAULT_I2C_ADDR1,0x0212,VL6180X_DEFAULT_I2C_ADDR4);
//	HAL_Delay(100);
	ii=VL6180X_ReadByte(VL6180X_DEFAULT_I2C_ADDR4,0x0212);	
	printf("VL6180_4地址为=0x%Xn",ii);		
	VL6180x_UpscaleSetScaling(VL6180X_DEFAULT_I2C_ADDR4,3);//缩放x3
	id=VL6180X_Read_ID(VL6180X_DEFAULT_I2C_ADDR4);
	printf("VL6180_4 id=%dn",id);	

/************修改VL6180_3地址为VL6180X_DEFAULT_I2C_ADDR3(0x2B)*********************/
//VL6180_3
	HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_SET);	
	HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9, GPIO_PIN_SET);
	HAL_Delay(1);
	VL6180X_Init(VL6180X_DEFAULT_I2C_ADDR1);
	VL6180X_WriteByte(VL6180X_DEFAULT_I2C_ADDR1,0x0212,VL6180X_DEFAULT_I2C_ADDR3);
	ii=VL6180X_ReadByte(VL6180X_DEFAULT_I2C_ADDR3,0x0212);	
	printf("VL6180_3地址为=0x%Xn",ii);		
	VL6180x_UpscaleSetScaling(VL6180X_DEFAULT_I2C_ADDR3,3);//缩放x3
	id=VL6180X_Read_ID(VL6180X_DEFAULT_I2C_ADDR3);
	printf("VL6180_3 id=%dn",id);

  /* USER CODE END 2 */

循环读取代码如下所示。

/* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
		VL6180_L4=VL6180X_Read_Range(VL6180X_DEFAULT_I2C_ADDR4);
		printf("VL6180_L4=%dmmn",VL6180_L4*3);
			
		lux_L3=VL6180X_Read_Lux(VL6180X_DEFAULT_I2C_ADDR3,VL6180X_ALS_GAIN_40);
		printf("lux=%lfn",lux_L3);				
		VL6180_L3=VL6180X_Read_Range(VL6180X_DEFAULT_I2C_ADDR3);
		printf("VL6180_L3=%dmmn",VL6180_L3*3);			
		
		HAL_Delay(1000);			

    /* USER CODE END WHILE */

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

测试结果

测试距离和光强结果如下所示。
在这里插入图片描述

设置VL6180X_ALS_GAIN_40读取,给强光情况下读数如下所示。

在这里插入图片描述

是符合手册给出的范围的。

在这里插入图片描述

审核编辑:汤梓红

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

    关注

    2526

    文章

    48093

    浏览量

    740051
  • 模块
    +关注

    关注

    7

    文章

    2484

    浏览量

    46526
  • TOF
    TOF
    +关注

    关注

    9

    文章

    435

    浏览量

    35902
  • stm32cubemx
    +关注

    关注

    5

    文章

    260

    浏览量

    14447
收藏 人收藏

    评论

    相关推荐

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

    当使用VL6180传感器进行测距时,可以通过修改缩放因子来改变可测量的距离范围。VL6180是一种基于飞行时间原理的传感器,通过测量光信号的往返时间来确定物体与传感器之间的距离。
    的头像 发表于 12-01 13:52 319次阅读
    基于<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>(2)----修改<b class='flag-5'>测量</b>范围

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

    本章主要介绍如何修改VL6180X传感器的I2C地址,并成功驱动设备以使用新的地址。VL6180X是一种多功能、高性能的接近和环境光传感器,常用于
    的头像 发表于 12-01 14:30 255次阅读
    基于<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)----修改设备地址

    基于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单次测量范围测量后的系统错误代码

    我有一个VL6180x传感器,我已按照数据表中的说明焊接引线并进行配置。 在GitHub上使用这个库,我能够读取环境测量值,但是距离测量
    发表于 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'的值。
    发表于 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>距离获取的最佳实践