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

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

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

VL53L1CB TOF開發(fā)(2)----多區(qū)域掃描模式

嵌入式單片機MCU開發(fā) ? 來源:嵌入式單片機MCU開發(fā) ? 作者:嵌入式單片機MCU開 ? 2024-10-09 10:38 ? 次閱讀

概述

多區(qū)域掃描模式是 VL53L1 飛行時間 (Time-of-Flight, ToF) 傳感器的一項高級功能,允許用戶同時對多個區(qū)域進行距離測量。該模式通過劃分視場(Field of View, FoV)為多個感興趣區(qū)域(Region of Interest, ROI),并對每個區(qū)域分別進行測距,為需要廣域監(jiān)控和多目標(biāo)檢測的應(yīng)用提供了理想的解決方案。 在多區(qū)域掃描模式下,VL53L1 傳感器可以最多支持 16 個區(qū)域的并行測量,用戶還可以根據(jù)需求將區(qū)域數(shù)量擴展到 169 個。每個區(qū)域的測量結(jié)果會獨立報告,這使得該模式特別適合于需要監(jiān)測大面積區(qū)域或精確跟蹤多個目標(biāo)的場景,例如投影機梯形校正、多點距離檢測和環(huán)境映射等。

該模式支持最多 16 個區(qū)域的并行測量,用戶還可以根據(jù)需求擴展到 169 個區(qū)域。這使得多區(qū)域掃描模式成為投影機梯形校正應(yīng)用的理想選擇,能夠有效應(yīng)對復(fù)雜的角度調(diào)整和多點校正需求。

最近在弄ST和瑞薩RA的課程,需要樣片的可以加群申請:615061293 。

視頻教學(xué)

