VL53L5CX ToF 飛時測距感測器入門

STMicroelectronicsVL53L5CX 是一款多區飛時測距(ToF)感測器,可在 4 x 4 或 8 x 8 的單獨區域產生測距資料。 每個區域最多可偵測四個目標並提供最高可達四公尺的距離測量。 當配置為 4 x 4 解析度時,最大測距頻率為 60Hz;而配置為 8 x 8 解析度時,最大測距頻率為 15Hz。 此驅動程式可支援多種附加功能,例如使用區域覆蓋玻璃時,進行串擾校準、低功耗操作的物件閾值偵測和動作偵測。

00_00

VL53L5CX 的驅動程式分為兩種。 ULD API 是一組精簡最佳化的 C 函數集,只需要三個檔案即可實現基本功能。 另一種是 X-CUBE-TOF1 擴充套裝軟體,其中包括幾個額外的抽象化層和範例應用,非常適合使用 X-NUCLEO-53L5A1 擴充板和/或 VL53L5CS-SATEL 子板進行原型設計。 X-CUBE-TOF1 軟體套裝已充分整合到 STM32CubeMX 編碼配置器軟體中,並且 UM2853 中還包含詳細的使用入門說明。 因此,本文將重點介紹 ULD API,因為將驅動程式新增至專案中需要更多的手動操作。 最後一部分也提供了重現上述動畫範例專案的資源。

要求

在開始前,需要準備以下韌體、軟體和硬體設備。

  • STSW-IMG023 (本教學使用的是 1.3.6 版本)

    • 本軟體套裝包含獨立於平台的 VL53L5CX ULD 驅動程式檔案(採用 C 語言編寫)。 你可以點擊此處獲取。
  • 一塊 Nucleo 板

    • 儘管本教學使用的是 NUCLEO-F401RE 板,但任何 Nucleo 板都可以使用(儘管相關說明可能稍有不同)。 請注意,USB 線不包括在內。
  • X-NUCLEO-53L1A1

    • 還需要用於評估 VL53L5CX 模組的擴充板,你可以點擊這裡購買。
  • STM32CubeIDE(本教學使用的是 1.11.2 版本)

    • 你也可以依照自己的喜好使用其他 IDE,例如 Keil、IAR 等。 但我強烈建議使用 STM32CubeIDE。 尤其對於 STM32 開發的新手而言。 你可以點擊此處下載。

STM32 系統建構

  1. 新建 STM32CubeIDE 項目(如果還沒建立的話;建立路徑:File > New > STM32 Project)。在 MCU / MPU SelectotBorad Selector 選項中選擇目標裝置。 本教程中,我選擇了 NUCLEO-F401RE 開發板,因為它包含在 P-NUCLEO-53L5A1 評估套件中。 為項目命名,然後點選 Finish 完成。

  2. 使用裝置設定工具(如果沒有自動打開,請雙擊 Project Explorer 管理器中的 .ioc 檔案),將裝置配置為與 VL53L5CX 感測器連接。 首先在接腳排列視圖中為 I2C 實例、外部中斷訊號和致能/重置線配置元件的 GPIO 接腳。 在本例中,我使用了 X-NUCLEO-53L5A1 擴充板上的中央模組,因此根據 UM2889 的圖 2 中提供的原理圖來配置我的裝置(請參閱下面的表 1)。最終的引腳排列配置如圖 1 所示。

表 1X-NUCLEO-53L5A1 擴充板的中央模組的 GPIO 配置

X-NUCLEO-53L5CX 訊號名稱 Arduino 引腳 NUCLEO-F401RE 引腳 引腳配置
I2C_RST_C D3 PB3 GPIO_Output
LPn_C D5 PB4 GPIO_Output
PWR_EN_C A3 PB0 GPIO_Output
INT_C A2 PA4 GPIO_EXTIx
SCL D15 PB8 I2Cx_SCL
SDA D14 PB9 I2Cx_SDA

image

圖 1 : 與表 1 中的訊號相對應的引腳排列配置變更

  1. 從左側的裝置清單中選擇與先前配置的 SDA 和 SCL 引腳相對應的 I2C 周邊裝置。 我為我的裝置選擇了 I2C1 。 在 Mode 面板中,從 I2C 設定的下拉清單中選擇「I2C」。 請注意,執行此操作後,引腳排列視圖中的 SDA 和 SCL 引腳應從黃色變為綠色。 在 Configuration 面板中,從「I2C Speed Mode」設定的下拉清單中選擇「Fast Mode」。 最終的 I2C 配置應與圖 2 類似。

