《飞控开发基础教程6开源编队无人机SPI六轴传感器数据获取.docx》由会员分享,可在线阅读,更多相关《飞控开发基础教程6开源编队无人机SPI六轴传感器数据获取.docx(13页珍藏版)》请在第一文库网上搜索。
1、COCOF1Y教程疯壳无人机系列目录、IZ20602Iwj1二、SP1概述2三、SP1总线协议2四、SP1寄存器3五、六轴传感器数据获取实验4A1开源编队无人机A1OPENSOURCEFORMATIONDRONE高级功能Q激光,压光波定点有头无头3D型治双定高双模式令公QfH4)W1F1aB传遥控控制视觉追踪初觉追踪视觉追除控制飞行图码强色形状/扁日七)视觉跟丽图形化多机支持图形化自主巡线A1语音控制3动小车编队飞行编程飞行视频地址:hup:WWW.fengke.c1ubSPI(六轴传感器数据获取)一、ICM20602简介六轴传感器在当今智能穿戴和定位导航产品中被广泛应用,而六轴传感器中做的最
2、好的要属InVenSenSe公司的产品了,ICM20602便是其推出的优秀六轴传感器之一。ICM20602集成3轴加速度计和3轴陀螺仪,其中陀螺仪量程范围可以选择+/-250dps,+/-500dps,+/1000(5和+/2000(5这四种,而加速度计量程范围可选择+2g,+/-4g,+/-8g和+/-16g四种。ICM20602支持高达400KHz的I2C以及高达IOMHz的SP1具有较高的接口兼容性。ICM20602的实物图如下所示。ICM20602的引脚如下图所示。二、SP1概述SPI是指Seria1Periphera1Interface的缩写,即串行外围设备接口,是一种高速的、全双工
3、、同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的引脚,SP1的4条通信线为:(1) MISc)主入从出接口;(2) MOS1主出从入接口;(3) SC1K由主设备产生的时钟信号;(4) CS由主设备控制的从设备片选信号。支持DMAoSTM32F103的SP1的时钟最高可达18MHz,SP1主从机通信,如下图所示:从机MOS1)SC1K、主机M1SOCS当有多个设备挂载在SP1总线上,其接线图如下图所示。SCKMOS1MISOMCU(从)SCKMOS1MISOI/OI/OI/OVo甯M (单片机和外围器件之间进行SP1同步串行数据传输时,在主器件的移位脉冲下,数据按位传输,低位在前
4、,高位在后,为全双工通信,数据传输速度总体来说比I2C总线要快,速度可达到几Mbp,相比于其它总线,SP1协议简单,相对数据速率高,但是SPI也有它的缺点,比如没有指定的流控制,没有应答机制确认是否接收到数据。三、SPI总线协议SP1通信需要掌握以下知识:时钟极性、时钟相位以及SP1的传输时序。时钟极性,SP1通过时钟极性(CPo1)来决定在总线空闲时,同步时钟(SC1K)信号线的电平是高电平还是低电平。当时钟极性为0时(CPO1=O),SC1K信号线在空闲时为低电平;当时钟极性为1时(CPe)1=I),Se1K信号线在空闲时为高电平;2时钟相位,SP1通过时钟相位(CPHA)用来决定何时进行
5、信号采样。当时钟相位为1时(CPHA=I),在SCK信号线的第二个跳变沿进行采样;这里的跳变沿究竟是上升沿还是下降沿?这取决于时钟的极性。当时钟极性为0时,取下降沿;当时钟极性为1时,取上升沿;如下图所示:CPd-IU1r1r1r1JnJr1Jr11-cp1-T1r1r1r1rr1t11-III111IIor16bidependgonDatafrane1ormbit(see)FFInSP1CR1)3TnTTTTTXT1C)-III111II_IIIIIIII_NSS;:;:;gs1av.II:IICapturestrobeI111SPI时钟相位CPHA=I时不同的时钟极性下的采样规律当时钟相位
6、为0时(CPHA=O),在SCK信号线的第一个跳变沿进行采样。跳变沿同样与时钟极性有关:当时钟极性为0时,取上升沿;当时钟极性为1时,取下降沿;如下图所示:CPo1-1BJJJ-JJ-CPotrIII111IIM-SOEKEmTrrmfT1轲IIII1I1118OT16OItSIdGpendingonthDatatramotormatt)t(sFFinSP1CR1)mosi-MSBgr(-III111IINSSIII111II/(toyg):IIIIH1I,III111IICaPCUreZIIII1t1IIISP1时钟相位为。时,不同的时钟极性下的采样规律四、SP1寄存器在本次实验中使用到的是
7、STM32的硬件SP1STM32的硬件SPI所涉及的寄存器较多,这里挑选较为重要的来讲解。(1)SP1CR1:SP1控制寄存器1,如下图所示:151413121110987654321B1D1MODEB1D1OECRCENCRCNEXTDFFRXON1YSSMSSI1SBFIRSTSPEBR(2MSTRCPO1CPHArwrwrwrwrwrwrwrwrwrwrwrwrw(WWCW其中SPE为SP1使能控制位,等于1时使能SP1等于0时关闭SPI;BR0为SP1的波特率控制位,BR2:0等于OOO则波特率为frc12,等于001则波特率为fpc14,等于010则波特率为fpc18,等于O11则波
8、特率为fpct16,等于100则波特率为fpc132,等于101则波特率为fpc164,等于110则波特率为fpc1128,等于I11则波特率为ffc1256;MSTR为SP1主从模式选择位,等于0时为从模式,等于1时为主模式;CPo1为SP1时钟极性设置位,为0则空闲时钟为低电平,为1则空闲时钟为高电平;CPHA为SPI时钟相位设置位,等于0时,在第一个时钟跳边沿开始采集,等于1时,在第2个时钟跳边沿开始采集。(2) SP1SR:SP1状态寄存器,如下图所示:1514131211109876543210ResecvedFREBSYOVRMODFCRCERRUDRCHS1OETXERXNErr
9、rrc-wrrr其中TXE是发送缓冲区状态位,该位为0时发送缓冲区非空,为I时发送缓冲区为空;RXNE为接收缓冲区状态位,该位为0时接收缓冲区为空,该位为I时,接收缓冲区为非空。(3) SPI_DR:SP1数据寄存器,用于存储接收或者发送的数据。SP1DR的描述如下图所示:1514131211109876543210DR(150rwrwrwrwIrwrwrwrwrwrwrwrwrw-rw其中DR15:0存放SP1数据。五、六轴传感器数据获取实验六轴传感器数据获取实验使用STM32的硬件SPI与六轴传感器ICM20602相连接,串口PUART1,通过USB转串口模块连接电脑,把SP1获取到的六轴
10、数据通过串口1传输到电脑端的串口调试助手显示出来。做该实验的时候需要把视觉模组暂时取下,并且把USB转串口的线接到视觉模组接口处。六轴传感器ICM20602在无人机顶部的白色RGB彩灯盒里,通过软排把SP1及供电口接出,如下图所示。根据原理图,可以看到ICM20602的的SP1接口分别是:PBI3、PA5、PA6、PA7,如下图所示。SPIJ45VDGNDSCKMOSIMISOCS1CS3-CON8(基础收发),配置代码(通过调用官方库)12345678串口1的配置可以参考串口获取ICM20602的数据代码编写的思路如下:代码思路1管脚配置1、定义结构体;2、使能时钟;3、填充结构体;4、装载
11、结构体。2SPI配置1、定义结构体;2、使能时钟;3、填充结构体;4、装载结构体;5、使能SPIo3SPI读写逻辑1、读一个字节;2、写一个字节。4ICM20602驱动1、从传感器读;2、从传感器写;3、ICM20602初始化。SP1初始化代码如下:6voidMy_SPI_Init(void)70(8 SPIJnitTypeDefSPI_InitStructure;9 GPIO_InitTypeDefGPIO_InitStructure;1011 RCC_APB2PeriphC1ockCmd(RCC_GPIO_SPI,ENAB1E);12 RCC2APB2PeriphC1ockCmd(RCC二
12、CSN,ENAB1E);13 RCC二APB2PeriphC1ockCmd(RCC二APB2Periph_SPI1,ENAB1E);14 一15 *配置SPI_NRFSPI的SCK,MIS。,MOSI引脚*/16 GPIO_InitStructure.GPIO_Pin-SPI_Pin_SCK|SPI_Pin_MISOSPI_Pin_MOSI;17 GPIO_InitStructure.GPIO_SpeedGPIO_Speed_10MHz;18 GPIO2InitStructure.GPIO2Mode=GPIO_Mode_AF_PP;/复用功能19 GP1o二Init(GP1o_SPI,&GPI
13、0_InitStructure)7-20 GPIO_InitStructure.GPIO_Pin=Pin_C1;21 GP1O二InitStrUCtUre.GPIO二SPeed=GPIO_Speed_1OMHz;22 GP1o二InitStrUCtUre.GPI。二MOde=GPIO_Mode_Out_PP;23 GPIO二工nit(GPIOCSN,&GPIO_InitStructure)724 GPIO_SetBits(GPIO_CSN,Pin_C1);25 SPI_InitStructure.SPI_Direction=SPI_Direction_21ines_Fu11Dup1ex;双线全双工26 SP1二InitStrUCtUre.SPI二MOde=SPJMode二MaSter;/7主模式一27 SPi二InitStrUCtUre.SPI二DataSiZe=_SPI_DataSize_8b;/数据大小8位28 SP1二InitStrUCtUre.SPI二CPo1=SPI_CPO1_1ow;时钟极性,空闲时为低29 SPI二InitStrUCtUre.SPI二CPHA=SPI二CPHA二IEdge;第1个边沿有效,上升沿为采样时刻30 ISP1二InitStrUCtUre.SPI二NSS