当前位置: 首页 > news >正文

STM32传感器模块编程实践(九) VL53L0X激光红外测距传感器简介及驱动源码

文章目录

    • 一.概要
    • 二.VL53L0X测距原理
    • 三.VL53L0X主要特性
    • 四.VL53L0X硬件参考设计
    • 五.模块接线说明
    • 六.模块通讯协议介绍
    • 七.光学盖玻片介绍
    • 八.STM32单片机与VL53L0模块实现距离测量实验
      • 1.硬件准备
      • 2.软件工程
      • 3.软件主要代码
      • 4.实验效果
    • 九.小结

一.概要

VL53L0X是一款由ST(意法半导体)生产的红外传感器,通常用于测量物体与传感器之间的距离。
VL53L0X是ST推出的第二代FlightSense技术的飞行时间传感器,与传统的测距传感器不同,它使用时飞行时间(Time-of-Flight,TOF)测量原理,可以实现精确、快速的非接触式测量。无论目标颜色和反射率如何,都可以进行距离测量,抗干扰能力更强。

在这里插入图片描述

二.VL53L0X测距原理

VL53L0X激光测距模块的原理是利用激光脉冲的飞行时间来测量距离。该模块通过发射一束激光脉冲,并测量该激光脉冲从发射到被接收的时间来计算出物体与传感器之间的距离。
在这里插入图片描述

VL53L0X传感器的测距视场角(FOV)为25°,这个视场角决定了传感器在测距时所能覆盖的区域大小。
在这里插入图片描述

三.VL53L0X主要特性

‌尺寸‌:VL53L0的尺寸非常小,具体为4.4 x 2.4 x 1.0mm,这使得它成为市场上最小的飞行时间(ToF)测距传感器之一‌。
‌测距范围‌:该传感器的测距范围为30mm到2000mm,具体参数为30 ~ 2000mm‌。
‌最大测距‌:VL53L0的最大测距为2米(2000mm)。
‌工作电压‌:工作电压范围为2.6V到3.5V,通常使用3.3V或5V供电‌。
‌通信方式‌:采用I2C通信协议,设备地址为0x52,支持读写操作‌。
‌激光波长‌:使用940nm的VCSEL(垂直腔面发射激光器),这种激光器完全不可见且对人眼安全‌。
‌工作环境‌:工作温度范围为-20°C到70°C,适合各种环境使用‌。
‌测距精度‌:在高速模式下精度为±5%,高精度模式下为±3%‌(室内1.2米以内的白色物体)。
‌测距时间‌:高速模式下测距时间为20ms,高精度模式下为200ms‌。

测量距离(客观因素:室内/室外/被测物体偏白/北侧物体偏灰)
由下表可以看出传感器能够测量的最大距离和在室内环境或在户外强光环境有关系,也和被测物体是偏白还是偏灰有关系。可以看出最佳的测量环境是在室内测量白色障碍物的距离。
在这里插入图片描述

测量精度(客观因素:测量的距离远近/被测物体偏白/北侧物体偏灰)
33ms列为"Default"模式,"HighAccuracy"模式为200ms,在室内默认模式下测量1.2米之内白色的物体精度为4%,测量灰色物体精度为7%。
在这里插入图片描述

为啥测量灰色或者黑色的物体测量的最大距离会减少以及测量精度会降低,因为黑色或者灰色的物体能吸收大量的光子能量,导致反射回传感器的光子比较少,从而影响测量距离以及精度。

四.VL53L0X硬件参考设计

芯片引脚定义,从芯片底部角度观看:

在这里插入图片描述

参考原理图设计
在这里插入图片描述

五.模块接线说明

模块引脚说明:
在这里插入图片描述

在这里插入图片描述

5根杜邦线可以实现模块与开发板相连:
板子3.3----模块VIN
板子A11----模块SCL
板子A12----模块SDA
板子B7-----模块XSHUT
板子G------模块GND

六.模块通讯协议介绍

IIC数据写
在这里插入图片描述

IIC数据读
在这里插入图片描述

