《【飞控开发基础教程8】开源编队无人机-I2C(激光测距).docx》由会员分享,可在线阅读,更多相关《【飞控开发基础教程8】开源编队无人机-I2C(激光测距).docx(14页珍藏版)》请在第一文库网上搜索。
1、COCOFLY教程疯壳无人机系列目录一、VL53L1X 简介1二、12c 概述1三、12c总线协议2四、激光测距实验5Al开源编队无人机Al OPEN SOURCE FORMATION DRONE高级功能猴飞WIFlSft控制巳激光气压双定高公遥控控制飞行光流定点IH视宽追踪圈码O有头无头双模式视觉追踪族色S3D翻灌4)视觉追监形状a 。自主巡线AI语音控创飞行OOO 旨视觉飕随图形化多机支持图形化移动小车编队飞行 编程视频地址:http:www. fengke. clubI2C (激光测距)一、VL53L1X 简介VL53L1X属于STMicroelectronics即常说的意法半导体(ST
2、)公司推出的FlightSense产品系列ToF(Time of flight)激光测距传感器。VL53L1X是目前市场上最快的微型ToF传感器,精确测距能力达4米,测距频率快至50 Hz。它采用微型、可回流焊封装,集成了一个单光子雪崩二极管(SPAD)接收阵列、一个940nm不可见激光1类发射器、物理红外滤波器和光学器件,可在各种环境照明条件下实现最佳测距性能,并提供一系列覆盖窗口选择。由于封装小巧,因此它很容易集成到设备中。与传统的红外传感器不同,VL53L1X采用ST最新一代ToF技术,无论目标颜色和反射率如何,都可以进行绝对距离测量。还可以对接收阵列上的R0I (感兴趣区域)大小进行编
3、程,从而减小传感器FoV (视场角)o VL53L1X激光测距传感器的实物图如下图所示。二、12c概述Inter-Integrated Circuit,即内部集成电路接口,缩写为IIC或I2C。HC总线是一种由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。12c总线在物理连接上非常简单,分别由SDA(串行数据线)和SCL(串行时钟线)及上拉电阻组成。通信原理是通过对SCL和SDA线高低电平时序的控制,来产生12c总线协议所需要的信号进行数据的传递。在总线空闲状态时,这两根线一般被上面所接的上拉电阻拉高,保持着高电平。如下图所示为单片机与I2C6接口的传感器之间通信示意图
4、O三、12c总线协议对12c总线的操作实际就是主从设备之间的读写操作。大致可分为以下两种操作情况:第一,主设备往从设备中写数据。数据传输格式如下:数据传输(N字节+应答iS 从设备地址WACK数据 ACK数据 ACK Pi t t t 1 rj起始条件写应答应答应音僖止条件第二,主设备从从设备中读数据。数据传输格式如下:(N字节+应答) NACK/ACK,当这个帧中前面8 bit发送完后,接收端的设备获得SDA控制权,此时接收设备应该在第9个时钟脉冲之前回复一个ACK (将SDA拉低)以表示接收正常,如果接收设备没有将SDA拉低,则说明接收设备可能没有收到数据(如寻址的设备不存在或设备忙)或无
5、法解析收到的消息,如果是这样,则由master来决定如何处理,比如:停止。Lu START ADDRESSSDASCLdata linestable;data validchangeof dataallowedIII IIII IIII I.JR/W ACKDATAACKDATAACK STOP(3)数据段,SDA数据线上的每个字节必须是8位,每次传输的字节数量没有限制。每个字节后必须跟一个响应位(ACK)。首先传输的数据是最高位(MSB), SDA上的数据必须在SCL高电平周期时保持稳定,数据的高低电平翻转变化发生在SCL低电平时期。以传输Byte: 1()1() 101() (OxAAh)
6、为例,SDA SCL传输时序如下所示:SCISDA,一人、 111 111 111 131 111 111 111 mwwwixo 1 1 0 0 1 0 ACKfTTl: fO; ; i i rByte: 1010 1010 ( OxAAh )(4)响应 ACK (Acknowledge)和非响应 NACK (Not Acknowledge),每个字节传输必须带响应位,相关的响应时钟也由主机产生,在响应的时钟脉冲期间(第9个时钟周期),发送端释放SDA线,接收端把SDA拉低。以上图传输101010101为例,SCL第9位时钟高电平信号期间,SDA拉低其代表了有ACK响应位。当在SCL第9位时
7、钟高电平信号期间,SDA仍然保持高电平,这种情况定义为NACK非响应位。这种情况下,主机可以直接产生STOP条件终止以后的传输或者继续重新START开始一个新的传输。以下情况会导致出现NACK位:a、接收机没有发送机响应的地址,接收端没有任何ACK发送给发射机;b、由于接收机正在忙碌处理实时程序导致接无法接收或者发送;c、传输过程中,接收机识别不了发送机的数据或命令;d、接收机无法接收;6、主机接收完成读取数据后,要发送NACK结束告知从机。以下图例代表NACK时序:根据I2C协议分解的各个部分,可得出读和写的时序图,以向某传感器的地址为0x09的寄存器写入两个字节0x02和0x84为例,如下
8、图所示为该过程时序图。sclkJ juultuultl l uuuLruuuuUuvLruuuinjqW11111111111r JsdataLn丛设备地址(写模式)开始ACKACKoooo ooioACK1000 0100停止以从某传感器的地址为0x09的寄存器中读出两个字节0x02和0x84为例,该时序图如下所示。R/W=OR/W-Isclkj JUUUU1TLT.uuuutnjuuiKnruuuuuuLTLn|njuuuLnJUL|jjjsDAirfLT丛遍地址(写模式)开始ACKR”以09ACK 开始ACK0000 001010000100NACK停止四、激光测距实验激光测距实验使用S
9、TM32的GPIO模拟12c与激光测距模组VL53L1X相连接,串口 1即UART1,通过USB转串口模块连接电脑,把I2C获取到的VL53L1X的距离值(mm为单位)通过串口 1传输到电脑端的串口调试助手显示出来。做该实验的时候需要把视觉模组暂时取下,并且把USB转串口的线接到视觉模组接口处。激光测距模组VL53L1X在无人机支架底部,杜邦线和SH1.0接口接到主板上的USART3 (这里用该接口的GPIO模拟12C)的接口上,如下图所示。根据原理图,可以看到VL53L1X的12c接口分别是:PB10、PB11,如下图所示。9USART3J8M9 11TX2 RX2 TT13AT 14SCK
10、 IFMISO kMOSI 17LED? 29TX 3yrx 7n吧 至6P 3FDiOC1X 3;PAQKUP?B0PA!PB1PA2BOOT1PB2PA3JTDOPB3PA4JXTRSTPB4PA5PBSPA6PB6PA7PB720 CE沙 灰40 M4 八4】M,42 MO43M1BATXRSTOSC IN PDOOSC 二OUTPD1BOOTOPASPA9.VSART1 TXPAIOVSARTLRXPA11PAI2PAD JTM&SWDIOPA14JTCK.SWCLKPA!5 JTDIPBSPB9USART3 TXPB10USART3 RXPBllPB12PB13PB14PB156TA
11、MPER RTC PC BOSC52 1NPC14OSC32 OUTPC1545 M246 M321 TX322 RX325 CSN26 csi27 cs228 CS32 LED3回厂VDDlWD2VDD31 2-3一冷vssV” .二.串口 1的配置可以参考串口(基础收发),配置代码(通过调用官方库)。获取VL53L1X的测距数据代码编写的思路如下:代码思路1管脚配置1、定义结构体;2、使能时钟;3、填充结构体;4、装载结构体。2I2C读写逻辑1、12c各个时序逻辑;2、读一个字节;3、写一个字节;4、读多个字节;5、写多个字节。4VL53L1X 驱动1、VL53L1X 初始化;2、测距逻辑
12、实现。模拟12c的GPIO初始化代码如下:初始化iicvoid vl53IICInit(void)(GPIO_InitTypeDef GPI0_InitStructure;RCC_.PB2PeriphClockCmd(RCC_I2C , ENABLE );34 -.0 678901234 5 6789O12Q11111112222222222333QGPI0_InitStructure. GPI0_Pin = I2C_Pin_SCL;GPI0_InitStructure. GPIO_Speed = GPI0_Speed_50MHz;GPI0_InitStructure. GPI0_Mode = GPI0_Mode_0ut_0D;GPI0_Init(GPI0_I2C, &GPI0_InitStructure);GPI0_InitStructure. GPI0_Pin = I2C_Pin_SDA;GPI0_InitStructure. GPIO_Speed = GPI0_Speed_50MHz;GPI0_InitStructur