这次我们来谈谈激光测距模块
我们使用正点原子STM32F103ZET6精英版。
VL53L0X 是 ToF 激光测距传感器,利用飞行时间(ToF)测距应用是通过计算光子飞行时间和光速来实现的。
1.VL53L0X 提供了传感器 3 测量模式,单次测量,连续测量,定期测量。
2.三种测量模式
(1) (单次测量) ,在此模式下只触发一次测距测量,测量结束后,
VL53L0X 传感器将返回待机状态,等待下一次触发。
() (连续测量) ,测距测量将在此模式下连续进行。
一旦测量结束,下一个测量将立即启动,用户必须停止测距才能返回待机状态,最后一个
停止前完成次量。
() (定时测量) ,测距测量将在该模式下连续进行。
之后,下一次测量将在用户定义的延迟时间后启动。用户必须停止测距才能返回到等待
最后一次测量在停机前完成。
注意:
测量时间因精度模式而异,
测量时间最快的高速模式,只需 20ms 内部可采样一次,但精确存在。
在长距离精度模式下,可以实现测距 2m,测量时间在 33ms 内,
但在黑暗条件(无红外线)的环境时。
因此,在实际应用中,应根据当前要求选择合适的精度模式,以达到最佳的测量效果。
当上电,VL53L0X会进入Hw Standby状态,这是待机状态,功耗很低。然后提高XSHUT引脚,让VL53L0X进入Fw Boot状态,开始准备测距。如果不需要待机状态,可以把XSHUT接到AVDD上。VL53L0X处于休眠状态,无法通信IIC
注意:
(1):接到测距命令后,开始测量,测量完成后自动退出,进入Sw Standby状态。
(2):在收到测距开始命令后,一直测量,直到收到测距停止命令。当收到测距停止命令时,最后一次测量将完成。
(3):接到测距开始命令后,开始测量。测量完成后,等待一段时间
下一次测量,直到收到测距停止命令。等待间隔可调。
模块自带了 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 上拉电阻,外部不需要加拉电阻。
1.core 文件夹下有四个重点.c 文件,
分别是: vl53l0x_api.c、 vl53l0x_api_calibration.c、vl53l0x_api_core.c 和 vl53l0x_api_strings.c
2.这四个 C 文件的关系可以用以下关系图来表示
注释:
- vl53l0x_api_core.c 文件,
2.vl53l0x_api_calibration.c 文件,
3 vl53l0x_api_strings.c 文件,
vl53l0x_api.c 文件,
下面是激光测距的API函数部分:
,
(2)函数为 VL53L0X_DataInit(VL53L0X_DEV Dev),
(3)入口参数类型为 VL53L0X_DEV 结构体,结构体变量为设置传感器的 I2C 地址等重要信息。
注意:。
(2)函数为VL53L0X_StaticInit(VL53L0X_DEV Dev)
(3)入口参数为 VL53L0X_DEV 结构体变量,VL53L0X_DEV结构体变量为设置传感器的 I2C 地址等重要信息
(4)
(1)
(2)函数为 VL53L0X_SetDeviceAddress(VL53L0X_DEVDev,uint8_t DeviceAddress)
(3)入口参数为 VL53L0X_DEV 结构体变量和 DeviceAddress 变量
(4)VL53L0X_DEV 结构体变量为设置传感器 I2C 地址等重要信息
(5)DeviceAddress 变量为新设置的 I2C 地址
注意:
(6)
(7)
(1)
(2)函数为 VL53L0X_SetDeviceMode(VL53L0X_DEVDev,VL53L0X_DeviceModes DeviceMode)
(3)入口参数为 VL53L0X_DEV 结构体类型变量和VL53L0X_DeviceModes 类型变量
(4)VL53L0X_DEV 结构体变量为设置传感器 I2C 地址等重要信息
(5)
其中包含 SINGLE_RANGING 单次测量、 CONTINUOUS_RANGING 连续测量和 TIMED_RANGING定时器测量
(6)
、 函数
(1)
(2)函数为VL53L0X_PerformSingleRangingMeasurement(VL53L0X_DEVDev,VL53L0X_RangingMeasurementData_t*pRangingMeasurementData)
(3)入口参数为 VL53L0X_DEV 结构体类型变量和 VL53L0X_RangingMeasurementData_t 结构体类型变量
(4)VL53L0X_DEV 结构体变量为设置传感器 I2C 地址等重要信息
VL53L0X_RangingMeasurementData_t 结构体变量为返回测量距离的数据和测量范围状态等数据
(5)
、 和 函数
(1)该函数分别实现了传感器启动测量和暂停测量
函数。
(2)函数为 VL53L0X_StartMeasurement(VL53L0X_DEV Dev) 和 VL53L0X_StopMeasurement(VL53L0X_DEV Dev)
(3)入口参数都为VL53L0X_DEV 结构体类型变量
(4)VL53L0X_DEV 结构体变量为设置传感器 I2C 地址等重要信息
(5)
、 函数
(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)
、 函数
(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 类型变量的作用 设置引脚的触发模式(包含上升沿和下降沿)
注意:
(5)函数一般在传感器工作在连续测量模式初始化配置时进行使用。
(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)
(5)
(6)
(1)
(2)函数为 VL53L0X_ClearInterruptMask(VL53L0X_DEV Dev,uint32_t InterruptMask)
(3)入口参数为 VL53L0X_DEV 结构体类型变量, InterruptMask 变量
(4) VL53L0X_DEV 结构体变量为设置传感器 I2C 地址等重要信息
(5) InterruptMask 变量为设置中断清除,默认设置为 0
(6)
(1)
(2)函数为 VL53L0X_SetMeasure mentTimingBudgetMicroSeconds(VL53L0X_DEV Dev, uint32_t MeasurementTimingBudget MicroSeconds)
(3)入口参数为 VL53L0X_DEV 结构体类型变量、MeasurementTimingBudget MicroSeconds 变量
(4) VL53L0X_DEV 结构体变量为设置传感器 I2C 地址等重要信息
(5)
(6)
(1)
(2)函数为 VL53L0X_PerformOffsetCalibration VL53L0X_ DEV Dev,FixPoint1616_t CalDistanceMilliMeter, int32_t *pOffsetMicroMeter)
(3)入口参数为 VL53L0X_DEV 结构体类型变量、CalDistanceMilliMeter 变量和 pOffsetMicroMeter 指针变量, VL53L0X_DEV 结构体变量为设置传感器 I2C 地址等重要信息
(4)
(5)
(6)
(1)
(2)函数为 VL53L0X_SetOffsetCalibrationDataMicro Meter(VL53L0X_DEV Dev, int32_t OffsetCalibrationDataMicroMeter)
(3)入口参数为 VL53L0X_DEV 结构体类型变量和 OffsetCalibrationDataMicroMeter 变量,VL53L0X_DEV 结构体变量为设置传 感器 I2C 地址等重要信息
(4)
(5)