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

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

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

基于STM32CUBEMX驅(qū)動(dòng)TOF模塊VL53l0x(3)----驅(qū)動(dòng)多個(gè)VL53L0X

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

概述

在本章中,我們將探討如何同時(shí)驅(qū)動(dòng)多個(gè)VL53L0X傳感器進(jìn)行距離測量。我們將介紹如何有效地管理多個(gè)傳感器之間的通信和控制,以確保它們能夠同時(shí)進(jìn)行準(zhǔn)確的距離測量。通過本章的學(xué)習(xí),將能夠了解如何利用多個(gè)VL53L0X傳感器的優(yōu)勢,為應(yīng)用程序提供更全面的環(huán)境感知能力。
最近在弄ST的課程,需要樣片的可以加群申請(qǐng):615061293 。

在這里插入圖片描述

視頻教學(xué)

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

樣品申請(qǐng)

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

源碼下載

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

修改設(shè)備地址

VL53L0X使用I2C總線進(jìn)行通信。默認(rèn)情況下,VL53L0X的7位地址為0x29。然而,為了避免地址沖突并允許多個(gè)傳感器共享相同的I2C總線,用戶可以通過向寄存器I2C_SLAVE_DEVICE_ADDRESS(寄存器地址為0x8A)寫入自定義的7位地址來修改傳感器的地址。

在這里插入圖片描述

修改后如下所示。

// Public Methods //////////////////////////////////////////////////////////////

void VL53L0X_setAddress(uint8_t add,uint8_t new_addr)
{
  VL53L0X_WriteByte(add,I2C_SLAVE_DEVICE_ADDRESS, new_addr & 0x7F);

}

在VL53L0X.h文件,該文件包含了VL53L0X傳感器的相關(guān)定義和配置。
在VL53L0X.h文件中,可以定義2個(gè)設(shè)備的地址常量,分別表示不同的傳感器。例如,可以使用以下方式定義地址常量:

#define VL53L0X_DEFAULT_I2C_ADDR1 0x29  ///< The fixed I2C addres
#define VL53L0X_DEFAULT_I2C_ADDR2 0x30  ///< The fixed I2C addres

以上示例展示了兩個(gè)設(shè)備地址常量的定義,分別表示不同的傳感器。可以根據(jù)您實(shí)際使用的傳感器數(shù)量和配置需求,增加或減少設(shè)備地址常量的定義。
在代碼中,可以使用這些設(shè)備地址常量來指定不同傳感器的地址。例如,如果想要使用第一個(gè)傳感器的地址,可以使用VL53L0X_DEFAULT_I2C_ADDR1來表示該地址。請(qǐng)注意,需要根據(jù)實(shí)際情況將這些地址常量與傳感器的物理連接和配置相對(duì)應(yīng)。確保將正確的地址常量分配給相應(yīng)的傳感器,以確保正確的通信和操作。
在進(jìn)行地址常量定義時(shí),建議參考VL53L0X傳感器的數(shù)據(jù)手冊(cè)和相關(guān)文檔,以了解更多關(guān)于傳感器地址和配置的詳細(xì)信息。
這里的地址值是根據(jù)實(shí)際需求和硬件連接情況選擇的,確保每個(gè)設(shè)備具有唯一的地址是非常重要的。通過使用定義的設(shè)備地址常量,可以輕松地管理和操作多個(gè)VL53L0X傳感器。通過為每個(gè)傳感器分配唯一的設(shè)備地址常量,可以在代碼中使用這些常量來指定與每個(gè)傳感器對(duì)應(yīng)的地址。這樣,可以輕松地區(qū)分不同的傳感器,并發(fā)送適當(dāng)?shù)拿詈团渲脕砼c每個(gè)傳感器進(jìn)行通信和操作。通過使用定義的設(shè)備地址常量,可以輕松管理和操作多個(gè)傳感器,無需手動(dòng)跟蹤和設(shè)置每個(gè)傳感器的地址。這提供了方便和靈活性,特別適用于需要同時(shí)使用多個(gè)VL53L0X傳感器的應(yīng)用場景。

配置VL53L0X

在對(duì)應(yīng)的demo板子中,管腳圖如下所示。
在這里插入圖片描述

