STMicroelectronics 的 VL53L5CX 是一款多區飛時測距(ToF)感測器,可在 4 x 4 或 8 x 8 的單獨區域產生測距資料。 每個區域最多可偵測四個目標並提供最高可達四公尺的距離測量。 當配置為 4 x 4 解析度時,最大測距頻率為 60Hz;而配置為 8 x 8 解析度時,最大測距頻率為 15Hz。 此驅動程式可支援多種附加功能,例如使用區域覆蓋玻璃時,進行串擾校準、低功耗操作的物件閾值偵測和動作偵測。
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 系統建構
-
新建 STM32CubeIDE 項目(如果還沒建立的話;建立路徑:File > New > STM32 Project)。在 MCU / MPU Selectot 或 Borad Selector 選項中選擇目標裝置。 本教程中,我選擇了 NUCLEO-F401RE 開發板,因為它包含在 P-NUCLEO-53L5A1 評估套件中。 為項目命名,然後點選 Finish 完成。
-
使用裝置設定工具(如果沒有自動打開,請雙擊 Project Explorer 管理器中的
.ioc
檔案),將裝置配置為與 VL53L5CX 感測器連接。 首先在接腳排列視圖中為 I2C 實例、外部中斷訊號和致能/重置線配置元件的 GPIO 接腳。 在本例中,我使用了 X-NUCLEO-53L5A1 擴充板上的中央模組,因此根據 UM2889 的圖 2 中提供的原理圖來配置我的裝置(請參閱下面的表 1)。最終的引腳排列配置如圖 1 所示。
表 1 : X-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 |
圖 1 : 與表 1 中的訊號相對應的引腳排列配置變更
- 從左側的裝置清單中選擇與先前配置的 SDA 和 SCL 引腳相對應的 I2C 周邊裝置。 我為我的裝置選擇了 I2C1 。 在 Mode 面板中,從 I2C 設定的下拉清單中選擇「I2C」。 請注意,執行此操作後,引腳排列視圖中的 SDA 和 SCL 引腳應從黃色變為綠色。 在 Configuration 面板中,從「I2C Speed Mode」設定的下拉清單中選擇「Fast Mode」。 最終的 I2C 配置應與圖 2 類似。
- 從裝置清單中選擇 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 設定的所有變更。
- 在 NVIC 選項下,剔選與 INT_C 引腳對應的 EXTI LINE 旁的勾選框,如圖 4 所示。
圖 4 : 啟用對應於 VL53L5CX INT 訊號的外部中斷
- 儲存
.ioc
檔案以產生項目的程式碼。
新增驅動程式
本教學再次說明如何新增和使用 VL53L5CX ULD API。 如果你傾向於使用 X-CUBE-TOF1 軟體套裝,請按照 UM2853 中提供的說明操作。
-
下載 ULD API 並將檔案解壓到你指定位置。 在撰寫本文時,1.3.6 版是最新版本。
-
在 STM32CubeIDE 中,在 Project Explorer 管理器中以滑鼠右鍵按一下驅動程式資料夾,選擇Import 匯入。 使用 Import Wizard,從常規類別中選擇 File System。 點擊 Next 下一步。
-
在「From Directory:」欄中填入 ULD 驅動程式的路徑:
<extraction_location>/VL53L5CX_ULD_driver_1.3.0
。 如圖 5 所示,在 VL53L5CX_ULD_API 目錄中選擇所有資源。 點選 Finish 完成。
-
在 Project Explorer 管理器中,右按鍵一下
Drivers/VL53L5CX_ULD_API/inc
目錄。 選擇 Add/remove include path… ,然後點選 OK 確定。 -
將範例平台檔案複製並貼上到項目中。
-
複製
<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」部分。 該項目應該能夠成功建立。
應用範例
本文開頭的動畫中展示了使用 8 x 8 NeoPixel 矩陣的簡單應用。 圖 7 顯示了硬體設定的靜態影像。 外部 5V(2A)電源已連接到 Nucleo 板的 E5V 上,由 +5V 引腳向 NeoPixel 矩陣提供電源。 腳位 PB10(Arduino 標頭上的 D6)提供了 NeoPixel 控制訊號,因此也連接到了矩陣的 DIN。 如需了解有關產生 NeoPixel 控制訊號的詳細信息,請參閱「使用 STM32 控制 NeoPixel」。
要開啟 Nucleo 板,必須遵循正確的啟動序列!
-
確保 JP5 處於 E5V 位置上(在引腳 2 和 3 之間)
-
確保已移除 JP1
-
連接外部 5V 電源並為其開啟電源
-
確認 LD3 已開啟
-
將 PC 連接到 ST-LINK USB 連接器(CN1)
強烈建議在使用外部電源之前,請閱讀 UM1724 的第 6.3 節,避免損壞你的開發板!
此應用的 main.c
檔案位於項目的 GitHub Repository 儲存庫中。 請注意,在 STM32 上使用 printf 語句的方法已在「在 STM32 上輕鬆使用 printf」中詳細描述。