VL53L0X芯片的寄存器手册厂家是没提供的,提供了API函数,直接调用就可以实现数据读取。

操作流程:
模块上电,VL53L0X会进入Hw Standby状态,这是待机状态,功耗很低。然后拉高XSHUT引脚,让VL53L0X进入初始化启动状态,开始准备测距。

然后根据配置进入测距模式,有三种测距模式:
单次模式:收到测距开始命令后,开始进行测量,测量完成后自动退出,进入待机。
连续模式:收到测距开始命令后,就一直进行测量,直到收到测距停止命令。收到测距停止命令时,进入待机。
连续间隔模式:收到测距开始命令后,开始进行测量,完成一次测量后,等待一段时间再进行下次测量,直到收到测距停止命令,测量等待间隔时间可调。
在这里插入图片描述

七.光学盖玻片介绍

VL53L0X一般会和光学盖玻片一起结合使用。盖玻片有两个作用:提供物理保护,防止灰尘;对光进行滤波,如果只是个人实验评估使用,一般不需要加盖片。盖片如下图所示,刚好盖住整个传感器。

在这里插入图片描述

在这里插入图片描述

八.STM32单片机与VL53L0模块实现距离测量实验

1.硬件准备

STLINK接STM32F103C8T6开发板,STLINK接电脑USB口。

用5根杜邦线把模块与开发板相连:
板子3.3----模块VIN
板子A11----模块SCL
板子A12----模块SDA
板子B7-----模块XSHUT
板子G------模块GND

在这里插入图片描述

2.软件工程

打开STM32CubeMX软件,新建工程
在这里插入图片描述
Part Number处输入STM32F103C8,再双击就创建新的工程
在这里插入图片描述
配置下载口引脚
在这里插入图片描述
配置外部晶振引脚,IIC采用GPIO模拟,所以IIC外设没有配置
在这里插入图片描述

配置系统主频
在这里插入图片描述

配置工程文件名,保存路径,KEIL5工程输出方式
在这里插入图片描述
生成工程
在这里插入图片描述
用Keil5打开工程
在这里插入图片描述

添加代码

添加VL53L0驱动文件,以及OLED显示驱动文件
在这里插入图片描述

VL53L0复位引脚配置
在这里插入图片描述

VL53L0模拟IIC引脚配置

在这里插入图片描述
在这里插入图片描述
添加应用相关代码
在这里插入图片描述

在这里插入图片描述

3.软件主要代码

