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

发布时间:2024-05-30  

概述

在本章中,我们将介绍如何配置VL6180X传感器以测量环境光,并获取环境光的强度值。VL6180X是一种多功能、高性能的接近和环境光传感器,其环境光测量功能可以用于检测周围环境的亮度水平。

在这里插入图片描述

查看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进行距离测量和环境光测量时,需要根据具体的需求和应用场景,相应地配置和调整传感器的设置。

e45944d60680446fe7989e58a01c9203_wKgZomVpffSAZ2FDAAGWHM6AQi0647.png

ALS动态范围

ALS动态范围是指VL6180X传感器在不同增益设置下可以测量的光线范围。在VL6180X手册的表中,展示了在有和无玻璃情况下的各个增益下可测量的光线范围。

选择适当的增益设置对于获得准确的环境光测量结果至关重要。在大多数应用中,可以使用单个增益设置来进行操作,而无需在不同的增益之间切换。这样可以简化配置和使用过程,提高系统的稳定性和可靠性。

根据实际应用的需求,可以根据表中的数据选择最合适的增益设置。根据是否使用玻璃覆盖物,以及环境光的强度范围,可以确定在哪个增益下获得最佳的测量精度和范围。

4250bc95ba3a3cd47f6e50af0596e982_wKgaomVpffSAKTpeAAHjaWtw7xw982.png

ALS动态范围

ALS动态范围是指VL6180X传感器在不同增益设置下可以测量的光线范围。在VL6180X手册的表中,展示了在有和无玻璃情况下的各个增益下可测量的光线范围。

选择适当的增益设置对于获得准确的环境光测量结果至关重要。在大多数应用中,可以使用单个增益设置来进行操作,而无需在不同的增益之间切换。这样可以简化配置和使用过程,提高系统的稳定性和可靠性。

根据实际应用的需求,可以根据表中的数据选择最合适的增益设置。根据是否使用玻璃覆盖物,以及环境光的强度范围,可以确定在哪个增益下获得最佳的测量精度和范围。

38e00caabe500d5189d39554fa075fa5_wKgZomVpffSAVAjYAAHjaWtw7xw057.png

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

5b39f40cfcddc2f17f2ab179a13b7c37_wKgZomVpffSAbguWAAFXClfJHZg437.png

测量流程

具体流程如下所示:


开始单次环境光测量:应用调谐设置后,将值0b100写入寄存器的位[5:3](寄存器0x0014),以启动单次环境光测量。

等待测量完成:等待测量完成。您可以根据实际需求决定等待的时间。

从寄存器0x0040读取数据,并清除位[0],然后将值0x31写入寄存器0x0041。

将值0b1(二进制)写入寄存器0x0038的位[0]。

从寄存器0x004F的位[5:3]中读取数值,并且该数值为0b100跳出循环,否则等待。

从寄存器0x0050读取2个字节的数值,这个数值代表环境光强度的测量结果。

将值0b111(二进制)写入寄存器0x0015的位[2:0]。

以上是获取光强的简要概述,根据您的实际需求,可能需要更详细的代码和配置。请参考VL6180X传感器的相关文档和手册,以获取更多详细的信息和编程指南。

69bb9a66fddc82ea5c892f4d2ada62e9_wKgaomVpffWALnI8AANJltKVyRY406.png

光强计算公式

"ALS count to lux conversion" 指的是将环境光传感器的输出值(一个16位计数值)转换为光照强度(单位为勒克斯)的过程,由上一步的流程进行获取。

工厂校准的ALS光照分辨率是0.32(lux/count),适用于模拟增益为1且积分时间为100毫秒的情况(在无玻璃覆盖的条件下进行校准)。计算公式如下所示。

e01cb773b5fb68a175c5d2044b7e36be_wKgaomVpffWAGWQ_AAOqpnrModQ345.png

读取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进行光强读取。

94c0eef0a7ecc3d8840db8cb5aa3e9ac_wKgZomTBzBKAQ4e_AAGAVdO-kTI212.png


初始化配置如下所示。


/* 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读取,给强光情况下读数如下所示。

在这里插入图片描述

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

在这里插入图片描述



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

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

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

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

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

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

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

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