2 VL53L5CX 感測器的 I2C 配置

  1. 從裝置清單中選擇 GPIO 外設,並將 PWR_EN_C 和 LPn_C 引腳的「GPIO Output Level」變更為「High」。 對於 INT_C 引腳,將 GPIO mode 變更為「External Interrupt Mode with Falling edge trigger detection」。 請注意,INT_C 引腳的預設「No pull-up and no pull-down」設定需保持不變,因為 X-NUCLEO-53L5A1 板上安裝了 47 kΩ 的上拉電阻(R5)。或者,為明確起見,你也可以選擇為 VL53L5CX 介面接腳新增對應的使用者標籤 (User Labels)。 圖 3 中突顯了對 GPIO 設定的所有變更。

3 VL53L5CX 感測器的 GPIO 配置

  1. NVIC 選項下,剔選與 INT_C 引腳對應的 EXTI LINE 旁的勾選框,如圖 4 所示。

image

4 啟用對應於 VL53L5CX INT 訊號的外部中斷

  1. 儲存 .ioc 檔案以產生項目的程式碼。

新增驅動程式

本教學再次說明如何新增和使用 VL53L5CX ULD API。 如果你傾向於使用 X-CUBE-TOF1 軟體套裝,請按照 UM2853 中提供的說明操作。

  1. 下載 ULD API 並將檔案解壓到你指定位置。 在撰寫本文時,1.3.6 版是最新版本。

  2. 在 STM32CubeIDE 中,在 Project Explorer 管理器中以滑鼠右鍵按一下驅動程式資料夾,選擇Import 匯入。 使用 Import Wizard,從常規類別中選擇 File System。 點擊 Next 下一步。

  3. 在「From Directory:」欄中填入 ULD 驅動程式的路徑:<extraction_location>/VL53L5CX_ULD_driver_1.3.0。 如圖 5 所示,在 VL53L5CX_ULD_API 目錄中選擇所有資源。 點選 Finish 完成。

5 導入 VL53L5CX ULD 驅動程式

  1. 在 Project Explorer 管理器中,右按鍵一下 Drivers/VL53L5CX_ULD_API/inc 目錄。 選擇 Add/remove include path… ,然後點選 OK 確定。

  2. 將範例平台檔案複製並貼上到項目中。

  • 複製<extraction_location>/VL53L5CX_ULD_driver_1.3.6/CubeIDE_F401RE_Example/Core/Inc/platform.h 並將其貼到 Core/Inc

  • 複製<extraction_location>/VL53L5CX_ULD_driver_1.3.6/CubeIDE_F401RE_Example/Core/Src/platform.c 並將其貼到 Core/Src

對目錄結構所做的變更如下圖 6 所示。 要開始使用驅動程序,請將 #include "vl53l5cx_api.h" 行新增至 main.c 檔案的「Private」部分。 該項目應該能夠成功建立。

6 平台文件

應用範例

本文開頭的動畫中展示了使用 8 x 8 NeoPixel 矩陣的簡單應用。 圖 7 顯示了硬體設定的靜態影像。 外部 5V(2A)電源已連接到 Nucleo 板的 E5V 上,由 +5V 引腳向 NeoPixel 矩陣提供電源。 腳位 PB10(Arduino 標頭上的 D6)提供了 NeoPixel 控制訊號,因此也連接到了矩陣的 DIN。 如需了解有關產生 NeoPixel 控制訊號的詳細信息,請參閱「使用 STM32 控制 NeoPixel」。

7 應用照片

要開啟 Nucleo 板,必須遵循正確的啟動序列!

  1. 確保 JP5 處於 E5V 位置上(在引腳 2 和 3 之間)

  2. 確保已移除 JP1

  3. 連接外部 5V 電源並為其開啟電源

  4. 確認 LD3 已開啟

  5. 將 PC 連接到 ST-LINK USB 連接器(CN1)

強烈建議在使用外部電源之前,請閱讀 UM1724 的第 6.3 節,避免損壞你的開發板!

此應用的 main.c 檔案位於項目的 GitHub Repository 儲存庫中。 請注意,在 STM32 上使用 printf 語句的方法已在「在 STM32 上輕鬆使用 printf」中詳細描述。