0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于STM32CUBEMX驅(qū)動TOF模塊VL6180與VL6180X(2)----修改測量范圍

嵌入式單片機(jī)MCU開發(fā) ? 來源:嵌入式單片機(jī)MCU開發(fā) ? 作者:嵌入式單片機(jī)MCU開 ? 2023-12-01 13:52 ? 次閱讀

概述

當(dāng)使用VL6180傳感器進(jìn)行測距時,可以通過修改縮放因子來改變可測量的距離范圍。VL6180是一種基于飛行時間原理的傳感器,通過測量光信號的往返時間來確定物體與傳感器之間的距離。
最近在弄ST和瑞薩RA的課程,需要樣片的可以加群申請:615061293 。

默認(rèn)情況下,VL6180傳感器的測距范圍約為0至200毫米。然而,通過調(diào)整縮放因子,您可以擴(kuò)展或縮小該范圍,以適應(yīng)不同的應(yīng)用需求。

縮放因子是一個乘法因子,用于調(diào)整傳感器的測量范圍。較小的縮放因子可以擴(kuò)展測距范圍,使傳感器能夠測量更遠(yuǎn)的距離,而較大的縮放因子可以縮小測距范圍,使傳感器適用于更近的測量。

要修改縮放因子,需要使用VL6180傳感器的控制接口與其進(jìn)行通信。通過發(fā)送適當(dāng)?shù)拿詈?a target="_blank">參數(shù),您可以設(shè)置所需的縮放因子值。具體的命令和參數(shù)取決于您使用的特定控制接口和驅(qū)動程序。

下面溫度可以得知,主要有3種縮放,測量距離分別到20cm、40cm、60cm。

視頻教程

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

樣品申請

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

完整代碼下載

[https://download.csdn.net/download/qq_24312945/87945856

修改縮放因子

在ST提供的en.STSW-IMG003.zip壓縮包中,可以找到一個名為CodeSamples_UM.pdf的文檔。在該文檔中,有一個案例展示了如何修改縮放方式。通過調(diào)用函數(shù)VL6180x_UpscaleSetScaling(myDev, 2),您可以將縮放因子設(shè)置為2,實(shí)現(xiàn)將測量范圍擴(kuò)大兩倍的效果。這個案例為您提供了一個具體的示例,可以幫助您了解如何在編程中使用該函數(shù)來修改縮放因子。

VL6180x_UpscaleSetScaling

在ST提供的en.STSW-IMG003.zip壓縮包中,vl6180x_api.c文件包含了VL6180x_UpscaleSetScaling函數(shù),這個函數(shù)是用來設(shè)置設(shè)備的測距縮放因子的。

當(dāng)設(shè)備進(jìn)行測量時,測距縮放因子會應(yīng)用于設(shè)備測得的原始距離,以擴(kuò)大測量范圍,但會犧牲一定的精度。

需要注意的是,在設(shè)備處于固件待機(jī)狀態(tài)(自由運(yùn)行)以外的狀態(tài)下修改縮放因子是不安全的。這可能導(dǎo)致誤報中斷、測距范圍錯誤等問題。

為了簡化和優(yōu)化原始函數(shù),并提供更清晰和易于理解的代碼結(jié)構(gòu)。去除不相關(guān)的部分,由于原始函數(shù)中的某些操作在新的函數(shù)中沒有被使用到,這些部分被去除以提高代碼的清晰度和可讀性。

修改后的代碼具有更簡潔、易讀和易于維護(hù)的結(jié)構(gòu),同時仍然保留了修改縮放因子所需的核心操作。這種修改的目的是使代碼更易于理解和實(shí)現(xiàn),并提供更好的可擴(kuò)展性和可重用性。

修改為所需要的函數(shù),如下所示:

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);

}

主函數(shù)

修改后的函數(shù)如下所示,修改縮放因子為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=%dmmn",VL6180_L1*2);
        HAL_Delay(1000);                
    /* USER CODE END WHILE */

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

測試結(jié)果

測試距離為20cm結(jié)果如下所示。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 傳感器
    +關(guān)注

    關(guān)注

    2551

    文章

    51097

    瀏覽量

    753527
  • 測距
    +關(guān)注

    關(guān)注

    2

    文章

    105

    瀏覽量

    19644
  • TOF
    TOF
    +關(guān)注

    關(guān)注

    9

    文章

    483

    瀏覽量

    36349
  • stm32cubemx
    +關(guān)注

    關(guān)注

    5

    文章

    283

    瀏覽量

    14807
