这次我们聊一聊激光测距模块
我们用的是正点原子的STM32F103ZET6精英版。
一。VL53L0X 简介
1.定义
VL53L0X 是 ToF 激光测距传感器,利用飞行时间(ToF)原理,通过光子的飞行来回时间与光速的计算,实现测距应用。
二。测量模式
1.VL53L0X 传感器提供了 3 种测量模式,单次测量,连续测量,定时测量。
2.三种测量模式
(1) Single ranging(单次测量) ,在该模式下只触发执行一次测距测量,测量结束后,
VL53L0X 传感器会返回待机状态,等待下一次触发。
(2) Continuous ranging(连续测量) ,在该模式下会以连续的方式执行测距测量。一
旦测量结束,下一次测量就会立即启动,用户必须停止测距才能返回到待机状态,最后的一
次测量在停止前完成。
(3) Timed ranging(定时测量) ,在该模式下会以连续的方式执行测距测量。测量结
束后,在用户定义的延迟时间之后,才会启动下一次测量。用户必须停止测距才能返回到待
机状态,最后的一次测量在停机前完成。
三。ST 官方提供了 4 种不同的精度模式
注意:
针对不同的精度模式,测量时间也是有所区别的,
测量时间最快为高速模式,只需 20ms 内就可以采样一次,但精度确存在有±5%的误差范围。
而在长距离精度模式下,测距距离能达到 2m,测量时间在 33ms 内,
但测量时需在黑暗条件(无红外线)的环境下。
所以在实际的应用中,需根据当前的要求去选择合适的精度模式,以达到最佳的测量效果。
四。工作流程
当上电,VL53L0X会进入Hw Standby状态,这是待机状态,功耗很低。然后拉高XSHUT引脚,让VL53L0X进入Fw Boot状态,开始准备测距。如果不需要待机状态,可以把XSHUT接到AVDD上。VL53L0X处于休眠状态是不能进行通信IIC
注意: VL53L0X有3种工作模式:
(1)单次模式:收到测距开始命令后,开始进行测量,测量完成后自动退出,进入Sw Standby状态。
(2)连续模式:收到测距开始命令后,就一直进行测量,直到收到测距停止命令。收到测距停止命令时,会把最后一次测量完成才退出。
(3)连续间隔模式:收到测距开始命令后,开始进行测量,完成一次测量后,等待一段时间再进行
下次测量,直到收到测距停止命令。测量等待间隔时间可调。
五。原理图
六。引脚
1.基础
模块自带了 2.8V 超低压差稳压芯片,给 VL53L0X 芯片供电,因此外部供电可以选择: 3.3V/5V 都可以的。
模块通过 P1 排针与外部连接,引出了 VCC、 GND、IIC_SDA、 IIC_SCL、 VL_INT、 VL_XSH 信号。
其中, IIC_SCL、 IIC_SDA、 VL_INT 和 VL_XSH带了 4.7K 上拉电阻,外部可以不用再加上拉电阻了。
2.ATK-VL53L0X 激光测距传感器模块通过一个 1*6 的排针(P1)同外部电路连接,各引脚的详细描述如表 2.1.1 所示:
七。core文件
1.core 文件夹下有四个重点.c 文件,
分别是: vl53l0x_api.c、 vl53l0x_api_calibration.c、vl53l0x_api_core.c 和 vl53l0x_api_strings.c
2.这四个 C 文件的关系可以用以下关系图来表示
注释:
- vl53l0x_api_core.c 文件,
提供有 vl53l0x 传感器的底层操作核心函数。
2.vl53l0x_api_calibration.c 文件,
提供有 vl53l0x 传感器校准操作的底层函数。
3 vl53l0x_api_strings.c 文件,
它实现信息内容的获取,提供有获取 vl53l0x 传感器设备 ID信息的底层函数,以及提供根据功能函数返回的状态值去获得其状态信息(字符串)的底层函数
4.vl53l0x_api.c 文件,
则对以上的底层函数进行封装,提供包括系统初始化、测量模式配置、参数配置、校准功能、状态信息获取、以及中断配置等 API 函数。在一般的使用时,直接调取 vl53l0x_api.c 提供的 API 函数就可以了。
下面是激光测距的API函数部分:
一。常用的API函数有这些
二。各个API函数的备注
1、 VL53L0X_Datalnit()函数
(1)该函数实现传感器初始化,
(2)函数为 VL53L0X_DataInit(VL53L0X_DEV Dev),
(3)入口参数类型为 VL53L0X_DEV 结构体,结构体变量为设置传感器的 I2C 地址等重要信息。
注意:在失能传感器设备,到再重新使能设备,需调用该函数进行初始化。
2、 VL53L0X_Staticlnit()函数
(1)该函数实现传感器寄存器值恢复默认初值和工作状态切换为待机状态
(2)函数为VL53L0X_StaticInit(VL53L0X_DEV Dev)
(3)入口参数为 VL53L0X_DEV 结构体变量,VL53L0X_DEV结构体变量为设置传感器的 I2C 地址等重要信息
(4)该函数在初始化时进行调用
3、 VL53L0X_SetDeviceAddress()函数
(1)该函数实现修改传感器设备的 I2C 地址
(2)函数为 VL53L0X_SetDeviceAddress(VL53L0X_DEVDev,uint8_t DeviceAddress)
(3)入口参数为 VL53L0X_DEV 结构体变量和 DeviceAddress 变量
(4)VL53L0X_DEV 结构体变量为设置传感器 I2C 地址等重要信息
(5)DeviceAddress 变量为新设置的 I2C 地址
注意:重新使能设备后,I2C 地址为会恢复为默认的 0x52 地址
(6)若修改设备 I2C 地址,需在使能设备后进行调用
(7)设置的 I2C 地址必须为偶数,否则会出现通讯出错
4、 VL53L0X_SetDeviceMode()函数
(1)该函数实现传感器测量的工作模式配置
(2)函数为 VL53L0X_SetDeviceMode(VL53L0X_DEVDev,VL53L0X_DeviceModes DeviceMode)
(3)入口参数为 VL53L0X_DEV 结构体类型变量和VL53L0X_DeviceModes 类型变量
(4)VL53L0X_DEV 结构体变量为设置传感器 I2C 地址等重要信息
(5)VL53L0X_DeviceModes 类型变量为设置的工作模式
其中包含 SINGLE_RANGING 单次测量、 CONTINUOUS_RANGING 连续测量和 TIMED_RANGING定时器测量
(6)该函数在测量前初始化进行调用
5、 VL53L0X_PerformSingleMeasurement()函数
(1)该函现实现启动传感器一次测量
(2)函数为VL53L0X_PerformSingleRangingMeasurement(VL53L0X_DEVDev,VL53L0X_RangingMeasurementData_t*pRangingMeasurementData)
(3)入口参数为 VL53L0X_DEV 结构体类型变量和 VL53L0X_RangingMeasurementData_t 结构体类型变量
(4)VL53L0X_DEV 结构体变量为设置传感器 I2C 地址等重要信息
VL53L0X_RangingMeasurementData_t 结构体变量为返回测量距离的数据和测量范围状态等数据
(5)该函数一般在传感器工作在单次测量模式下进行调用
6、 VL53L0X_StartMeasurement()和 VL53L0X_StopMeasurement()函数
(1)该函数分别实现了传感器启动测量和暂停测量
实现启动测量的是VL53L0X_StartMeasurement()函数,
实现暂停测量的是VL53L0X_StopMeasurement()函数。
(2)函数为 VL53L0X_StartMeasurement(VL53L0X_DEV Dev) 和 VL53L0X_StopMeasurement(VL53L0X_DEV Dev)
(3)入口参数都为VL53L0X_DEV 结构体类型变量
(4)VL53L0X_DEV 结构体变量为设置传感器 I2C 地址等重要信息
(5)这两个函数一般在测量时进行使用
7、 VL53L0X_GetRangingMeasurementData()函数
(1)该函数实现获取传感器采样的测量数据
(2)函数为 VL53L0X_PerformSingleRangingMeasurement(VL53L0X_DEV Dev,VL53L0X_Ranging MeasurementData_t *pRangingMeasurementData)
(3)入口参数为VL53L0X_DEV结构体类型变量和VL53L0X_RangingMeasurementData_t结构体类型变量
(4)VL53L0X_DEV 结构体变量为设置传感器 I2C 地址等重要信息
(5)VL53L0X_RangingMeasurementData_t 结构体变量为返回测量距离的数据和测量范围状态等数据
(6)该函数一般在传感器工作在连续测量模式下进行使用
8、 VL53L0X_SetGpioConfig()函数
(1)该函数实现测量中断模式的配置功能
(2)函数为 VL53L0X_SetGpioConfig(VL53L0X_DEV Dev,uint8_t Pin,VL53L0X_DeviceModes DeviceMode, VL53L0X_GpioFunctionality Functionality,VL53L0X_InterruptPolarity Polarity)
(3)入口参数为 VL53L0X_DEV 结构体类型变量、 Pin 变量、VL53L0X_DeviceModes 类型变量VL53L0X_GpioFunctionality 类型变量 和VL53L0X_InterruptPolarity 类型变量。
其中五个变量的作用:
VL53L0X_DEV 结构体变量作用 设置传感器 I2C 地址等重要信息
VL53L0X_DeviceModes 类型变量的作用 设置的测量工作模式(单次测量、连续测量、定时测量)
Pin 变量的作用 设置 GPIO 引脚口(使用时默认配置为 0)
VL53L0X_DeviceModes类型变量的作用 设置测量触发中断模式的
VL53L0X_InterruptPolarity 类型变量的作用 设置引脚的触发模式(包含上升沿和下降沿)
注意:
VL53L0X_DeviceModes类型变量包含以下三种模式
CROSSED_LOW(采样距离<下限值)
CROSSED_HIGH(采样距离>上限值)
CROSSED_OUT(采样距离<下限值或采样距离>上限值)
(5)函数一般在传感器工作在连续测量模式初始化配置时进行使用。
9、VL53L0X_SetlnterruptThresholds()函数
(1)该函数实现测量中断模式上下限距离值的设置
(2)函数为 VL53L0X_SetInterruptThresholds (VL53L0X_DEV Dev,VL53L0X_DeviceModes DeviceMode, FixPoint1616_t ThresholdLow,FixPoint1616_t ThresholdHigh)
(3)入口参数 VL53L0X_DEV 结构体类型变量、VL53L0X_DeviceModes 类 型变量、ThresholdLow 和 ThresholdHigh 变量,VL53L0X_DEV 结构体变量为设置传感器 I2C 地址等重要信息,
(4) VL53L0X_DeviceModes 类型变量为设置的测量工作模式(单次测量、连续测量、定时测量等)
(5) ThresholdLow为中断触发的下限距离值
ThresholdHigh为设置中断触发的上限距离值
(6)该函数一般在传感器工作在连续测量模式初始化配置时进行使用
10、VL53L0X_ClearInterruptMask()函数
(1)该函数实现清除测量中断模式的中断标志位
(2)函数为 VL53L0X_ClearInterruptMask(VL53L0X_DEV Dev,uint32_t InterruptMask)
(3)入口参数为 VL53L0X_DEV 结构体类型变量, InterruptMask 变量
(4) VL53L0X_DEV 结构体变量为设置传感器 I2C 地址等重要信息
(5) InterruptMask 变量为设置中断清除,默认设置为 0
(6)该函数在传感器触发中断后时进行使用
11、VL53L0X_SetMeasurementTimingBudgetMicroSeconds()函数
(1)该函数实现配置测量工作模式的周期采样时间的功能
(2)函数为 VL53L0X_SetMeasure mentTimingBudgetMicroSeconds(VL53L0X_DEV Dev, uint32_t MeasurementTimingBudget MicroSeconds)
(3)入口参数为 VL53L0X_DEV 结构体类型变量、MeasurementTimingBudget MicroSeconds 变量
(4) VL53L0X_DEV 结构体变量为设置传感器 I2C 地址等重要信息
(5) MeasurementTimingBudgetMicroSeconds 变量为设置测量工作模式的周期采样时间,单位为 ms
(6)该函数在工作模式初始化配置时进行使用
12、VL53L0X_PerformOffsetCalibration()函数
(1)该函数实现距离偏移的校准的功能
(2)函数为 VL53L0X_PerformOffsetCalibration VL53L0X_ DEV Dev,FixPoint1616_t CalDistanceMilliMeter, int32_t *pOffsetMicroMeter)
(3)入口参数为 VL53L0X_DEV 结构体类型变量、CalDistanceMilliMeter 变量和 pOffsetMicroMeter 指针变量, VL53L0X_DEV 结构体变量为设置传感器 I2C 地址等重要信息
(4) CalDistanceMilliMeter变量为设置校准时与传感器设备的相对距离值,单位为 mm
(5) pOffsetMicroMeter指针变量为相对距离校准后传感器返回的修正距离变量的指针
(6)该函数在校准时进行使用
13、VL53L0X_SetOffsetCalibrationDataMicroMeter()函数
(1)该函数实现设置距离补偿值的功能
(2)函数为 VL53L0X_SetOffsetCalibrationDataMicro Meter(VL53L0X_DEV Dev, int32_t OffsetCalibrationDataMicroMeter)
(3)入口参数为 VL53L0X_DEV 结构体类型变量和 OffsetCalibrationDataMicroMeter 变量,VL53L0X_DEV 结构体变量为设置传 感器 I2C 地址等重要信息
(4)OffsetCalibrationDataMicroMeter 变量为设置的距离补偿值
(5)该函数在补偿时进行使用