在下面代碼中,展示了對(duì)多個(gè)VL53L0X傳感器進(jìn)行初始化和配置的過程。每個(gè)傳感器通過不同的管腳連接到主板上,并通過控制GPIO引腳的電平來選擇對(duì)應(yīng)的傳感器進(jìn)行操作。
以下是對(duì)代碼的擴(kuò)展說明:

  1. 首先,通過控制GPIO引腳的電平,將相應(yīng)的引腳設(shè)置為RESET狀態(tài),以準(zhǔn)備初始化對(duì)應(yīng)的傳感器。具體來說,對(duì)于每個(gè)傳感器,通過控制兩個(gè)GPIO引腳,即片選,將它們?cè)O(shè)置為RESET狀態(tài)。
  2. 然后,通過控制GPIO引腳的電平,將相應(yīng)的引腳設(shè)置為SET狀態(tài),以選擇對(duì)應(yīng)的傳感器進(jìn)行操作。對(duì)于每個(gè)傳感器,通過控制兩個(gè)GPIO引腳,即片選,將它們?cè)O(shè)置為SET狀態(tài)。
  3. 在每次切換傳感器之后,添加了一段延時(shí),以確保引腳狀態(tài)的切換穩(wěn)定。這段延時(shí)的長度可以根據(jù)實(shí)際需求進(jìn)行調(diào)整。
    對(duì)每個(gè)傳感器執(zhí)行以下操作:
    a. 初始化傳感器,使用VL53L0X_Init函數(shù),將傳感器的地址作為參數(shù)傳遞。
    b. 通過VL53L0X_setAddress函數(shù),修改傳感器的地址,使用VL53L0X_DEFAULT_I2C_ADDR2作為源地址。

通過代碼,可以初始化和配置多個(gè)VL53L0X傳感器,并根據(jù)需要選擇不同的傳感器進(jìn)行操作。請(qǐng)注意,以上代碼示例僅為參考,您需要根據(jù)自己的硬件連接和需求進(jìn)行相應(yīng)的修改和調(diào)整。確保參考VL53L0X傳感器的文檔和數(shù)據(jù)手冊(cè),以了解更多關(guān)于初始化、配置和操作傳感器的詳細(xì)信息。

/* USER CODE BEGIN 2 */
	// 啟動(dòng)第一個(gè)VL53L0X傳感器并關(guān)閉第二個(gè)VL53L0X傳感器
	HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_SET);
	HAL_GPIO_WritePin(GPIOB, GPIO_PIN_4, GPIO_PIN_RESET);

	// 等待200ms以確保第一個(gè)VL53L0X傳感器啟動(dòng)完成
	HAL_Delay(200);

	// 使用默認(rèn)地址初始化第一個(gè)VL53L0X傳感器
	if (!VL53L0X_Init(VL53L0X_DEFAULT_I2C_ADDR1, true))
	{
			printf("Failed to detect and initialize sensor!");
			while (1) {}  // 如果初始化失敗,則無限循環(huán)
	}

	// 修改第一個(gè)VL53L0X的I2C地址,以便我們可以與第二個(gè)VL53L0X傳感器通信
	VL53L0X_setAddress(VL53L0X_DEFAULT_I2C_ADDR1, VL53L0X_DEFAULT_I2C_ADDR2);

	// 啟動(dòng)第二個(gè)VL53L0X傳感器
	HAL_GPIO_WritePin(GPIOB, GPIO_PIN_4, GPIO_PIN_SET);
	HAL_Delay(200);  // 等待200ms以確保第二個(gè)VL53L0X傳感器啟動(dòng)完成

	// 使用之前的默認(rèn)地址初始化第二個(gè)VL53L0X傳感器
	if (!VL53L0X_Init(VL53L0X_DEFAULT_I2C_ADDR1, true))
	{
			printf("Failed to detect and initialize sensor!");
			while (1) {}  // 如果初始化失敗,則無限循環(huán)
	}
	
  /* USER CODE END 2 */

主程序

