VL53L5CX ToF传感器使用入门

VL53L5CX是一款多区飞行时间测距(ToF)传感器,可在4x4或8x8的单独区域中生成测距数据。每个区域最多可检测四个目标并提供最高达四米的距离测量。当配置为4x4分辨率时,最大测距频率为60Hz;而配置为8x8分辨率时,最大测距频率为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项目[如果还没有创建的话;创建路径:文件>新建>STM32项目 (File > New > STM32 Project)]。使用MCU/MPU 选择器板选择器选择目标器件。本教程中,我选择了NUCLEO-F401RE开发板,因为它包含在P-NUCLEO-53L5A1评估套件中。为项目命名,然后点击完成

  2. 使用器件配置工具(如果没有自动打开,请双击项目资源管理器中的.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中的信号相对应的引脚排列配置变更

  1. 从左侧的元件清单中选择与先前配置的SDA和SCL引脚相对应的I2C外设。我为我的器件选择了I2C1 。在模式面板中,从I2C设置的下拉列表中选择“I2C”。请注意,执行此操作后,引脚排列视图中的SDA和SCL引脚应从黄色变为绿色。在配置面板中,从“I2C速度模式”设置的下拉列表中选择“快速模式”。最终的I2C配置应与图2类似。


2 VL53L5CX传感器的I2C配置

  1. 从元件清单中选择GPIO外设,并将PWR_EN_C和LPn_C引脚的“GPIO输出电平”更改为“高”。对于INT_C引脚,将GPIO模式更改为“带下降沿触发器检测的外部中断模式”。请注意,INT_C引脚的默认“无上拉且无下拉电阻”设置需保持不变,因为X-NUCLEO-53L5A1板上安装了47 kΩ的上拉电阻(R5)。为明确起见,你也可以选择为VL53L5CX接口引脚添加相应的用户标签。图3中突出显示了对GPIO设置的所有更改。


3 VL53L5CX传感器的GPIO配置

  1. NVIC 选项卡下,勾选INT_C引脚所对应的EXTI线旁边的复选框,如图4所示。


4 启用对应于VL53L5CX INT信号的外部中断。

  1. 保存.ioc文件以生成项目的代码。

添加驱动程序

本教程再次说明了如何添加和使用VL53L5CX ULD API。如果你倾向于使用X-CUBE-TOF1软件包,请按照UM2853中提供的说明操作。

  1. 下载ULD API并将文件提取到目标位置。在撰写本文时,1.3.6版是最新版本。

  2. 在STM32CubeIDE中,在项目资源管理器中右键单击驱动程序文件夹,选择导入。使用导入向导,从常规类别中选择文件系统。点击下一步

  3. 在“来源目录:”字段中填充ULD驱动程序的路径:<extraction_location>/VL53L5CX_ULD_driver_1.3.0。如图5所示,在VL53L5CX_ULD_API目录中选择所有资源。点击完成


5 导入VL53L5CX ULD驱动程序

  1. 在项目资源管理器中,右键单击Drivers/VL53L5CX_ULD_API/inc目录。选择添加 / 删除包含路径 ,然后点击确定

  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文件的“私有包含”部分中。该项目应该能够成功构建。


6 平台文件

示例应用

本文开头的动画中展示了使用8x8 NeoPixel矩阵的简单应用。图7显示了硬件设置的静态图像。外部5V(2A)电源已连接到Nucleo板的E5V上,由+5V引脚向NeoPixel矩阵提供电源。引脚PB10(Arduino标头上的D6)提供了NeoPixel控制信号,因此也连接到了矩阵的DIN上。如需了解有关生成NeoPixel控制信号的详细信息,请参见使用STM32控制NeoPixels


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存储库中。请注意,使用在STM32上轻松使用printf中描述的方法启用printf语句。