VL53L5CX是一款多区飞行时间测距(ToF)传感器,可在4x4或8x8的单独区域中生成测距数据。每个区域最多可检测四个目标并提供最高达四米的距离测量。当配置为4x4分辨率时,最大测距频率为60Hz;而配置为8x8分辨率时,最大测距频率为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项目[如果还没有创建的话;创建路径:文件>新建>STM32项目 (File > New > STM32 Project)]。使用MCU/MPU 选择器 或板选择器选择目标器件。本教程中,我选择了NUCLEO-F401RE开发板,因为它包含在P-NUCLEO-53L5A1评估套件中。为项目命名,然后点击完成。
-
使用器件配置工具(如果没有自动打开,请双击项目资源管理器中的.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 |
- 从左侧的元件清单中选择与先前配置的SDA和SCL引脚相对应的I2C外设。我为我的器件选择了I2C1 。在模式面板中,从I2C设置的下拉列表中选择“I2C”。请注意,执行此操作后,引脚排列视图中的SDA和SCL引脚应从黄色变为绿色。在配置面板中,从“I2C速度模式”设置的下拉列表中选择“快速模式”。最终的I2C配置应与图2类似。
- 从元件清单中选择GPIO外设,并将PWR_EN_C和LPn_C引脚的“GPIO输出电平”更改为“高”。对于INT_C引脚,将GPIO模式更改为“带下降沿触发器检测的外部中断模式”。请注意,INT_C引脚的默认“无上拉且无下拉电阻”设置需保持不变,因为X-NUCLEO-53L5A1板上安装了47 kΩ的上拉电阻(R5)。为明确起见,你也可以选择为VL53L5CX接口引脚添加相应的用户标签。图3中突出显示了对GPIO设置的所有更改。
- 在NVIC 选项卡下,勾选INT_C引脚所对应的EXTI线旁边的复选框,如图4所示。
- 保存.ioc文件以生成项目的代码。
添加驱动程序
本教程再次说明了如何添加和使用VL53L5CX ULD API。如果你倾向于使用X-CUBE-TOF1软件包,请按照UM2853中提供的说明操作。
-
下载ULD API并将文件提取到目标位置。在撰写本文时,1.3.6版是最新版本。
-
在STM32CubeIDE中,在项目资源管理器中右键单击驱动程序文件夹,选择导入。使用导入向导,从常规类别中选择文件系统。点击下一步。
-
在“来源目录:”字段中填充ULD驱动程序的路径:<extraction_location>/VL53L5CX_ULD_driver_1.3.0。如图5所示,在VL53L5CX_ULD_API目录中选择所有资源。点击完成。
-
在项目资源管理器中,右键单击Drivers/VL53L5CX_ULD_API/inc目录。选择添加 / 删除包含路径 … ,然后点击确定。
-
将示例平台文件复制并粘贴到项目中。
-
复制
<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
文件的“私有包含”部分中。该项目应该能够成功构建。
示例应用
本文开头的动画中展示了使用8x8 NeoPixel矩阵的简单应用。图7显示了硬件设置的静态图像。外部5V(2A)电源已连接到Nucleo板的E5V上,由+5V引脚向NeoPixel矩阵提供电源。引脚PB10(Arduino标头上的D6)提供了NeoPixel控制信号,因此也连接到了矩阵的DIN上。如需了解有关生成NeoPixel控制信号的详细信息,请参见使用STM32控制NeoPixels。
要为Nucleo板上电,必须遵循正确的启动序列!
- 确保JP5处于E5V位置上(在引脚2和3之间)
- 确保已移除JP1
- 连接外部5V电源并为其上电
- 确认LD3已开启
- 将PC连接到ST-LINK USB连接器(CN1)
我强烈你建议在使用外部电源之前阅读UM1724的第6.3节,以避免损坏你的开发板!
此应用的main.c文件位于项目的GitHub存储库中。请注意,使用在STM32上轻松使用printf中描述的方法启用printf语句。