在代碼中,展示了如何在主程序中循環(huán)讀取2個(gè)VL53L0X傳感器的數(shù)據(jù)。以下是代碼的擴(kuò)展說明:

  1. 在主程序的while循環(huán)中,首先使用VL53L0X_readRangeSingleMillimeters函數(shù)從VL53L0X傳感器2(設(shè)備地址為VL53L0X_DEFAULT_I2C_ADDR2)讀取距離數(shù)據(jù)然后,使用printf函數(shù)打印輸出距離值。
  2. 之后等待0.5秒。
  3. 接下來,使用VL53L0X_readRangeSingleMillimeters函數(shù)從VL53L0X傳感器1(設(shè)備地址為VL53L0X_DEFAULT_I2C_ADDR1)讀取距離數(shù)據(jù)然后,使用printf函數(shù)打印輸出距離值。
  4. 之后等待0.5秒。
    請(qǐng)注意,代碼示例僅為參考,您需要根據(jù)您的實(shí)際硬件配置、VL53L0X庫和應(yīng)用需求進(jìn)行相應(yīng)的修改和調(diào)整。確保參考VL53L0X傳感器的文檔和數(shù)據(jù)手冊(cè),以了解更多關(guān)于數(shù)據(jù)讀取和解析的詳細(xì)信息。
/* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    // 從第二個(gè)VL53L0X傳感器讀取距離值(單位:毫米)
    L = VL53L0X_readRangeSingleMillimeters(VL53L0X_DEFAULT_I2C_ADDR2);
    printf("L=%d", L);  // 打印從第二個(gè)VL53L0X傳感器讀取的距離值
    HAL_Delay(500);  // 延遲500ms(0.5秒)

    // 從第一個(gè)VL53L0X傳感器讀取距離值(單位:毫米)
    R = VL53L0X_readRangeSingleMillimeters(VL53L0X_DEFAULT_I2C_ADDR1);
    printf("R=%d", R);  // 打印從第一個(gè)VL53L0X傳感器讀取的距離值
    HAL_Delay(500);  // 延遲500ms(0.5秒)
		
    /* USER CODE END WHILE */

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

測試結(jié)果

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

在這里插入圖片描述

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

    關(guān)注

    12

    文章

    1788

    瀏覽量

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

    關(guān)注

    9

    文章

    462

    瀏覽量

    36127
  • stm32cubemx
    +關(guān)注

    關(guān)注

    5

    文章

    278

    瀏覽量

    14618
  • VL53L0X
    +關(guān)注

    關(guān)注

    0

    文章

    7

    瀏覽量

    2443
