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可以在这些应用场景可以发挥作用。
相关文章:
STM32传感器模块编程实践(九) VL53L0X激光红外测距传感器简介及驱动源码
文章目录 一.概要二.VL53L0X测距原理三.VL53L0X主要特性四.VL53L0X硬件参考设计五.模块接线说明六.模块通讯协议介绍七.光学盖玻片介绍八.STM32单片机与VL53L0模块实现距离测量实验1.硬件准备2.软件工程3.软件主要代码4.实验效果 九.小结 一.概要 VL53L0X是一款由ST࿰…...
fastjson注解说明,fastjson注解有那些?fastjson是java的json序列化和反序列化工具包
fastjson注解说明,fastjson注解有那些?fastjson是java的json序列化和反序列化工具包 包版本说明 fastjson请使用1.2.83以上版本,小于这个版本的存在漏洞。 fastjson请使用1.2.83以上版本,小于这个版本的存在漏洞。 fastjson请使用1.2.83以上版本,小于这个版本的存在漏洞…...
VIT:论文关键点解读与常见疑问
VIT贡献点: 1. 首次将 Transformer 应用于图像识别任务 核心贡献:ViT 论文的最大贡献是提出将原本用于自然语言处理(NLP)的 Transformer 架构成功应用于图像任务。传统的计算机视觉模型主要依赖卷积神经网络(CNN&…...
ArcGIS无插件加载(无偏移)在线天地图高清影像与街道地图指南
在地理信息系统(GIS)的应用中,加载高清影像与街道地图对于地图制图、影像查阅、空间数据分析等工作至关重要。天地图作为官方出品的地图服务,以其标准的数据、较快的影像更新速度等特点受到广泛欢迎。以下是如何在ArcGIS中无插件加…...
工业相机选型(自用笔记)
可参考链接: 相机和镜头选型需要注意哪些问题_靶面尺寸-CSDN博客 工业相机选型方法_ccd工业相机选型步骤-CSDN博客 1、相机 1.1 传感器类型(CCD/CMOS) CCD相机: 1)目标是运动的则优先考虑。 2)需要高质量图像,如进行…...
【网安笔记】4种拒绝服务攻击
目录 一、SYN Flood 攻击 二、UDP Flood 攻击 三、ICMP Flood 攻击 四、HTTP Flood 攻击 拒绝服务攻击(Denial of Service attack,简称 DoS 攻击)是指攻击者通过向目标服务器或网络发送大量的请求,使其资源耗尽,无…...
WPF 的组件数据绑定详解
Windows Presentation Foundation(WPF)是微软推出的一种用于构建 Windows 应用程序的 UI 框架。WPF 提供了强大的数据绑定功能,能够轻松地将 UI 控件与数据源连接,从而实现富用户体验,分离前端设计和业务逻辑。本文将详…...
房子,它或许是沃土
刚成家,来客时,它是客房 成家后,没小孩,它是书房 有小孩,未分房,它暂且是书房 孩子大些,它是孩子们埋下梦想种子,生根发芽的地方...
【Golang】Go语言http编程底层逻辑实现原理与实战
✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…...
SOLIDWORKS参数化软件
在产品设计和工程领域,参数化设计是一种革命性的方法,它允许设计者通过定义一系列规则和关系来创建和修改模型。参数化设计的核心在于将设计过程分解为一系列可调整的参数,如尺寸、形状、材料属性等,这些参数之间通过数学关系相互…...
上位机开发常用技术 C# Task 线程 开始,暂停,继续,停止
上位机开发中一定会用到的技术就是 设备的线程开始运行执行生产流程,在生产过程中会有要打开安全门或暂停设备动作,人为去排除设备小问题的时就要用到暂停功能,问题排除后设备继续运行,生产完成后设备停止。 这些操作是上位机开发…...
MySQL 密码忘记了怎么办?
在使用 MySQL 的过程中,有时候我们可能会忘记密码。别担心,本文将详细介绍在 Windows 系统下如何重新设置 MySQL 密码。 一、停止 MySQL 服务 打开“服务”窗口,可以通过在 Windows 搜索栏中输入“服务”来找到并打开它。在服务列表中找到“…...
Java中常见的自带数据结构类
目录 一、ArrayList(动态数组) 特性 常用方法 二、LinkedList(双向链表) 特性 常用方法 三、ArrayDeque(双端队列) 特性 常用方法 四、HashMap(哈希表) 特性 常用方法 五、TreeMap&…...
数据结构——链表,哈希表
文章目录 链表python实现双向链表复杂度分析 哈希表(散列表)python实现哈希表哈希表的应用 链表 python实现 class Node:def __init__(self, item):self.item itemself.next Nonedef head_create_linklist(li):head Node(li[0])for element in li[1…...
如何使用Python对Excel、CSV文件完成数据清洗与预处理?
在数据分析和机器学习项目中,数据清洗与预处理是不可或缺的重要环节。 现实世界中的数据往往是不完整、不一致且含有噪声的,这些问题会严重影响数据分析的质量和机器学习模型的性能。 Python作为一门强大的编程语言,提供了多种库和工具来帮…...
第8篇:网络安全基础
目录 引言 8.1 网络安全的基本概念 8.2 网络威胁与攻击类型 8.3 密码学的基本思想与加密算法 8.4 消息认证与数字签名 8.5 网络安全技术与协议 8.6 总结 第8篇:网络安全基础 引言 在现代信息社会中,计算机网络无处不在,从互联网到局…...
Flutter 中的 PopScope 小部件:全面指南
Flutter 中的 PopScope 小部件:全面指南 在 Flutter 应用开发中,导航和路由管理是构建复杂应用时必须面对的挑战之一。PopScope 小部件是 Flutter 2.0 版本引入的一个新功能,它提供了一种更灵活的方式来控制页面的弹出和返回行为。本文将带你…...
视频剪辑的未来
技术发展推动4: 人工智能与自动化辅助:人工智能在视频剪辑中的应用将不断深化。例如,智能剪辑软件能够自动分析视频素材的内容、情感和节奏,快速生成初步的剪辑版本,剪辑师在此基础上进行进一步的优化和调整࿰…...
通过PHP与API的结合,开启电商数据集成的新篇章
在数字化转型的浪潮中,电子商务数据的集成对于企业来说变得越来越重要。无论是在线零售商还是品牌商,都需要实时访问商品数据以优化库存管理、制定定价策略、提升客户体验。PHP,作为服务端脚本语言的佼佼者,为开发者提供了强大的工…...
使用 CDN 后 Apache 的日志记录客户真实 IP
经常搭建网站服务器的都知道,在给站点使用了 CDN 后 Web 应用的日志记录里就会只记录 CDN 节点 IP 了,这就没法看到真实客户请求 IP,对于日志分析、运维日常维护来说就有点儿麻烦了,今天明月结合在五洛云服务器上搭建的Apache环境…...
铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...
挑战杯推荐项目
“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 - 个性化梦境…...
椭圆曲线密码学(ECC)
一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...
关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
JVM垃圾回收机制全解析
Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...
12.找到字符串中所有字母异位词
🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...
Java + Spring Boot + Mybatis 实现批量插入
在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法:使用 MyBatis 的 <foreach> 标签和批处理模式(ExecutorType.BATCH)。 方法一:使用 XML 的 <foreach> 标签ÿ…...
代码随想录刷题day30
1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...
