概述
在本章中,我們將介紹如何配置VL6180X傳感器以測(cè)量環(huán)境光,并獲取環(huán)境光的強(qiáng)度值。VL6180X是一種多功能、高性能的接近和環(huán)境光傳感器,其環(huán)境光測(cè)量功能可以用于檢測(cè)周圍環(huán)境的亮度水平。
最近在弄ST和瑞薩RA的課程,需要樣片的可以加群申請(qǐng):6_15061293 。
查看VL6180X手冊(cè)可得知,VL6180X模塊是內(nèi)置了環(huán)境光感應(yīng)(Ambient Light Sensing,ALS)功能的。ALS功能使得VL6180X不僅能夠測(cè)量物體與傳感器之間的距離,還能夠檢測(cè)周圍環(huán)境的光照強(qiáng)度。
樣品申請(qǐng)
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驅(qū)動(dòng)TOF模塊VL6180與VL6180X(4)----測(cè)量環(huán)境光)
完整代碼下載
https://download.csdn.net/download/qq_24312945/88051751
VL6180X傳感器的測(cè)量流程
下圖給出了vl6180x測(cè)量距離和環(huán)境光的驅(qū)動(dòng)流程圖,可以得知他們的測(cè)量方式是大同小異的。
需要注意的是,雖然距離測(cè)量和環(huán)境光測(cè)量的流程圖在基本原理和操作步驟上是相似的,但在具體的配置和參數(shù)設(shè)置上可能存在差異。因此,在使用VL6180X進(jìn)行距離測(cè)量和環(huán)境光測(cè)量時(shí),需要根據(jù)具體的需求和應(yīng)用場景,相應(yīng)地配置和調(diào)整傳感器的設(shè)置。
ALS動(dòng)態(tài)范圍
ALS動(dòng)態(tài)范圍是指VL6180X傳感器在不同增益設(shè)置下可以測(cè)量的光線范圍。在VL6180X手冊(cè)的表中,展示了在有和無玻璃情況下的各個(gè)增益下可測(cè)量的光線范圍。
選擇適當(dāng)?shù)脑鲆嬖O(shè)置對(duì)于獲得準(zhǔn)確的環(huán)境光測(cè)量結(jié)果至關(guān)重要。在大多數(shù)應(yīng)用中,可以使用單個(gè)增益設(shè)置來進(jìn)行操作,而無需在不同的增益之間切換。這樣可以簡化配置和使用過程,提高系統(tǒng)的穩(wěn)定性和可靠性。
根據(jù)實(shí)際應(yīng)用的需求,可以根據(jù)表中的數(shù)據(jù)選擇最合適的增益設(shè)置。根據(jù)是否使用玻璃覆蓋物,以及環(huán)境光的強(qiáng)度范圍,可以確定在哪個(gè)增益下獲得最佳的測(cè)量精度和范圍。
ALS動(dòng)態(tài)范圍
ALS動(dòng)態(tài)范圍是指VL6180X傳感器在不同增益設(shè)置下可以測(cè)量的光線范圍。在VL6180X手冊(cè)的表中,展示了在有和無玻璃情況下的各個(gè)增益下可測(cè)量的光線范圍。
選擇適當(dāng)?shù)脑鲆嬖O(shè)置對(duì)于獲得準(zhǔn)確的環(huán)境光測(cè)量結(jié)果至關(guān)重要。在大多數(shù)應(yīng)用中,可以使用單個(gè)增益設(shè)置來進(jìn)行操作,而無需在不同的增益之間切換。這樣可以簡化配置和使用過程,提高系統(tǒng)的穩(wěn)定性和可靠性。
根據(jù)實(shí)際應(yīng)用的需求,可以根據(jù)表中的數(shù)據(jù)選擇最合適的增益設(shè)置。根據(jù)是否使用玻璃覆蓋物,以及環(huán)境光的強(qiáng)度范圍,可以確定在哪個(gè)增益下獲得最佳的測(cè)量精度和范圍。
可以通過設(shè)置SYSALS__ANALOGUE_GAIN(0x03F)來配置模擬增益。根據(jù)實(shí)際需求和環(huán)境條件,選擇適當(dāng)?shù)脑鲆嬷捣浅V匾?。建議在調(diào)整增益時(shí)進(jìn)行實(shí)際測(cè)試,以找到最佳的平衡點(diǎn),以獲得所需的性能和圖像質(zhì)量。記住,過高的增益可能會(huì)引入噪聲,對(duì)測(cè)量產(chǎn)生不利影響。
測(cè)量流程
具體流程如下所示:
- 開始單次環(huán)境光測(cè)量:應(yīng)用調(diào)諧設(shè)置后,將值0b100寫入寄存器的位[5:3](寄存器0x0014),以啟動(dòng)單次環(huán)境光測(cè)量。
- 等待測(cè)量完成:等待測(cè)量完成。您可以根據(jù)實(shí)際需求決定等待的時(shí)間。
- 從寄存器0x0040讀取數(shù)據(jù),并清除位[0],然后將值0x31寫入寄存器0x0041。
- 將值0b1(二進(jìn)制)寫入寄存器0x0038的位[0]。
- 從寄存器0x004F的位[5:3]中讀取數(shù)值,并且該數(shù)值為0b100跳出循環(huán),否則等待。
- 從寄存器0x0050讀取2個(gè)字節(jié)的數(shù)值,這個(gè)數(shù)值代表環(huán)境光強(qiáng)度的測(cè)量結(jié)果。
- 將值0b111(二進(jìn)制)寫入寄存器0x0015的位[2:0]。
以上是獲取光強(qiáng)的簡要概述,根據(jù)您的實(shí)際需求,可能需要更詳細(xì)的代碼和配置。請(qǐng)參考VL6180X傳感器的相關(guān)文檔和手冊(cè),以獲取更多詳細(xì)的信息和編程指南。
光強(qiáng)計(jì)算公式
"ALS count to lux conversion" 指的是將環(huán)境光傳感器的輸出值(一個(gè)16位計(jì)數(shù)值)轉(zhuǎn)換為光照強(qiáng)度(單位為勒克斯)的過程,由上一步的流程進(jìn)行獲取。
工廠校準(zhǔn)的ALS光照分辨率是0.32(lux/count),適用于模擬增益為1且積分時(shí)間為100毫秒的情況(在無玻璃覆蓋的條件下進(jìn)行校準(zhǔn))。計(jì)算公式如下所示。
讀取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); //開啟轉(zhuǎn)換New sample ready 開啟轉(zhuǎn)換
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); //連續(xù)模式
// 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 清除了三種中斷標(biāo)志
//矯正增益算法
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
在對(duì)應(yīng)的demo板子中,使用U6進(jìn)行光強(qiáng)讀取。
初始化配置如下所示。
/* 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 */
循環(huán)讀取代碼如下所示。
/* 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 */
測(cè)試結(jié)果
測(cè)試距離和光強(qiáng)結(jié)果如下所示。
設(shè)置VL6180X_ALS_GAIN_40讀取,給強(qiáng)光情況下讀數(shù)如下所示。
是符合手冊(cè)給出的范圍的。
審核編輯:湯梓紅
-
傳感器
+關(guān)注
關(guān)注
2553文章
51448瀏覽量
756890 -
模塊
+關(guān)注
關(guān)注
7文章
2736瀏覽量
47784 -
TOF
+關(guān)注
關(guān)注
9文章
485瀏覽量
36510 -
stm32cubemx
+關(guān)注
關(guān)注
5文章
284瀏覽量
15044
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
基于STM32CUBEMX驅(qū)動(dòng)TOF模塊VL6180與VL6180X(2)----修改測(cè)量范圍
![基于<b class='flag-5'>STM32CUBEMX</b><b class='flag-5'>驅(qū)動(dòng)</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'>測(cè)量</b>范圍](https://file1.elecfans.com/web2/M00/8D/E8/wKgZomTBzBKAU6pgAAYPU4anR1c731.png)
基于STM32CUBEMX驅(qū)動(dòng)TOF模塊VL6180與VL6180X(3)----修改設(shè)備地址
![基于<b class='flag-5'>STM32CUBEMX</b><b class='flag-5'>驅(qū)動(dòng)</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)----修改設(shè)備地址](https://file1.elecfans.com/web2/M00/8D/E8/wKgZomTBzBKAU6pgAAYPU4anR1c731.png)
基于STM32CUBEMX驅(qū)動(dòng)TOF模塊VL6180與VL6180X(5)----驅(qū)動(dòng)多個(gè)VL6180X
![基于<b class='flag-5'>STM32CUBEMX</b><b class='flag-5'>驅(qū)動(dòng)</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'>驅(qū)動(dòng)</b>多個(gè)<b class='flag-5'>VL6180X</b>](https://file1.elecfans.com/web2/M00/8D/E8/wKgZomTBzBKAU6pgAAYPU4anR1c731.png)
VL6180x單次測(cè)量范圍測(cè)量后的系統(tǒng)錯(cuò)誤代碼
尋找手冊(cè)中引用的F401和VL6180板的mbed資源
VL6180X包含多少個(gè)傳感器?
VL6180X操作如何測(cè)量距離
VL6180X:什么是線性誤差率?
VL6180X范圍偏移怎么更改
VL6180X增加了范圍
近距離測(cè)量VL6180X錯(cuò)誤
請(qǐng)問VL6180X的基本功能有哪些?
Vl6180x 官方蓋玻片模型的使用
使用VL6180X ToF傳感器與Particle Argon控制伺服器
![使用<b class='flag-5'>VL6180X</b> <b class='flag-5'>ToF</b>傳感器與Particle Argon控制伺服器](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
基于STM32CUBEMX驅(qū)動(dòng)TOF模塊VL6180與VL6180X(1)----單模塊距離獲取的最佳實(shí)踐
![基于<b class='flag-5'>STM32CUBEMX</b><b class='flag-5'>驅(qū)動(dòng)</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>距離獲取的最佳實(shí)踐](https://file1.elecfans.com/web2/M00/8D/E8/wKgZomTBzBKAU6pgAAYPU4anR1c731.png)
評(píng)論