收藏 人收藏

    評(píng)論

    相關(guān)推薦

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

    VL53L0X是新一代飛行時(shí)間(ToF)激光測距模塊(不同于傳統(tǒng)技術(shù)),采用目前市場上最小的封裝,無論目標(biāo)反射率如何,都能提供精確的距離測量。它可以測量2m的絕對(duì)距離,為測距性能等級(jí)設(shè)定了新的基準(zhǔn),為各種新應(yīng)用打開了大門。
    的頭像 發(fā)表于 12-01 15:45 ?1962次閱讀
    基于<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'>VL53l0x</b>(1)----單<b class='flag-5'>模塊</b>距離獲取的最佳實(shí)踐

    基于STM32CUBEMX驅(qū)動(dòng)TOF模塊VL53l0x(2)----修改設(shè)備地址

    本章主要介紹如何修改VL53L0X傳感器的I2C地址,并成功驅(qū)動(dòng)設(shè)備以使用新的地址。VL53L0X是一種多功能、高性能的接近和環(huán)境光傳感器,常用于測量物體與傳感器之間的距離、檢測物體的接近程度以及
    的頭像 發(fā)表于 12-01 15:46 ?1154次閱讀
    基于<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'>VL53l0x</b>(2)----修改設(shè)備地址

    新一代ToF 激光測距模塊VL53L0X

    ,所以回程距離的計(jì)算公式也很簡單,即“光速” x “時(shí)間延遲”。VL53L0X 是新一代 ToF 激光測距模塊,采用目前市場上最小型的封裝,可基于各種目標(biāo)物顏色和反射特性進(jìn)行精確測距。
    發(fā)表于 04-06 14:03

    VL53L0X可以永久更改I2C地址嗎?

    大家好!關(guān)于VL53L0X飛行時(shí)間測距和手勢檢測傳感器的簡短問題。數(shù)據(jù)表提到了“可編程I2C地址”。是否可以永久地將默認(rèn)I2C地址更改為另一個(gè)地址?新的I2C地址是否會(huì)永久存儲(chǔ)在VL53L0X中?我
    發(fā)表于 10-23 16:46

    如何減少VL53L0X FOV?

    你好。有誰知道是否有可能減少VL53L0X FOV放在它前面一小塊塑料(黑暗?)管道? 它可以運(yùn)作得足夠好還是串?dāng)_會(huì)變得不可接受?任何其他選項(xiàng),以減少檢測FOV?提前感謝
    發(fā)表于 11-29 10:21

    VL53L0x不會(huì)受到什么樣的材料干擾

    大家好,在我的項(xiàng)目中,它有一個(gè)覆蓋VL53L0x(約5厘米)以上。我想知道VL53L0x不會(huì)受到什么樣的材料干擾。這意味著VL53L0x在其上方有蓋子時(shí)可以正常工作。非常感謝?;鹦?/div>
    發(fā)表于 04-12 15:17

    VL53L0x環(huán)境光靈敏度無法測量距離

    ?Best regardsSoren #light-intensity #light #vl53l0x #vl53l0 #tof #ir #time-of-flight #ambient-light #halogen
    發(fā)表于 04-15 16:42

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

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

    請(qǐng)問VL53L0X的FOV范圍是多少?

    數(shù)據(jù)表顯示 VL53L0X 具有 25 度的 FOV。然而,每個(gè) VL53L0X 顯示的 FOV 略有不同。比如一只VL53L0X好像是24度,另一只VL53L0X好像是26度。
    發(fā)表于 12-08 06:12

    VL53L0X TOF激光測距傳感器的數(shù)據(jù)手冊(cè)免費(fèi)下載

    VL53L0X是一種新一代飛行時(shí)間(TOF)激光測距模塊,安裝在當(dāng)今市場上最小的封裝中,與傳統(tǒng)技術(shù)不同,它提供精確的距離測量,無論目標(biāo)反射是什么。它可以測量高達(dá)2米的絕對(duì)距離,設(shè)置一個(gè)新的B。Enchmark在各種性能級(jí)別,為各
    發(fā)表于 07-08 08:00 ?40次下載
    <b class='flag-5'>VL53L0X</b> <b class='flag-5'>TOF</b>激光測距傳感器的數(shù)據(jù)手冊(cè)免費(fèi)下載

    微雪電子測距傳感器VL53L0X測距模塊簡介

    VL53L0X 飛行時(shí)間 測距傳感器模塊 2米 I2C接口 測距頻率可達(dá)50Hz,低功耗,抗干擾 型號(hào) VL53L0X Distance Sensor
    的頭像 發(fā)表于 01-06 08:56 ?8439次閱讀
    微雪電子測距傳感器<b class='flag-5'>VL53L0X</b>測距<b class='flag-5'>模塊</b>簡介

    使用STM32F103應(yīng)用VL53L0X激光測距模塊的測試參考程序免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用STM32F103應(yīng)用VL53L0X激光測距模塊的測試參考程序免費(fèi)下載。
    發(fā)表于 06-12 08:00 ?152次下載
    使用<b class='flag-5'>STM32</b>F103應(yīng)用<b class='flag-5'>VL53L0X</b>激光測距<b class='flag-5'>模塊</b>的測試參考程序免費(fèi)下載

    VL53L0X激光測距傳感器的數(shù)據(jù)手冊(cè)免費(fèi)下載

    VL53L0X是新一代飛行時(shí)間(ToF)激光測距模塊,封裝在當(dāng)今市場上最小的封裝中,與傳統(tǒng)技術(shù)不同的是,無論目標(biāo)反射是什么,都能提供精確的距離測量。它可以測量高達(dá)2米的絕對(duì)距離,樹立了衡量性能水平
    發(fā)表于 12-08 08:00 ?22次下載
    <b class='flag-5'>VL53L0X</b>激光測距傳感器的數(shù)據(jù)手冊(cè)免費(fèi)下載

    使用VL53L0X激光傳感器的Arduino高度測量

    電子發(fā)燒友網(wǎng)站提供《使用VL53L0X激光傳感器的Arduino高度測量.zip》資料免費(fèi)下載
    發(fā)表于 11-01 09:53 ?0次下載
    使用<b class='flag-5'>VL53L0X</b>激光傳感器的Arduino高度測量

    Arduino和VL53L0X飛行時(shí)間+OLED顯示教程

    電子發(fā)燒友網(wǎng)站提供《Arduino和VL53L0X飛行時(shí)間+OLED顯示教程.zip》資料免費(fèi)下載
    發(fā)表于 07-03 09:37 ?2次下載
    Arduino和<b class='flag-5'>VL53L0X</b>飛行時(shí)間+OLED顯示教程