资讯详情

【飞控开发基础教程8】疯壳·开源编队无人机-I2C(激光测距)

COCOFLY教程 ——疯壳·无人机·系列 I2C(激光测距)

图1 一、VL53L1X 简介 VL53L1X 属于 STMicroelectronics 即常说的意法半导体(ST)公司推出的 FlightSense? 产品系列 ToF(Time of flight)激光测距传感器。 VL53L1X 它是市场上最快的微型 ToF 传感器具有精确的测距能力 4 米,测距频率快到 50 Hz。单光子雪崩二极管采用微型可回流焊封装 (SPAD)接收阵列,一个 940nm 不可见激光 1 类发射器、物理红外滤波器和光学器件可在各种环境照明条件下实现最佳测距性能,并提供一系列覆盖窗口选择。 由于包装小,很容易集成到设备中。不同于传统的红外传感器, VL53L1X 采用 ST 最新一代 ToF 无论目标颜色和反射率如何,技术都可以进行绝对距离测量。还可以对接收阵列上的 ROI编程大小(感兴趣区域)以减少传感器 FoV(视角)。VL53L1X 激光测距传感器的实物图如下图所示。 图2 二、I2C 概述 Inter-Integrated Circuit,缩写为内部集成电路接口 IIC 或 I2C。IIC 总线是一种由 PHILIPS 连接微控制器及其外围设备的公司开发的两线串行总线。I2C 总线的物理连接非常简单,分别由 SDA(串行数据线)和 SCL(串行时钟线)和上拉电阻。通信原理是正确的 SCL 和 SDA 控制线高低电平时序, 来产生 I2C 数据传输是总线协议所需的信号。当总线处于空闲状态时,这两条线通常被上面连接的上拉电阻拉高,以保持高电平。如下图所示,单片机和单片机 I2C接口传感器之间的通信图。 图3 三、I2C 总线协议 对 I2C 总线的操作实际上是设备之间的读写操作。大致可分为以下两种操作: 首先,主设备从设备中写数据。数据传输格式如下:

图4 二是主设备从设备中读取数据。数据传输格式如下: 图5 实际上把 I2C 协议分开后,其组成包括始条件、终止条件、地址段、数据段、响应 ACK、非响应 NACK。 (1)START 和 STOP,主机的起始和终止条件是由主机决定的(master)启动产生。总线起步后处于忙碌状态,停止后处于空闲状态。 图6 起始条件:SCL 线是高电平时,SDA 从高电平到低电平切换线路。停止条件:SCL 线是高电平时,SDA 从低电平到高电平切换线。 (2)地址段由地址段组成 7bit 地址 读写位组成,一个 7-bit 地址从最高位置(MSB) 开始发送,地址后面会跟着 1-bit(R/W)的操作符,1 表示读操作,0 表示写作操作。 下一个 bit 是 NACK/ACK,在这个帧的前面 8 bit 接收端的设备发送后获得 SDA 此时,接收设备应在第一位 9 在时钟脉冲之前,回复一个 ACK(将 SDA 如果没有接收设备,则表示接收正常SDA 拉低,这意味着接收设备可能没有收到数据(如设备不存在或设备繁忙) 或者无法分析收到的消息,如果是这样的话,由 master 决定如何处理,比如停止。 图7 (3)数据段,SDA 数据线上的每个字节都必须是 8 每次传输的字节数量没有限制。每个字节后必须有响应位(ACK)。首先传输的数据是最高的 (MSB),SDA 数据必须在上面 SCL 高电平周期时保持稳定,数据的高低电平翻转变化发生在 SCL 低电平时期。 图8 以传输 Byte:1010 1010 (0xAAh)为例,SDA SCL 传输时序如下所示: 图9 (4)响应 ACK(Acknowledge)和非响应 NACK(Not Acknowledge), 每个字节传输必须有响应位,相关响应时钟也由主机产生,在响应时钟脉冲期间(第一 9 时钟周期),发送端释放 SDA 线,接收端把 SDA 拉低。以上图传输 101010101 为例,SCL 第 9 位时钟高电平信号期间,SDA 拉低代表有ACK响应位。当在 SCL 第 9 位时钟高电平信号期间,SDA 这种情况被定义为仍然保持高电平 NACK 非响应位。在这种情况下,主机可以直接生成 STOP 条件终止后的传输或继续重新 START 开始新的传输。会出现以下情况 NACK 位: a、接收器无发送机响应地址,接收器无任何响应地址 ACK 发送给发射机; b、由于接收机处理实时程序繁忙,无法接收或发送; c、在传输过程中,接收器无法识别发送机的数据或命令; d、接收机无法接收; e、主机读取数据后,主机应发送数据 NACK 最后通知机器。以下图例代表 NACK 时序: 图10 根据 I2C 以传感器的地址为基础,可以得到协议分解的各个部分的读写时序图 0x09 寄存器写入两个字节 0x02 和 0x84 例如,该过程的时序图如下图所示。 图11 以传感器地址为基础 0x09 在寄存器中读取两个字节 0x02 和 0x84 为例, 时序图如下所示。 图12 四、激光测距实验 激光测距实验使用STM32 的GPIO 模拟I2C 激光测距模块VL53L1X 连接,串口 1 即UART1,通过 USB 将计算机连接到转串口模块 I2C 获取到的VL53L1X的距离值(mm 为单位)通过串口 1 串口调试助手端的串口调试助手显示。做这个实验的时候,需要暂时取下视觉模块,把它拿走 USB 连接到视觉模块接口的转弦线。激光测距模块 VL53L1X 杜邦线和 SH1.0 接口连接到主板 USART3(这里使用接口 GPIO 模拟 I2C)如下图所示。 图13 根据原理图,可以看到 VL53L1X 的 I2C 接口是:PB10、PB如下图所示。 图14 串口 1 可参考串口(基本收发),配置代码(通过调用官方库)。 VL53L1X 编写测距数据代码的思路如下: 代码思路 表1 模拟 I2C 的 GPIO 初始化代码如下: 图15 VL53L1X 初始代码如下。 图16 VL53L1X 测距代码如下。 图17 每隔 5s 读取距离并发送到串口。代码如下所示。 图18 这里注意配置串口的发送,以便数量发送到电脑。串口 1 通过 USB 转串口模块接到电脑,保存、编译、下载代码,可以看到串口调试助手每隔 5s 在打印 VL53L1X 的 2 个字节的距离数据(mm 为单位),数据如下图所示:              图19          

    

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

标签: 1050nm发射二极管激光传感器vl53l1x850nm脉冲激光二极管

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台