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

ESP32应用教程(1)— VL53L3CX距离传感器

文章目录

前言

1 产品概述

1.1 技术规格

1.2 系统框图

1.3 设备引脚分布

2 工作流程

2.1 系统功能描述

2.2 状态机描述

2.3 测距模式说明

3 控制接口

3.1 设备地址

3.2 I²C写1个字节数据

3.3 I²C读1个字节数据

3.4 I²C写多个字节数据

3.5 I²C读多个字节数据

3.6 I²C 接口 - 参考寄存器

4 代码说明

4.1 下载编译

4.2 代码结构

5 波形分析


前言

本文介绍了在 ESP32 DEVKIT V1 开发板上开发 VL53L3CX 距离传感器的过程。


VL53L3CX 是意法半导体的最新飞行时间(ToF)产品,并嵌入了意法半导体的第三代 FlightSense 专利技术。它结合了高性能的接近和测距传感器,具有多目标距离测量和自动污点校正功能。微型可回流封装集成了单光子雪崩二极管(SPAD)阵列和物理红外滤光片,在各种环境照明条件下实现最佳测距性能,并配有各种盖片。

VL53L3CX 结合了高性能接近传感器的优点、出色的近距离线性度以及高达 3m 的测距能力。

凭借获得专利的算法和巧妙的模块构造,VL53L3CX 还能够通过深度检测视野(FoV)内的不同对象。意法半导体的直方图算法允许覆盖玻璃的串扰抗扰度超过 80cm,并具有动态污迹补偿功能。

  • 完全集成的小型化模块
    • 发射器:940nm 不可见激光(VCSEL)及其模拟驱动器;
    • 运行进阶数字固件的低功耗微控制器;
    • 尺寸:4.4 x 2.4 x 1 mm
  • 快速,精确测距
    • 基于直方图技术;
    • 完整视野(FoV)时,高达 300cm+ 的检测范围;
    • 使用专利算法(直接 ToF)可以远距离覆盖玻璃串扰和指纹污迹;
    • 动态指纹污迹补偿;
    • 短距离,高精度线性;
    • 多目标检测和距离测量。
  • 典型全视野:25°
  • 方便集成
    • 可回流组件;
    • 提供零件间或通用形状串扰校准;
    • 单电源;
    • 适用于多种类型的覆盖玻璃材料;
    • I²C 接口(可达 1MHz);
    • Xshutdown 复位并中断 GPIO 以优化测距操作;
    • 包含 CLinux 全套软件驱动程序。

1 产品概述

1.1 技术规格

1.2 系统框图

1.3 设备引脚分布

2 工作流程

2.1 系统功能描述

下图显示了系统级功能说明。客户主机应用程序使用应用编程接口 (API) 控制设备。API 的实现以驱动程序(裸 C 代码或 Linux 驱动程序)的形式交付给客户

驱动程序与客户应用程序共享一套高级功能,可控制设备固件,如初始化、范围启动/停止、设置系统精度等。

用户的应用程序调用 API 中的函数,然后 API 通过 IICVL53L3CX 中的固件(Firmware)进行通信,固件再操作硬件。

2.2 状态机描述

下图显示了设备状态机。

上电以后,VL53L3CX 会进入 Hw Standby 状态,这是待机状态,功耗很低。然后拉高 XSHUT脚,让 VL53L3CX 进入 Initial Boot 状态,自动进入软件待机状态。主机初始化开始,准备校准。如果不需要待机状态,可以把 XSHUT 接到 AVDD 上。VL53L3CX 处于休眠状态是不能进行 IIC 通信的。

2.3 测距模式说明