int main(void)
{/* USER CODE BEGIN 1 *//* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();//8M外部晶振,72M主频/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();/* USER CODE BEGIN 2 */OLED_Init();//OLED初始化  OLED_Clear();//清屏while(vl53l0x_init(&vl53l0x_dev))//vl53l0x初始化{	 HAL_Delay(500);}/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */vl53l0x_general_test(&vl53l0x_dev,Default_Mode);//默认模式测试}/* USER CODE END 3 */
}//初始化vl53l0x
//dev:设备I2C参数结构体
VL53L0X_Error vl53l0x_init(VL53L0X_Dev_t *dev)
{GPIO_InitTypeDef GPIO_Initure;VL53L0X_Error Status = VL53L0X_ERROR_NONE;VL53L0X_Dev_t *pMyDevice = dev;__HAL_RCC_GPIOA_CLK_ENABLE();           //开启GPIOA时钟pMyDevice->I2cDevAddr = VL53L0X_Addr;//I2C地址(上电默认0x52)pMyDevice->comms_type = 1;           //I2C通信模式pMyDevice->comms_speed_khz = 400;    //I2C通信速率VL53L0X_i2c_init();//初始化IIC总线HAL_GPIO_WritePin(VL53L0X_XshutPort, VL53L0X_XshutPin, GPIO_PIN_RESET);//失能VL53L0Xdelay_ms(30);HAL_GPIO_WritePin(VL53L0X_XshutPort, VL53L0X_XshutPin, GPIO_PIN_SET);//使能VL53L0X,让传感器处于工作delay_ms(30);vl53l0x_Addr_set(pMyDevice,0x54);//设置VL53L0X传感器I2C地址if(Status!=VL53L0X_ERROR_NONE) goto error;Status = VL53L0X_DataInit(pMyDevice);//设备初始化if(Status!=VL53L0X_ERROR_NONE) goto error;delay_ms(2);Status = VL53L0X_GetDeviceInfo(pMyDevice,&vl53l0x_dev_info);//获取设备ID信息if(Status!=VL53L0X_ERROR_NONE) goto error;if(Vl53l0x_data.adjustok==0xAA)//已校准AjustOK=1;	else //没校准	AjustOK=0;error:if(Status!=VL53L0X_ERROR_NONE){print_pal_error(Status);//打印错误信息return Status;}return Status;
}
//启动普通测量
//dev:设备I2C参数结构体
//mode模式配置 0:默认;1:高精度;2:长距离;3:高速
void vl53l0x_general_start(VL53L0X_Dev_t *dev,u8 mode)
{static char buf[VL53L0X_MAX_STRING_LENGTH];//测试模式字符串字符缓冲区VL53L0X_Error Status=VL53L0X_ERROR_NONE;//工作状态OLED_Init();			       //初始化OLED  OLED_Clear();            //清屏OLED_ShowCHinese(18,0,0);//光OLED_ShowCHinese(36,0,1);//子OLED_ShowCHinese(54,0,2);//物OLED_ShowCHinese(72,0,3);//联OLED_ShowCHinese(90,0,4);//网OLED_ShowString(6,3,"VL53L0X Test");OLED_ShowString(80,6,"mm");  vl53l0x_set_mode(dev,mode);//配置测量模式while(1){if(Status==VL53L0X_ERROR_NONE){Status = vl53l0x_start_single_test(dev,&vl53l0x_data,buf);//执行一次测量if(vl53l0x_data.RangeMilliMeter<=2000){OLED_ShowNum(30,6,vl53l0x_data.RangeMilliMeter,4,16);//显示距离值}						}delay_ms(200);//等待200ms	}		
}

4.实验效果

在这里插入图片描述

九.小结

VL53L0X在激光自动对焦,测距和接近检测,深度映射和AR/VR中有广泛的应用,学会VL53L0X可以在这些应用场景可以发挥作用。

http://www.lryc.cn/news/464431.html

相关文章:

  • fastjson注解说明,fastjson注解有那些?fastjson是java的json序列化和反序列化工具包
  • VIT:论文关键点解读与常见疑问
  • ArcGIS无插件加载(无偏移)在线天地图高清影像与街道地图指南
  • 工业相机选型(自用笔记)
  • 【网安笔记】4种拒绝服务攻击
  • WPF 的组件数据绑定详解
  • 房子,它或许是沃土
  • 【Golang】Go语言http编程底层逻辑实现原理与实战
  • SOLIDWORKS参数化软件
  • 上位机开发常用技术 C# Task 线程 开始,暂停,继续,停止
  • MySQL 密码忘记了怎么办?
  • Java中常见的自带数据结构类
  • 数据结构——链表,哈希表
  • 如何使用Python对Excel、CSV文件完成数据清洗与预处理?
  • 第8篇:网络安全基础
  • Flutter 中的 PopScope 小部件:全面指南
  • 视频剪辑的未来
  • 通过PHP与API的结合,开启电商数据集成的新篇章
  • 使用 CDN 后 Apache 的日志记录客户真实 IP
  • ORACLE 19C安装 RAC报错
  • 省心英语 3.9.9| 资源最全面的英语学习App
  • ruoyi框架动态切换数据库
  • iba Data Export 导出面板选项
  • 过滤器Filter的介绍和使用
  • JMeter之mqtt-jmeter 插件介绍
  • Nacos2.3.2在ubuntu中的部署
  • Xilinx远程固件升级(一)——QuickBoot方案
  • O(1)调度算法与CFS
  • SpringBoot——静态资源访问的四种方式
  • WPF中的Style如何使用