《飞控开发基础教程8开源编队无人机I2C激光测距.docx》由会员分享,可在线阅读,更多相关《飞控开发基础教程8开源编队无人机I2C激光测距.docx(12页珍藏版)》请在第一文库网上搜索。
1、COCOF1Y教程疯壳无人机系列目录.1一、V15311X简介二、I2C概述三、I2C总线协议四、激光测距实验视频地址:http:/www.fengke.c1ubI2C(激光测距)一、V15311X简介V15311X属于STMiCrOe1eCtrOniCS即常说的意法半导体(ST)公司推出的F1ightSense产品系列TOF(Timeoff1ight)激光测距传感器。V15311X是目前市场上最快的微型TOF传感器,精确测距能力达4米,测距频率快至50Hz。它采用微型、可回流焊封装,集成了一个单光子雪崩二极管(SPAD)接收阵列、一个940nm不可见激光1类发射器、物理红外滤波器和光学器件,
2、可在各种环境照明条件下实现最佳测距性能,并提供一系列覆盖窗口选择。由于封装小巧,因此它很容易集成到设备中。与传统的红外传感器不同,V1531IX采用ST最新一代TOF技术,无论目标颜色和反射率如何,都可以进行绝对距离测量。还可以对接收阵列上的RoI(感兴趣区域)大小进行编程,从而减小传感器FoV(视场角)。V15311X激光测距传感器的实物图如下图所示。二、I2C概述Inter-IntegratedCircuit,即内部集成电路接口,缩写为UC或I2C。C总线是一种由PH11IPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。I2C总线在物理连接上非常简单,分别由SDA(串行数据线)
3、和SC1(串行时钟线)及上拉电阻组成。通信原理是通过对SC1和SDA线高低电平时序的控制,来产生I2C总线协议所需要的信号进行数据的传递。在总线空闲状态时,这两根线一般被上面所接的上拉电阻拉高,保持着高电平。如下图所示为单片机与I2C接口的传感器之间通信示意图。三、I2C总线协议对I2C总线的操作实际就是主从设备之间的读写操作。大致可分为以下两种操作情况:第一,主设备往从设备中写数据。数据传输格式如下:数据传输(N字节+应答)S从设备地址i1ACK数据ACK数据ACKP起始条件写应答应答应答停止条件第二,主设备从从设备中读数据。数据传输格式如下:(N字节应答)S从设备地址RACK数据ACK数据
4、NAKP!It!起始条件读应答应答非应答停止条件实际上把I2C协议拆分开来它的组成有:起始条件、终止条件、地址段、数据段、响应ACK非响应NACKo(I)STARTSSTOP,起始和终止条件都是由主机(master)发起产生。总线在起始条件之后处于忙碌状态,在停止条件之后又处于空闲状态。起始条件:SC1线是高电平时,SDA线从高电平向低电平切换。停止条件:SC1线是高电平时,SDA线从低电平向高电平切换。(2)地址段,地址段由7bit地址+读写位组成,一个7-bit的地址是从最高位(MSB)开始发送的,这个地址后面会紧跟1-bit(R/W)的操作符,1表示读操作,O表示写操作。接下来的一个bi
5、t是NACK/ACK,当这个帧中前面8bit发送完后,接收端的设备获得SDA控制权,此时接收设备应该在第9个时钟脉冲之前回复一个ACK(将SDA拉低)以表示接收正常,如果接收设备没有将SDA拉低,则说明接收设备可能没有收到数据(如寻址的设备不存在或设备忙)或无法解析收到的消息,如果是这样,则由master来决定如何处理,比如:停止。FWUi;WU1.!jII1I1III1III1I1JSTARTAOORCSS柳ACKDATAACDATAACSTOPoodocoondtton(3)数据段,SDA数据线上的每个字节必须是8位,每次传输的字节数量没有限制。每个字节后必须跟一个响应位(ACK)。首先传
6、输的数据是最高位(MSB),SDA上的数据必须在SC1高电平周期时保持稳定,数据的高低电平翻转变化发生在SC1低电平时期。data1inechangestaMe.Io(datadatavabda11owod以传输Byte:IoIo1O1O(OXAAh)为例,SDASC1传输时序如下所示:SC1SDA.人)UmukumumujI.I1I.II_jI.I0I_jI_IoI_II_I0IIACKIC1SBBWBrtBrtBnMBKIS)ACKYByte:1010IO1O(OxAAh|(4)响应ACK(Acknow1edge)和非响应NACK(NotAcknow1edge),每个字节传输必须带响应位,
7、相关的响应时钟也由主机产生,在响应的时钟脉冲期间(第9个时钟周期),发送端释放SDA线,接收端把SDA拉低。以上图传输IO1O1O1O1为例,SC1第9位时钟高电平信号期间,SDA拉低其代表了有ACK响应位。当在SC1第9位时钟高电平信号期间,SDA仍然保持高电平,这种情况定义为NACK非响应位。这种情况下,主机可以直接产生SToP条件终止以后的传输或者继续重新START开始一个新的传输。以下情况会导致出现NACK位:a、接收机没有发送机响应的地址,接收端没有任何ACK发送给发射机;b、由于接收机正在忙碌处理实时程序导致接无法接收或者发送;c、传输过程中,接收机识别不了发送机的数据或命令;d、
8、接收机无法接收;e、主机接收完成读取数据后,要发送NACK结束告知从机。以下图例代表NAeK时序:根据I2C协议分解的各个部分,可得出读和写的时序图,以向某传感器的地址为0x09的寄存器写入两个字节0x02和0x84为例,如下图所示为该过程时序图。四、激光测距实验激光测距实验使用STM32的GP1O模拟12C与激光测距模组V15311X相连接,串口1即UARTi,通Iusb转串口模块连接电脑,把I2C获取到的v1531ix的距离值(mm为单位)通过串口1传输到电脑端的串口调试助手显示出来。做该实验的时候需要把视觉模组暂时取下,并且把USB转串口的线接到视觉模组接口处。激光测距模组V15311X
9、在无人机支架底部,杜邦线和SH1.0接口接到主板上的USART3(这里用该接口的GPIO模拟12C)的接口上,如下图所示。根据原理图,可以看到V15311X的12C接口分别是:PB1CkPB11,如下图所示。获取V15311X的测距数据代码编写的思路如下代码思路1管脚配置1、定义结构体;2、使能时钟;3、填充结构体;4、装载结构体。2I2C读写逻辑1、I2C各个时序逻辑;2、读一个字节;3、写一个字节;4、读多个字节;5、写多个字节。4V15311X驱动1、V15311X初始化;2、测距逻辑实现。模拟I2C的GP1O初始化代码如下:131415B161718192021222324252627
10、282930313210111213141516171819202122232425初始化iicvoidv153IICInit(void)IGPIO_InitTypeDefGPIO_InitStructure;RCC_APB2PeriphC1ockCmd(RCC_I2C,ENAB1E);GPIO_InitStructure.GPI0_Pin=I2C_Pin_SC1;GPIO_InitStructure.GPIO_Speed=GPI0_Speed_50MHz;GPIO_InitStructure.GPIOJIode=GPI0_Mode_0ut_0D;GPI0_Init(GPI0_I2C,&GPI
11、0_Ini!Structure);GPI0_InitStructure.GPI0_Pin=I2C_Pin_SDA;GPIO_InitStructure.GPIO_Speed=GPI0_Speed_50MHz;GPI0_InitStructure.GPIOJfode=GPI0_Mode_0ut_0D;GPI0_Init(GPI0_I2C,&GPI0_InitStructure);GPIO_SetBits(GPI0_I2C,I2C_Pin_SC1);SC1输出高GPIO_SetBits(GPI0_I2C,I2C_Pin_SDA);SDA输出高V15311X的初始化代码如下。u8V15311X_In
12、it(void)(v153IICInit();De1ay_ms(10);if(!init(1)(return1;)SetDistanceMode(Medium);SetMeasurementTimingBudget(50000);StartContinuous(50);return0;)V15311X的测距代码如下。012345678901234567C222222222233333333C444444444444444444.uint16_tread(u8b1ocking)早-readResu1ts();if(!ca1ibrated)SetupManua1Ca1ibration();ca1i
13、brated=1;)UpdateDSS();getRangingData();writeReg(V15311_SYSTEM_INTERRUPT_C1EAR,0x01);sys_interrupt_c1ear_rangereturnranging_data.range_mm:每隔5s读取一次距离,并发送到串口上。代码如下所示。Ixmtirtwhi1e(1)fif(dataReadv()Rang_data=read(O);Rand_buf0=(uint8_t)(Rang_data8);Rand_buf11=(uint8_t)Rang_data;for(T=0;ig口=M*却小工a/;”13:59:50.401收*000013:59:55.413收=+024E14:00:00.424收*000014:00:06.235收.001014:00:11.246fc001714:00:16.258fe*-001814:00:21.269收*+001914:00:26.280收-)()19|口I打开文Pr-b文件i停止I1TO遥区MrOTMInri-IE3BE2网口号IgSMCg1*CKUh*2JPSn=,窗:SMM据作传KK专)S鲜恒巨7*C(I*1Xrtmu1(更cm;P即力MnEwutS7StRTrOTAJMtSn21尸EF11