VL53L0X激光测距

相关介绍

原理图

在这里插入图片描述

参数

超小体积:4.4 x 2.4 x 1.0mm
最大测距:4m发射的激光对眼镜安全,且完全不可见。
工作电压:2.6 to 3.5 V
通信方式:IIC,400KHz,设备地址0x52,最低位是读写标志位。0表示写,1表示读。因此进行写的时候,此8位数据为:0101 0010,即0x52。进行读的时候,此8位数据为:0101 0011,即0x53。
在这里插入图片描述

引脚介绍

在这里插入图片描述
1脚:AVDDVCSEL:VCSEL电源正
2脚:AVSSVCSEL:VCSEL电源地
3脚、4脚、6脚、12脚GND/地
5脚:XSHUT:电源模式控制,如果不需要休眠功能,此脚可以直接接到AVDD上。
7脚:GPIO1:中断输出。开漏输出,因此必须要外部上拉。
8脚:DNC:悬空
9脚和10脚:IIC通信端口11脚AVDD:电源正。

XSHUT相当于是供电引脚。GPIO1是中断输出引脚,当一次测距完成可以输出个信号通知MCU去读取数据
最后根据原理图,和引脚修改相应的GPIO口。主要是SCL、SDA、GPIO1、XSHUT引脚。

库介绍

测距流程

根据原理图中,下图的橙色部分,为必须执行的步骤。其他的为可以添加的选项。
在这里插入图片描述

强制测距(参考手册第8页)

以下部分显示在开始测量之前执行系统初始化所需的API函数。

  • 2.4.1 数据初始化 VL53L1_DataInit()函数被调用一次。 它执行设备初始化。 它在器件退出复位后 被调用一次且仅调用一次。

  • 2.4.2 静态初始化 VL53L1_StaticInit()函数允许加载特定用例的设备设置。

  • 2.4.3 开始测量 必须调用VL53L1_StartMeasurement()函数才能开始测量。

  • 2.4.4 等待结果:轮询或中断

     有三种方法可以知道测距数据可用:
     1. 主机可以调用轮询功能,等待测距数据可用,
     函数VL53L1_WaitMeasurementDataReady()查询设备中断状态,直到测距数据就绪。
     只要功能未完成,该功能就会阻止主机上的所有其他操作,因为执行了内部轮询。
     2. 主机可以轮询功能以询问测距数据是否可用,
     主机可以轮询功能VL53L1_GetMeasurementDataReady()以了解新的测距数据是否准备就
     绪。
     该功能不会阻止其他操作。 如果传感器在轮询模式下使用,则是首选和推荐的方法。
     3. 主机可以等待物理中断
     获得测距状态的另一种首选方法是使用物理中断输出:默认情况下,当新的测距数据准备就
     绪时,GPIO1被拉低。
     该引脚只是输出引脚,该器件没有输入中断引脚。
    
  • 2.4.5 获取测量 Vl53L1_GetRangingMeasurementData()可用于获取测距数据。 当调用该函数获取设备 测距结果时,会调用一个结构 返回VL53L1_RangingMeasurementData_t。 这个结构描述在
    第2.6节:RangingMeasurementData结构.

  • 2.4.6 清楚中断的来源 中断必须通过调用驱动程序功能来清除: 读取测距数据后的VL53L1_ClearInterruptAndStartMeasurement()
    为了获得一致的结果,在进行测距测量后必须调用该函数。 如果此功能未被调用,则下一个测距将开始并且结果将被更新。 但是,数据就绪状态标志
    不会被更新,物理中断引脚也不会被清除。

  • 2.4.7 停止测量 主持人可以决定通过拨打电话来停止测量 VL53L1_StopMeasurement()函数。 如果在量程测量期间发生停止请求,则立即中止测量。

可选的驱动功能(参考手册第九页)

RefSPAD校准(具体参考手册)

在这里插入图片描述
在这里插入图片描述