VL53L3CX 的专用运行模式(称为 "预设")是 "测距模式"。在该模式下,软件驱动程序提供了统包功能,可在所有客户应用中快速、轻松地进行测距: 测距模式是获得 VL53L3CX 最佳功能的配置。

  • 测距模式对 80cm 以外的盖板玻璃串扰和污点具有本机抗扰度。利用获得专利的算法(直接 ToF),可以进行时间滤波,将串扰信号与距离大于 80cm 的物体信号区分开来。现在,与市场上的其他传感器不同,在盖上玻璃的情况下,可以实现 300cm 的同类最佳测距性能,而且无需任何计算;
  • 测距模式可同时检测 FoV 内的多个物体。软件驱动程序最多可同时输出四个范围,以显示物体的范围。详情请查阅最新的软件驱动程序手册 了解更多详情;
  • 调用驱动函数后,默认以 30Hz 的频率执行测距操作(典型测距操作持续 33ms。它包括内部内务管理、测距和后处理。

3 控制接口

本节介绍控制接口。I²C 接口使用两个信号:串行数据线 (SDA) 和串行时钟线 (SCL)。连接到总线上的每个设备都使用唯一的地址,存在简单的主/从关系。

SDASCL 线路均通过主机上的上拉电阻与正电源电压相连。当线路处于浮动状态,上拉电阻器将线路拉高时,线路处于高电平状态。当没有数据传输时,两条线路均为高电平。

时钟信号 (SCL) 由主设备生成。主设备启动数据传输。产品设备上的 I²C 总线最大速度为1Mbits/s,默认设备地址为 0x52

信息以 8 位数据包(字节)的形式打包,后面总是跟着一个确认位,Ac 表示 VL53L3CX 确认,Am 表示主确认(主机总线主控)。内部数据通过在 SCL 上升沿采样 SDA  产生。外部数据必须在 SCL 的高电平期间保持稳定。但在 SCL 为高电平时,SDA 分别下降或上升时的启动 (S) 或停止 (P) 条件除外。

报文包含一系列字节,前面是启动条件,后面是停止或重复启动(另一个启动条件,但前面没有停止条件),然后是另一条报文。第一个字节包含设备地址(0x52),并指定数据方向。如果最低有效位为低位(即 0x52),则报文是主从写入。如果 LSB 被置位(即 0x53),则信息是主从读取

3.1 设备地址

VL53L3CX 模块的 I²C 通讯地址是 0x52

3.2 I²C写1个字节数据

与飞行时间传感器的所有串行接口通信必须以启动条件开始。VL53L3CX 模块通过将 SDA 线变为低电平来确认收到有效地址。读/写位(地址字节的 LSB)的状态将被存储,并可解释从 SDA 采样的下一个数据字节。在写入序列中,接收到的第二个字节提供一个 16 位索引,该索引指向一个内部 8 位寄存器。

从站接收到数据后,逐位写入串行/并行寄存器。从站接收到每个数据字节后,都会产生一个确认。然后,数据将被存储到由当前索引寻址的内部寄存器中。

在读取信息期间,当前索引所寻址寄存器的内容将在设备地址字节之后的字节中读出。该寄存器的内容被并行加载到串行/并行寄存器中,并通过 SCL 的下降沿从设备中时钟输出。

3.3 I²C读1个字节数据

在读取和写入信息序列中,每个字节结束时,接收设备都会发出确认(即 VL53L3CX 设备为写入,主机为读取)。

3.4 I²C写多个字节数据

总线主站只能通过发出停止条件或在读取操作过程中读取完整字节后发出负确认(即不将 SDA 线路拉低)来终止报文。接口还支持自动递增索引。因此,主站可以连续向从站发送数据字节,直到从站无法提供确认,或者主站通过停止条件终止写入通信。如果使用自动递增功能,主站就不必在发送数据字节时同时发送地址索引。

3.5 I²C读多个字节数据

3.6 I²C 接口 - 参考寄存器

下表所示寄存器可用于验证用户 I²C 接口。

4 代码说明

4.1 下载编译

1. 下载代码

git clone https://github.com/EmotionFly/ESP32_VL53L3CX.git
cd ESP32_VL53L3CX

2. 获取 esp-idf 库的环境

. $HOME/esp/esp-idf/export.sh

3. 编译—>下载—>监控

idf.py flash monitor

4.2 代码结构

1. 先确定测量数据是否已准备就绪。

VL53L1_GetMeasurementDataReady(&dev, &dataReady);

VL53L1_Error VL53L1_GetMeasurementDataReady(VL53L1_DEV Dev,uint8_t *pMeasurementDataReady)
{VL53L1_Error Status = VL53L1_ERROR_NONE;LOG_FUNCTION_START("");Status = VL53L1_is_new_data_ready(Dev, pMeasurementDataReady);LOG_FUNCTION_END(Status);return Status;
}

本质是访问 GPIO__TIO_HV_STATUS(0x0031) 寄存器的数据。

2. 获取测量数据。

VL53L1_GetRangingMeasurementData(&dev, &rangingData);

VL53L1_Error VL53L1_GetRangingMeasurementData(VL53L1_DEV Dev,VL53L1_RangingMeasurementData_t *pRangingMeasurementData)
{VL53L1_Error Status = VL53L1_ERROR_NONE;VL53L1_range_results_t       results;VL53L1_range_results_t       *presults = &results;VL53L1_range_data_t *presults_data;LOG_FUNCTION_START("");/* Clear Ranging Data */memset(pRangingMeasurementData, 0xFF,sizeof(VL53L1_RangingMeasurementData_t));/* Get Ranging Data */Status = VL53L1_get_device_results(Dev,VL53L1_DEVICERESULTSLEVEL_FULL,presults);if (Status == VL53L1_ERROR_NONE) {pRangingMeasurementData->StreamCount = presults->stream_count;/* in case of lite ranging or autonomous the following function* returns index = 0*/presults_data = &(presults->data[0]);Status = SetSimpleData(Dev, 1,presults->device_status,presults_data,pRangingMeasurementData);}LOG_FUNCTION_END(Status);return Status;
}

本质是访问 RESULT__RANGE_STATUS(0x0089)和 RESULT__FINAL_CROSSTALK_CORRECTED_RANGE_MM_SD0(0x0096)寄存器的数据。

3. 系统中断清零

本质是将 SYSTEM__INTERRUPT_CLEAR(0x0086) 寄存器置 1

5 波形分析

相关文章:

ESP32应用教程(1)— VL53L3CX距离传感器

文章目录 前言 1 产品概述 1.1 技术规格 1.2 系统框图 1.3 设备引脚分布 2 工作流程 2.1 系统功能描述 2.2 状态机描述 2.3 测距模式说明 3 控制接口 3.1 设备地址 3.2 IC写1个字节数据 3.3 IC读1个字节数据 3.4 IC写多个字节数据 3.5 IC读多个字节数据 3.6 IC…...

Redis从基础到进阶篇(一)

目录 一、了解NoSql 1.1 什么是Nosql 1.2 为什么要使用NoSql 1.3 NoSql数据库的优势 1.4 常见的NoSql产品 1.5 各产品的区别 二、Redis介绍 2.1什么是Redis 2.2 Redis优势 2.3 Redis应用场景 2.4 Redis下载 三、Linux下安装Redis 3.1 环境准备 3.2 Redis的…...

postgresql的基本使用

添加字段 ALTER TABLE AAF_SYS_PARAM ADD REFER_ID VARCHAR(64); ALTER TABLE AAF_SYS_PARAM ADD OPTION_JSON VARCHAR(3000);COMMENT ON COLUMN AAF_SYS_PARAM.REFER_ID IS 关联节点ID; COMMENT ON COLUMN AAF_SYS_PARAM.OPTION_JSON IS 选择项枚举json; 修改字段 ALTER T…...

ABC 258 G Triangle(bitset 优化)

ABC 258 G Triangle(bitset 优化) ABC 258 G Triangle 大意&#xff1a;给出一个邻接矩阵 &#xff0c;用来记录两两元素间是否连接 &#xff0c; 计算其中三元环的数目。 思路&#xff1a; 不妨先想暴力解法 for(int i 1 ; i < n ; i ){for(int j i 1 ; j < n ;…...

使用StreamLold写入 Starrocks报错:Caused by org

问题描述 使用StreamLoad写入Starrocks报错&#xff0c;报这个错误:Caused by: org.apache.http.ProtocolException: Content-Length header already present 代码案例 引入依赖 <!-- Starrocks使用StreamLoad发送Http请求 --><dependency><groupId>or…...

WX1860- ngbe-1.2.5 xdp程序在路由模式下,使用iperf工具测试数据包不转发,用jmeter可以

本地验证时重定向iperf包有出现calltrace错误&#xff0c;经推断&#xff0c;系统PAGE_SIZE<8k时可能出现&#xff08;getconf PAGE_SIZE指令可查看&#xff09;&#xff0c;按下图将ngbe_main.c的2350行ngbe_rx_bufsz改为ngbe_rx_pg_size可修复。其次&#xff0c;需要将加载…...

PHPStudy 安装tp8 php8.2.9 安装XDbug、redis扩展

一、PhpStudy升级PHP版本&#xff0c;安装PHP8.2操作步骤 1.1、官网下载最新的php版本 打开Windows版的官网下载&#xff0c;地址&#xff1a;https://windows.php.net/download/ 页面上有不同的PHP版本&#xff0c;这里我们下载的是64位nts版的PHP8.2.9。 1.2、解压下载的文…...

结构体指针和结构体数组指针

结构体指针和结构体数组指针是不同的类型。 结构体指针定义&#xff1a;Student *stu 结构体指针的步长是一个结构体的大小&#xff1b; 结构体数组指针定义&#xff1a;Student (*stu)[] 结构体数组指针的步长是整个结构体数组的大小。 例程&#xff1a; #include <stdio…...

libdrm全解析二十 —— 源码全解析(17)

接前一篇文章&#xff1a;libdrm全解析十九 —— 源码全解析&#xff08;16&#xff09; 本文参考以下博文&#xff1a; DRM 驱动程序开发&#xff08;VKMS&#xff09; 特此致谢&#xff01; 本文继续对include/drm/drm.h中实际功能宏定义进行讲解。 29. DRM_IOCTL_SET_MAS…...

基于docker搭建owncloud Harbor 构建镜像

环境介绍&#xff1a;ContenOS7.9 docker17.12.1-ce 使用mysql:5.7和 owncloud 镜像&#xff0c;构建一个个人网盘。 docker pull owncloud #拉取镜像 docker pull mysql5.7 创建容器 docker run --name owncloud-mysql -p 3306:3306 -e MYSQL\_ROOT\_PASSWORDroot …...

往Buildroot中增加Qt项目

前言 目的&#xff1a;应用开发时最初是没有和buildroot中一起编译时&#xff0c;后面应用程序写的差不多时&#xff0c;同事问我怎么把应用程序打包到文件系统中&#xff0c;然后发布时跟随文件系统一起发布&#xff0c;并且增加打包启动脚本。所以本文在已经可以单独编译的基…...

C#-Tolewer和ToUpper的使用

目录 简介: 好处:​ 过程: 总结&#xff1a; 简介: 字符串是不可变的&#xff0c;所以这些函数都不会直接改变字符串的内容&#xff0c;而是把修改后的字符串的值通过函数返回值的形式返回。 ToLower和ToUpper是字符串处理函数&#xff0c;用于将字符中的英文字母转换为小…...

RabbitMQ集群搭建和测试总结_亲测

RabbiMQ简介 RabbitMQ是用Erlang开发的&#xff0c;集群非常方便&#xff0c;因为Erlang天生就是一门分布式语言&#xff0c;但其本身并不支持负载均衡。 RabbitMQ模式 RabbitMQ模式大概分为以下三种: (1)单一模式。 (2)普通模式(默认的集群模式)。 (3)镜像模式(把需要的队列…...

SQLSTATE[IMSSP]: The active result for the query contains no fields.

我的是SQL server 报错场景&#xff0c;代码&#xff1a; $psendmx_sql"SET IDENTITY_INSERT PSENDMX ON;INSERT INTO psendmx (DJBH,MIBH,MXBH,SPDM,GG1DM,GG2DM,SL,SL_2,CKJ,ZK,DJ,DJ_1,JE,HH) VALUES {$mx_values};SET IDENTITY_INSERT PSENDMX OFF;"; $a$db_er…...

在Flutter应用内部实现分屏功能

前言 这一次被要求实现屏幕上同时展示两个页面&#xff0c;并且两个页面的逻辑&#xff0c;功能互不影响&#xff0c;通俗一点讲就是在Flutter内部实现一个类似于分屏的功能&#xff0c;这可难不倒我。 方法 要在 Flutter 中实现一个屏幕的上半部分和下半部分展示不同的页面…...

Docker常用操作命令(二)

Docker常用操作命令(二) 11、进入容器 docker exec -it 容器名称or容器ID /bin/bash [rootzch01 ~]# docker exec -it 973ff3caff19 /bin/bash 退出容器 root973ff3caff19:/# exit 12、查看容器中的进程 docker top 容器名称or容器ID [rootzch01 ~]# docker top 973ff3c…...

vue3 tailwindcss的使用

首先安装依赖&#xff1a; npm install -D tailwindcsslatest postcsslatest autoprefixerlatestnpm i -D unocss 然后vite.config.ts中 引入 import Unocss from unocss/viteexport default defineConfig({plugins: [Unocss(),],})终端执行&#xff1a; npx tailwindcss in…...

redis 基础篇(redis 理解)

目录 redis 特性介绍 redis 的一些特性&#xff08;优点&#xff09; 1. 在内存中存储数据 2. 可编程的 3. 可扩展 4. 持久化 5. 支持集群 6. 高可用 redis 的应用场景 数据库 作缓存 会话存储 作消息队列 redis 不适合做的事情 redis 介绍 redis 客户端形态 命…...

C++系列-函数重载

C系列-函数重载 函数重载函数重载的条件函数重载注意事项引用作为重载函数重载遇到默认参数 函数重载 函数名可以相同&#xff0c; 提高复用性 函数重载的条件 同一个作用域下函数名相同函数参数不同 – 参数个数不同 – 参数顺序不同 – 参数类型不同不可以使用返回值作为重…...

leetcode-23.合并k个升序链表-day17

...

19c补丁后oracle属主变化,导致不能识别磁盘组

补丁后服务器重启&#xff0c;数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后&#xff0c;存在与用户组权限相关的问题。具体表现为&#xff0c;Oracle 实例的运行用户&#xff08;oracle&#xff09;和集…...

LeetCode - 394. 字符串解码

题目 394. 字符串解码 - 力扣&#xff08;LeetCode&#xff09; 思路 使用两个栈&#xff1a;一个存储重复次数&#xff0c;一个存储字符串 遍历输入字符串&#xff1a; 数字处理&#xff1a;遇到数字时&#xff0c;累积计算重复次数左括号处理&#xff1a;保存当前状态&a…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命

在华东塑料包装行业面临限塑令深度调整的背景下&#xff0c;江苏艾立泰以一场跨国资源接力的创新实践&#xff0c;重新定义了绿色供应链的边界。 跨国回收网络&#xff1a;废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点&#xff0c;将海外废弃包装箱通过标准…...

【HTML-16】深入理解HTML中的块元素与行内元素

HTML元素根据其显示特性可以分为两大类&#xff1a;块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...

管理学院权限管理系统开发总结

文章目录 &#x1f393; 管理学院权限管理系统开发总结 - 现代化Web应用实践之路&#x1f4dd; 项目概述&#x1f3d7;️ 技术架构设计后端技术栈前端技术栈 &#x1f4a1; 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 &#x1f5c4;️ 数据库设…...

基于SpringBoot在线拍卖系统的设计和实现

摘 要 随着社会的发展&#xff0c;社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统&#xff0c;主要的模块包括管理员&#xff1b;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...

NPOI Excel用OLE对象的形式插入文件附件以及插入图片

static void Main(string[] args) {XlsWithObjData();Console.WriteLine("输出完成"); }static void XlsWithObjData() {// 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以HSSFWorkbook workbook new HSSFWorkbook();HSSFSheet sheet (HSSFSheet)workboo…...

逻辑回归暴力训练预测金融欺诈

简述 「使用逻辑回归暴力预测金融欺诈&#xff0c;并不断增加特征维度持续测试」的做法&#xff0c;体现了一种逐步建模与迭代验证的实验思路&#xff0c;在金融欺诈检测中非常有价值&#xff0c;本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...

Elastic 获得 AWS 教育 ISV 合作伙伴资质,进一步增强教育解决方案产品组合

作者&#xff1a;来自 Elastic Udayasimha Theepireddy (Uday), Brian Bergholm, Marianna Jonsdottir 通过搜索 AI 和云创新推动教育领域的数字化转型。 我们非常高兴地宣布&#xff0c;Elastic 已获得 AWS 教育 ISV 合作伙伴资质。这一重要认证表明&#xff0c;Elastic 作为 …...

xmind转换为markdown

文章目录 解锁思维导图新姿势&#xff1a;将XMind转为结构化Markdown 一、认识Xmind结构二、核心转换流程详解1.解压XMind文件&#xff08;ZIP处理&#xff09;2.解析JSON数据结构3&#xff1a;递归转换树形结构4&#xff1a;Markdown层级生成逻辑 三、完整代码 解锁思维导图新…...