[https://www.bilibili.com/video/BV1aJHveYEA3/]

樣品申請

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

源碼下載

[https://download.csdn.net/download/qq_24312945/89703992]

硬件準(zhǔn)備

首先需要準(zhǔn)備一個開發(fā)板,這里我準(zhǔn)備的是自己繪制的開發(fā)板,需要的可以進行申請。
主控為STM32WB55RGV6,TOF為VL53L1。

主要特點

● 多區(qū)域檢測:支持對投影圖像的多個區(qū)域進行獨立測距,有助于精確的梯形校正。
高精度與靈活性:用戶可以根據(jù)投影需求自定義 ROI 的數(shù)量和大小,實現(xiàn)更精細(xì)的圖像調(diào)整。
● 應(yīng)用場景:除了投影機梯形校正,該模式還適用于需要多點距離測量的其他應(yīng)用,如機器人導(dǎo)航和環(huán)境映射。

生成STM32CUBEMX

用STM32CUBEMX生成例程,這里使用MCU為STM32WB55RG。

配置時鐘樹,配置時鐘為32M。

串口配置

查看原理圖,PB6和PB7設(shè)置為開發(fā)板的串口。

配置串口。

IIC配置

在這個應(yīng)用中,VL53L1模塊通過I2C(IIC)接口與主控器通信。具體來說,VL53L1模塊的I2C引腳連接到主控器的PB8和PB9兩個IO口。

配置IIC為快速模式,速度為400k。

XSHUT

XSHUT引腳是由主機連接和控制的,這種設(shè)計優(yōu)化了功耗,因為設(shè)備在不使用時可以被完全關(guān)閉,然后通過主機使用XSHUT引腳來喚醒。當(dāng)AVDD存在且XSHUT為低電平時,設(shè)備處于硬件待機模式(HW Standby mode)。如果XSHUT引腳不由主機控制,而是通過上拉電阻連接到AVDD,那么設(shè)備在固件啟動(FW BOOT)后會自動進入軟件待機(SW STANDBY),而不會進入硬件待機。

GPIO1

在VL53L1X傳感器中,GPIO1(通用輸入輸出引腳1)通常用于中斷信號輸出。

配置如下所示。

X-CUBE-TOF1

本節(jié)介紹在不需要使用樣例應(yīng)用時如何使用STM32CubeMX將X-CUBE-TOF1軟件包添加到項目中。有了這樣的設(shè)置,就只配置了驅(qū)動層。

堆棧設(shè)置

若無法正常運行需要修改優(yōu)化等級。

函數(shù)說明

[https://docs.ros.org/en/melodic/api/vl53l1x/html/group__VL53L1__parameters__group.html]

初始化設(shè)置

UM2371文檔是關(guān)于使用X-CUBE-53L1A1軟件擴展包在STM32Cube平臺上實現(xiàn)VL53L1X傳感器應(yīng)用的入門指南。它詳細(xì)介紹了如何配置和使用VL53L1X傳感器進行測距,并將測量數(shù)據(jù)傳輸?shù)絇C。

預(yù)設(shè)模式 (Preset mode)

在 UM2133 文檔的第 3.2.4 節(jié)中,描述了 VL53L1 傳感器的預(yù)設(shè)模式選擇功能。以下是該部分的主要內(nèi)容:
● 功能: VL53L1_SetPresetMode() 函數(shù)用于選擇一個預(yù)設(shè)的測距模式。使用當(dāng)前的驅(qū)動程序版本,可以選擇以下幾種預(yù)設(shè)模式:
● VL53L1_PRESETMODE_RANGING: 標(biāo)準(zhǔn)測距模式,用于獲取單個或多個(最多 4 個)目標(biāo)的測距數(shù)據(jù)。
● VL53L1_PRESETMODE_MULTIZONES_SCANNING: 多區(qū)域掃描模式,允許用戶定義的多個感興趣區(qū)域(ROI)進行連續(xù)掃描,并逐一報告每個區(qū)域的測距值。默認(rèn)最多支持 16 個區(qū)域,最高可擴展到 169 個區(qū)域。
● VL53L1_PRESETMODE_LITE_RANGING: 簡化測距模式(已廢棄),最初設(shè)計用于降低主機的處理負(fù)擔(dān)。
● VL53L1_PRESETMODE_AUTONOMOUS: 自主測距模式,在該模式下,傳感器可以定期進行測量,而無需主機干預(yù),適合低功耗應(yīng)用。
● 默認(rèn)模式: 默認(rèn)的預(yù)設(shè)模式為 VL53L1_PRESETMODE_RANGING。

VL53L1_SetPresetMode

VL53L1_SetPresetMode() 是 VL53L1 傳感器的一個API函數(shù),用于將設(shè)備設(shè)置為一個新的預(yù)設(shè)模式(Preset Mode)。該函數(shù)定義了傳感器的工作模式,比如高速測距或多目標(biāo)檢測。
函數(shù)描述:
● 作用: 這個函數(shù)設(shè)置設(shè)備的操作模式,比如高速測距或多對象檢測等。它通過修改測量的時間預(yù)算和測量間隔來實現(xiàn)不同的模式。
● 注意事項:
○ 這個函數(shù)并不會直接訪問設(shè)備,而是修改了相關(guān)的配置參數(shù)。
○ 使用該函數(shù)后,時間預(yù)算會被設(shè)定為 16 ms,測量間隔被設(shè)定為 1000 ms,且距離模式被設(shè)定為 VL53L1_DISTANCEMODE_LONG。

將 VL53L1 傳感器的預(yù)設(shè)模式設(shè)置為 VL53L1_PRESETMODE_MULTIZONES_SCANNING(多區(qū)域掃描模式)。

/*VL53L1_SetPresetMode function is mandatory to be called even if default PresetMode is the VL53L1_PRESETMODE_RANGING */
  status = VL53L1_SetPresetMode(&VL53L1CBObj1, VL53L1_PRESETMODE_MULTIZONES_SCANNING);

VL53L1_SetDistanceMode

VL53L1_SetDistanceMode() 是 VL53L1 傳感器的一個API函數(shù),用于設(shè)置傳感器的測距模式。該函數(shù)允許用戶選擇適合具體應(yīng)用場景的測距范圍,以優(yōu)化測量精度。不同的測距模式在不同的距離范圍內(nèi)提供最佳的測量結(jié)果。

根據(jù)不同的預(yù)設(shè)模式(Preset mode),用戶可以選擇適合的距離模式來優(yōu)化測量的準(zhǔn)確性和設(shè)備的性能。表格中的內(nèi)容解釋了每種距離模式的可能選項及其優(yōu)點或注意事項。

status = VL53L1_SetDistanceMode(&VL53L1CBObj1, VL53L1_DISTANCEMODE_LONG);

時間預(yù)算

VL53L1_SetMeasurementTimingBudgetMicroSeconds() 是一個用于設(shè)置 VL53L1 傳感器測距時間預(yù)算的 API 函數(shù)。通過這個函數(shù),用戶可以定義設(shè)備在當(dāng)前模式下(如測距、直方圖模式等)完成一次完整測距序列所允許的最大時間。

VL53L1_ERROR_INVALID_PARAMS: 如果傳入的時間參數(shù)不被支持,會返回此錯誤。計算出的時間預(yù)算最大值為10秒,最小值則取決于所選擇的預(yù)設(shè)模式。
時間預(yù)算值(表格): 表格中列出了不同預(yù)設(shè)模式下的時間預(yù)算的最小值、典型值和最大值:
● Ranging(測距模式):
○ 最小值: 8毫秒
○ 典型值: 16毫秒
○ 最大值: 500毫秒
● MultiZone scanning(多區(qū)域掃描模式):
○ 最小值: 8毫秒
○ 典型值: 16毫秒
○ 最大值: 500毫秒
● Autonomous(自主模式):
○ 最小值: 20毫秒
○ 典型值: 40毫秒
○ 最大值: 1000毫秒

status = VL53L1_SetMeasurementTimingBudgetMicroSeconds(&VL53L1CBObj1, 500000);

單個ROI(Single ROI)設(shè)置

● 默認(rèn)設(shè)置: VL53L1傳感器的默認(rèn)ROI大小是16x16 SPAD(單光子雪崩二極管)矩陣。
● 自定義ROI: 用戶可以調(diào)用 VL53L1_SetROI() 函數(shù)來設(shè)置與默認(rèn)16x16不同的ROI。ROI是由兩個角點(左上角和右下角)定義的正方形或矩形區(qū)域。
● 四個坐標(biāo):
● TopLeftX: 左上角X坐標(biāo)。
● TopLeftY: 左上角Y坐標(biāo)。
● BotRightX: 右下角X坐標(biāo)。
● BotRightY: 右下角Y坐標(biāo)。
● 結(jié)構(gòu)體: 這些坐標(biāo)是 VL53L1_UserROI_t 類型的結(jié)構(gòu)體的一部分。用戶需要在結(jié)構(gòu)體中定義這些ROI坐標(biāo)值,然后調(diào)用驅(qū)動函數(shù)應(yīng)用ROI更改。
● 最小ROI尺寸: 最小的ROI尺寸是4x4 SPAD矩陣。

設(shè)置完畢之后使用 VL53L1_StartMeasurement 啟動測量。

VL53L1_MultiRangingData_t MultiRangingData;
    VL53L1_MultiRangingData_t *pMultiRangingData = &MultiRangingData;
    uint8_t NewDataReady = 0;
    uint8_t NumROI = 16, RoiNumber=0, RoiStatus=0;
    int no_of_object_found = 0, j, k;
    VL53L1_RoiConfig_t pRoiConfig;

    pRoiConfig.NumberOfRoi=NumROI;

  printf("Start set Roi");
  for(k=0;k< 4;k++)
      for(j=0;j< 4;j++)
      {
          pRoiConfig.UserRois[k*4+j].TopLeftX=j*4;
          pRoiConfig.UserRois[k*4+j].TopLeftY=k*4+3;
          pRoiConfig.UserRois[k*4+j].BotRightX=j*4+3;
          pRoiConfig.UserRois[k*4+j].BotRightY=k*4;
          printf("set Roi %dnrx: %d-%d    y: %d-%dnr",k*4+j,j*4,j*4+3,k*4,k*4+3);
      }    

  /* VL53L1_SetROI must be called after VL53L1_SetPresetMode */
  status = VL53L1_SetROI(&VL53L1CBObj1, &pRoiConfig);
  if (!status){
    status = VL53L1_StartMeasurement(&VL53L1CBObj1);
  }
  else{
    printf("VL53L1_SetROI failed: error =%dnr", status);
    while(1){};
  };    
  if(status){
    printf("VL53L1_StartMeasurement failed: error = %d nr", status);
    while(1);
  }

主程序

● 數(shù)據(jù)檢查:
● VL53L1_GetMeasurementDataReady(&VL53L1CBObj1, &NewDataReady);:這個函數(shù)檢查傳感器的測量數(shù)據(jù)是否準(zhǔn)備好。如果有數(shù)據(jù)可用,NewDataReady 會被設(shè)置為非零值。
● HAL_Delay(1);:插入一個1毫秒的延遲,避免在輪詢過程中占用過多的CPU時間。
● 數(shù)據(jù)獲取:
● 如果測量數(shù)據(jù)已經(jīng)準(zhǔn)備好,代碼會調(diào)用 VL53L1_GetMultiRangingData(&VL53L1CBObj1, pMultiRangingData); 獲取多區(qū)域測距數(shù)據(jù)。
● RoiNumber 和 RoiStatus 從 pMultiRangingData 中提取,表示當(dāng)前ROI的編號和狀態(tài)。
● RangeMilliMeter 是從 pMultiRangingData->RangeData[0] 中提取的測量距離(以毫米為單位)。
● 數(shù)據(jù)輸出:
● printf 語句將獲取到的數(shù)據(jù)(ROI編號、狀態(tài)、測量距離)輸出到控制臺或串口。
● 數(shù)據(jù)格式為:RoiNumber, RoiStatus, RangeMilliMeter,每次測量后輸出一行。
● 中斷清除與新測量開始:
● 如果成功獲取到數(shù)據(jù)并處理完,代碼調(diào)用 VL53L1_ClearInterruptAndStartMeasurement(&VL53L1CBObj1); 清除中斷并啟動新的測量。

do{ // polling mode
      status = VL53L1_GetMeasurementDataReady(&VL53L1CBObj1, &NewDataReady);
      HAL_Delay(1);
      if((!status)&&(NewDataReady!=0)){
        status = VL53L1_GetMultiRangingData(&VL53L1CBObj1, pMultiRangingData);
        RoiNumber=pMultiRangingData- >RoiNumber;
        RoiStatus=pMultiRangingData- >RoiStatus;

        printf("%1d,", RoiNumber);
        printf("%1d,", RoiStatus);
        printf("%d", pMultiRangingData- >RangeData[0].RangeMilliMeter);
        printf ("nr");
        if (status==0){
          status = VL53L1_ClearInterruptAndStartMeasurement(&VL53L1CBObj1);
        }
      }
    }
    while (1);

數(shù)據(jù)說明

RoiNumber: 8 位整數(shù),表示與該測量數(shù)據(jù)相關(guān)的ROI編號。

RoiStatus: 當(dāng)前ROI的狀態(tài),可能的值為 0, 1 或 2,分別表示“無效ROI”、“有效ROI”和“最后一個ROI”。

如果未檢測到目標(biāo)且測量有效,所有的距離值會被強制設(shè)置為最大值,并且其他返回值會設(shè)置為默認(rèn)值(如0或8191)。

測試結(jié)果

VL53L1對著天花板測量數(shù)據(jù)如下所示,2個數(shù)據(jù)之間相處時間約為500ms。

審核編輯 黃宇

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

    關(guān)注

    2551

    文章

    51085

    瀏覽量

    753445
  • 掃描
    +關(guān)注

    關(guān)注

    0

    文章

    197

    瀏覽量

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

    關(guān)注

    9

    文章

    483

    瀏覽量

    36337
收藏 人收藏

    評論

    相關(guān)推薦

    VL53L5CX驅(qū)動開發(fā)(1)----驅(qū)動TOF進行區(qū)域檢測

    VL53L5CX是一款先進的飛行感應(yīng)(FlightSense)產(chǎn)品系列的飛行時間(ToF區(qū)間測距傳感器。封裝在微型的可回流焊盤封裝內(nèi),它集成了SPAD陣列、物理紅外濾光片和衍射光學(xué)元件(DOE),以在不同的環(huán)境光照條件和各種
    的頭像 發(fā)表于 12-01 16:26 ?790次閱讀
    <b class='flag-5'>VL53L</b>5CX驅(qū)動<b class='flag-5'>開發(fā)</b>(<b class='flag-5'>1</b>)----驅(qū)動<b class='flag-5'>TOF</b>進行<b class='flag-5'>區(qū)域</b>檢測

    VL53L4CD TOF開發(fā)(1)----驅(qū)動TOF進行測距

    VL53L4CD適用于接近測量和短距離測量,可實現(xiàn)從僅僅1 mm到1300 mm的超精準(zhǔn)距離測量。新一代激光發(fā)射器具有18°視場 (FoV),提高了環(huán)境光下的性能,其測距速度高達100Hz
    的頭像 發(fā)表于 05-17 14:54 ?936次閱讀
    <b class='flag-5'>VL53L</b>4CD <b class='flag-5'>TOF</b><b class='flag-5'>開發(fā)</b>(<b class='flag-5'>1</b>)----驅(qū)動<b class='flag-5'>TOF</b>進行測距

    VL53L8CX TOF開發(fā)(1)----驅(qū)動TOF進行區(qū)域檢測

    VL53L8CX是一款8x8區(qū)域ToF測距傳感器,它在環(huán)境光下能夠在降低功耗的同時增強性能。該傳感器基于意法半導(dǎo)體的FlightSense技術(shù)設(shè)計,能夠提供最高400 cm的精確測距
    的頭像 發(fā)表于 05-20 09:42 ?879次閱讀
    <b class='flag-5'>VL53L</b>8CX <b class='flag-5'>TOF</b><b class='flag-5'>開發(fā)</b>(<b class='flag-5'>1</b>)----驅(qū)動<b class='flag-5'>TOF</b>進行<b class='flag-5'>區(qū)域</b>檢測

    VL53L4CD TOF開發(fā)(2)----修改測量頻率

    VL53L4CD是一款高度集成的飛行時間(ToF)傳感器,廣泛應(yīng)用于距離測量和接近檢測。為了滿足不同應(yīng)用場景的需求,合理調(diào)整傳感器的測量頻率至關(guān)重要。本文旨在介紹如何在VL53L4CD傳感器上修改
    的頭像 發(fā)表于 06-19 14:50 ?1152次閱讀
    <b class='flag-5'>VL53L</b>4CD <b class='flag-5'>TOF</b><b class='flag-5'>開發(fā)</b>(<b class='flag-5'>2</b>)----修改測量頻率

    VL53L1CB TOF開發(fā)(1)----驅(qū)動TOF進行測距

    VL53L1傳感器,可以實現(xiàn)對物體的快速、準(zhǔn)確測距,最高測量距離可達800厘米。該傳感器支持I2C接口,具備多種預(yù)設(shè)模式(如測距模式、
    的頭像 發(fā)表于 10-09 10:16 ?1432次閱讀
    <b class='flag-5'>VL53L1CB</b> <b class='flag-5'>TOF</b><b class='flag-5'>開發(fā)</b>(<b class='flag-5'>1</b>)----驅(qū)動<b class='flag-5'>TOF</b>進行測距

    新一代ToF 激光測距模塊VL53L0X

    距離可長達 2 m,精度高達 3%,具體取決于所選功耗與精度的平衡。圖 1VL53L0X 框圖。如圖 1 所示,VL53L0X 集成了人眼
    發(fā)表于 04-06 14:03

    VL53L1X簡介

    一、VL53L1X簡介VL53L1X屬于STMicroelectronics即常說的意法半導(dǎo)體(ST)公司推出的FlightSense? 產(chǎn)品系列ToF(Time of flight)激光測距傳感器
    發(fā)表于 08-06 07:54

    VL53L5CX #高達 8x8 區(qū)域測距和 63°對角線寬視場 飛行時間區(qū)域測距傳感器

    意法半導(dǎo)體 – VL53L5CX 飛行時間傳感器高達 8x8 區(qū)域測距和 63°對角線寬視場意法半導(dǎo)體VL53L5CX是一款先進的飛行時間 (To
    發(fā)表于 09-01 10:10

    RT-Thread VL53L0X TOF傳感器驅(qū)動設(shè)計資料實現(xiàn)

    1、RT-Thread VL53L0X TOF傳感器驅(qū)動實現(xiàn)  Time of flight(TOF),中文翻譯為“飛行時間”。飛行時間技術(shù)在廣義上可理解為通過測量物體、粒子或波在固定
    發(fā)表于 09-15 17:08

    ST的飛行時間傳感器產(chǎn)品以及哪些傳感器具有哪些功能

    0x - 25o FOV,測距傳感器中的基本型號。單一區(qū)域,單一目標(biāo)vl53l1 - 27o FOV,區(qū)域(可調(diào) FoV)vl53l1x
    發(fā)表于 12-07 11:55

    VL53L1的門傳感器的功耗有低?

    不清楚基于 VL53L1 的門傳感器的功耗有低,例如,所以我可以確定電池壽命?此外,哪種模式、設(shè)置和采樣方法等可以理想地提供中斷驅(qū)動的連續(xù)門感應(yīng)功能,同時功耗最低?
    發(fā)表于 12-09 06:38

    我可以使用API VL53LX去支持VL53L1CB嗎?

    使用 STM32CubeMX 重新制定項目。但是我找不到合適的軟件支持,無論是在 X-CUBE-TOF1 庫還是 X-CUBE-53L1A2 中,它似乎不支持自定義硬件的裸驅(qū)動程序 API。您認(rèn)為我可以使用 VL53L3 父 A
    發(fā)表于 12-16 06:24

    如何區(qū)分VL53L1CBVL53L1CX?

    VL53L1 數(shù)據(jù)表中報告并且無法與 VL53L1X 值進行比較。要將已處于生產(chǎn)階段的產(chǎn)品從 VL53L1CX 切換到 VL53L1CB,這是一個需要了解的關(guān)鍵要素。
    發(fā)表于 12-30 08:11

    為什么無法在VL53L1上進行測距和區(qū)域掃描

    我有一個傳感器部件號 VL53L1CBV0FY/1 我使用驅(qū)動程序版本 6.6.1。GetDeviceInfo 報告:名稱:VL53L1 cut1.0型號:VL53L1產(chǎn)品類型:0主要
    發(fā)表于 01-11 07:35

    區(qū)飛行時間(ToF)傳感器的特點

    ???????? VL53L5、VL53L7、VL53L8都是基于ST的FlightSense技術(shù)的區(qū)飛行時間(ToF)傳感器。
    的頭像 發(fā)表于 02-25 09:41 ?1148次閱讀
    <b class='flag-5'>多</b>區(qū)飛行時間(<b class='flag-5'>ToF</b>)傳感器的特點