收藏 人收藏

    評論

    相關(guān)推薦

    基于STM32CUBEMX驅(qū)動TOF模塊VL6180VL6180X(3)----修改設(shè)備地址

    本章主要介紹如何修改VL6180X傳感器的I2C地址,并成功驅(qū)動設(shè)備以使用新的地址。VL6180X是一種多功能、高性能的接近和環(huán)境光傳感器,
    的頭像 發(fā)表于 12-01 14:30 ?645次閱讀
    基于<b class='flag-5'>STM32CUBEMX</b><b class='flag-5'>驅(qū)動</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)----<b class='flag-5'>修改</b>設(shè)備地址

    基于STM32CUBEMX驅(qū)動TOF模塊VL6180VL6180X(4)----測量環(huán)境光

    在本章中,我們將介紹如何配置VL6180X傳感器以測量環(huán)境光,并獲取環(huán)境光的強(qiáng)度值。VL6180X是一種多功能、高性能的接近和環(huán)境光傳感器,其環(huán)境光測量功能可以用于檢測周圍環(huán)境的亮度水
    的頭像 發(fā)表于 12-01 14:34 ?860次閱讀
    基于<b class='flag-5'>STM32CUBEMX</b><b class='flag-5'>驅(qū)動</b><b class='flag-5'>TOF</b><b class='flag-5'>模塊</b><b class='flag-5'>VL6180</b>與<b class='flag-5'>VL6180X</b>(4)----<b class='flag-5'>測量</b>環(huán)境光

    基于STM32CUBEMX驅(qū)動TOF模塊VL6180VL6180X(5)----驅(qū)動多個VL6180X

    驅(qū)動多個VL6180X傳感器進(jìn)行距離測量和光強(qiáng)測量。VL6180X傳感器在VL6180的基礎(chǔ)上增
    的頭像 發(fā)表于 12-01 14:36 ?1037次閱讀
    基于<b class='flag-5'>STM32CUBEMX</b><b class='flag-5'>驅(qū)動</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ū)動</b>多個<b class='flag-5'>VL6180X</b>

    VL6180x單次測量范圍測量后的系統(tǒng)錯誤代碼

    /sparkfun/ToF_Range_Finder-VL6180_Library 我正在為范圍測量讀取值255,而(0x004D)RESULT_RANGE_STATUS寄存器位[7:
    發(fā)表于 09-21 16:55

    尋找手冊中引用的F401和VL6180板的mbed資源

    我正在尋找手冊中引用的F401和VL6180板的mbed資源。 可以嗎?#vl6180x以上來自于谷歌翻譯以下為原文 I was looking for mbed resources
    發(fā)表于 09-21 16:57

    VL6180X包含多少個傳感器?

    VL6180X包含多少個傳感器? #vl6180x#vl6180x-outline-drawing #sensor以上來自于谷歌翻譯以下為原文 How many sensors does
    發(fā)表于 09-25 17:14

    VL6180X操作如何測量距離

    的問題是:由于VL6180X計算距離作為發(fā)射和接收紅外線之間的時間,它如何測量距離(例如約1cm),其對應(yīng)于皮秒級的飛行時間? 謝謝#vl6180x以上來自于谷歌翻譯以下為原文 I
    發(fā)表于 10-10 10:47

    VL6180X:什么是線性誤差率?

    親, VL6180X的線性誤碼率是多少? Tks和問候。 一個。 #proximity-sensor#vl6180x以上來自于谷歌翻譯以下為原文 Dear, What
    發(fā)表于 10-22 16:29

    VL6180X范圍偏移怎么更改

    大家好我在自定義主板上使用了一些VL6180X設(shè)備。 然后,它們的范圍偏移似乎每次啟動都會改變大約mm5mm,盡管我按應(yīng)用說明中的指示調(diào)整了偏移。什么影響范圍偏移?在正常情況下,只需一次調(diào)整就夠了嗎
    發(fā)表于 10-23 16:52

    VL6180X增加了范圍

    嗨,我想增加VL6180X范圍,但我不知道我必須修改哪個寄存器。我看到RangingAndALS_NucleoXXX樣本中的代碼,但我不明白VL6180X寄存器是如何被
    發(fā)表于 04-08 16:02

    近距離測量VL6180X錯誤

    嘿,我正在使用VL6180X衛(wèi)星傳感器進(jìn)行測距測量。連接后,我收到一些測量值 - 但它們是錯誤的。傳感器不會對0mm和~50mm之間的距離變化做出反應(yīng)。它不斷向我顯示'4 mm'的值。超過50毫米
    發(fā)表于 05-13 07:13

    請問VL6180X的基本功能有哪些?

    VL6180X的基本功能有哪些? #vl6180x #features以上來自于谷歌翻譯以下為原文 What are the basic features of VL6180X ?#vl61
    發(fā)表于 06-05 09:26

    Vl6180x 官方蓋玻片模型的使用

    本帖最后由 yppc 于 2019-12-31 12:09 編輯 我最近在使用Vl6180x芯片,因?yàn)閼?yīng)用環(huán)境,我準(zhǔn)備增加蓋玻片防塵,我在ST官網(wǎng)上查詢到Vl6180芯片的蓋玻片模型,我想咨詢
    發(fā)表于 12-31 11:41

    使用VL6180X ToF傳感器與Particle Argon控制伺服器

    電子發(fā)燒友網(wǎng)站提供《使用VL6180X ToF傳感器與Particle Argon控制伺服器.zip》資料免費(fèi)下載
    發(fā)表于 10-19 09:52 ?0次下載
    使用<b class='flag-5'>VL6180X</b> <b class='flag-5'>ToF</b>傳感器與Particle Argon控制伺服器

    基于STM32CUBEMX驅(qū)動TOF模塊VL6180VL6180X(1)----單模塊距離獲取的最佳實(shí)踐

    VL6180X是基于ST FlightSense?專利技術(shù)的最新產(chǎn)品。作為一項(xiàng)突破性技術(shù),它實(shí)現(xiàn)了獨(dú)立于目標(biāo)反射率的絕對距離測量。傳統(tǒng)的測量方法通過測量反射光的光量來估算距離,然而這種
    的頭像 發(fā)表于 07-27 09:47 ?1996次閱讀
    基于<b class='flag-5'>STM32CUBEMX</b><b class='flag-5'>驅(qū)動</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í)踐