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);
	}
}
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

饮食有节起居有常

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

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

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

打赏作者

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

抵扣说明:

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

余额充值