库移植

将库文件夹放入工程文件夹。
添加模块、文件路径,三个子文件夹core、demo、platform全部包含,因为使用的是轮询模式,所以其中的demo文件夹中只添加第一个文件 vl53l1x,

函数讲解(轮询模式测量距离)

根据其上面的执行流程,主要封装于三个函数 (vl53l1x.c文件)

 VL53L1_Error VL53L1_init(VL53L1_Dev_t *pDev)
 VL53L1_Error VL53L1_set_mode(VL53L1_Dev_t *dev, uint8_t mode)
 VL53L1_Error VL53L1_single_test(VL53L1_Dev_t *dev,VL53L1_RangingMeasurementData_t *pdata)

其中分别包含了(强制测距、可选功能、校准、开始测距、获取数值)等。

main.c文件调用

/* Includes ------------------------------------------------------------------*/
#include "stm32f10x.h"
#include <stdio.h>
#include "delay.h"
#include "string.h"
#include "uart.h"
#include "usart2.h"
#include "dht11.h"
#include "tim3_ch4.h"
#include "pin.h"
#include "mq_2.h"
#include "bc25.h"
#include "oled.h"
#include "stdlib.h" 
#include "bmp.h"
#include "vl53l1x.h"
/* Private functions ---------------------------------------------------------*/



VL53L1_Dev_t 		VL53;
VL53L1_RangingMeasurementData_t pdata;


int main(void)
{
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);		//NVIN中断管理分组
//----------------
	delay_init();									//滴答定时器初始化(延时)
	uart_init();									//串口1初始化
	uart2_init();
	tim3_ch4_init();							//定时器初始化,实现时间片
//----------------
	DHT11_Init();									//DHT11温湿度传感器
	led_Init();
	mq_2_init();
//	bc25_init();
	VL53L1_init(&VL53);					//调用
	VL53L1_set_mode(&VL53,2);		//调用
//----------------	
	OLED_Init();
	OLED_Clear();		
	OLED_ShowString(2,0,(u8 *)"welcome",16);
	


	while (1)
	{	
		VL53L1_single_test(&VL53,&pdata);				//调用
		
		OLED_ShowFloatNumber(32,2,Distance,16);			//显示屏显示
		printf("%d\n",Distance);												//串口显示
		
		delay_ms(1000);
		delay_ms(1000);
	}
}
  • 6
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
VL53L0X是一种集成激光测距传感器的模块,用于测量物体与传感器之间的距离。下面是一个VL53L0X激光测距传感器的程序示例: 1. 首先,我们需要连接VL53L0X模块到我们的开发板上。使用模块的VIN引脚连接到3.3V电源,将模块的GND引脚连接到地线,并将模块的SDA和SCL引脚分别连接到开发板的I2C数据和时钟线上。 2. 在程序中,我们需要包含VL53L0X库的相关文件。你可以从ST官方网站下载这个库并将其导入到你的项目中。 3. 初始化VL53L0X模块。这可以通过调用VL53L0X模块的初始化函数来完成。在初始化函数中,你需要设置模块的工作模式、测量范围和其他一些参数。 4. 进行测距。调用VL53L0X模块的测距函数,并将结果存储在一个变量中。这个函数将发射激光并测量物体与传感器之间的距离。 5. 处理测距结果。根据程序的需求,我们可以根据测距结果来执行一些特定的操作。例如,如果距离小于某个阈值,可以触发一个警报或执行其他的逻辑。 6. 重复测距。你可以选择在循环中重复测量物体与传感器之间的距离。这样可以实时地获取物体距离的变化并进行必要的处理。 请注意,在编写VL53L0X激光测距传感器程序时,还需要仔细阅读和理解VL53L0X模块的数据手册和编程指南。这些文档将详细介绍模块的功能和使用方法,并提供示例代码和参考资料供你参考。希望这个回答对你有帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

好好睡觉好好吃饭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值