《【飞控开发基础教程7】开源编队无人机-SPI(气压计数据获取).docx》由会员分享,可在线阅读,更多相关《【飞控开发基础教程7】开源编队无人机-SPI(气压计数据获取).docx(12页珍藏版)》请在第一文库网上搜索。
1、COCOFLY教程疯壳无人机系列目录一、SPL06 简介1二、气压计数据获取实验1Al开源编队无人机Al OPEN SOURCE FORMATION DRONE语音控制视觉追踪编队飞行高级功能光流定点3。翻海AI语音控朋图形化多机编队飞行视觉追踪形状视宽追踪圈码有头无头双模式自主巡线飞行激光气压双定高通控控制飞行WIFI0B 传控制支持图形化竭程视觉跟随移动小车0O视觉追踪强色官网地址:http:www.fengke.clubSPI (气压计数据获取)一、SPL06 简介SPL06是歌尔公司最新推出新款气压传感器,最新推出新款气压传感器SPL06-001,歌尔是全球领先的MEMS厂家,SPL0
2、6利用歌尔多年积累的MEMS开发技术,通过搭载高精度的检测用MEMS(MicroElectroMechanicalSystems)EP微机电系统和低功耗的集成电路,实现了业界最高级别别的精度5cm, SPL06是一种具有高精度和低电流消耗的小型化的数字式气压传感器,兼具压力和温度测量两种特点。压力传感器元件基于电容传感器原理.,保证温度变化过程中的高精度测量。小型封装结构适合移动应用和可穿戴设备等。SPL06的内部信号处理器将压力和温度传感器元件的输出转换为24位数据。每个压力传感器已被单独校准并包含校准系数。在应用中使用系数将测量结果转换成真实的压力和温度值。SPL06的实物图如下所示。二、
3、气压计数据获取实验气压计数据获取实验使用STM32的硬件SPI与气压计SPL06相连接,串口1即UART1,通过USB转串口模块连接电脑,把SPI获取到的SPL06的原始压力值以及原始温度值数据通过串口 1传输到电脑端的串口调试助手显示出来。做该实验的时候需要把视觉模组暂时取下,并且把USB转串口的线接到视觉模组接口处。气压计SPL06在无人机顶部的白色RGB彩灯盒里,通过软排把SPI及供电口接出,如下图所示。3根据原理图,可以看到SPL06的的SPI接口分别是:PB15、PA5、PA6、PA7,如下图所示。SPI5VDGNDSCKMOSIMISOCS1CS2CS3-12345678DGNDc
4、i1广I卜1 Cl |MPDGND.|J-C!S 104CON8M810M911TX22RX2BVBAT14SCK15 MISO16 MOS117LED329TX1WRX!31DM32DP33DIOCLK37y犯1S、1-DGND,| 卜44NRST12436LflOK48193V3U4PAOUKUPPAIPA2PA3PA4PA5PA6PATPBOPB!BOOT1PB2HDOPB3JNTRSTPB4PB5PB6PB:18 M61920 C3910 VIJI还42 MO43 MlPASPA9USARTLTXPA1OUSART1_RXPAHPAUPAI 3 mtsSWDQPAM JTCK WCLK
5、PA15J7DIPB8PB9USART3.TXTO10USART3_RXPB11PB12PB13PB14PB1546“TX1R53W US260SI27 CS:28 CS;OSC IN PDOOSC OUT PDlTAMPER RIC PC 13OSC32 INPCHOSC32_OlnPCB2 LHM3 LID】BOOTONRSTVDD2VDD3VDDAV$A3V; SN32F1O3CT6串口 1的配置可以参考串口(基础收发),配VSS.IV$S_2VSSJDGND代码(通过调用官方库)。获取SPL06的数据代码编写的思路如下:1管脚配置1、定义结构体2、使能时钟3、填充结构体4、装载结构体2
6、SPI配置1、定义结构体2、使能时钟43、填充结构体4、装载结构体5、使能SPI3SPI读写逻辑1、读一个字节2、写一个字节4SPL06驱动1、从传感器读2、从传感器写3、ICM20602 初始化SPI初始化代码如下:6 void Mv_SPI_Init (void)7早8 SPI_InitTypeDef SPI_InitStructure;9 GPIO_InitTvpeDef GPIO-InitStructure;1011RCC_APB2Per iphC1ockCmd(RCC.GPIO.SPI, ENABLE);12RCC_APB2PeriphClockCmd (RCCCE, ENABLE)
7、;13RCC_APB2Per iphC1ockCmd(RCC-CSN, ENABLE);14RCC.APB2PeriphC1ockCmd(RCC_APB2Periph_SPIl, ENABLE);1516*配置 SPI_RF_SPI的 SCK,MISO,!OSI 引脚 */17 GPIO.InitStructure. GPI0_Pin 二 SPI_Pin_SCK SPI.Pin.MISO SPI_PinJ!0SI;18 GPIO_InitStructure. GPIO_Speed = GPI0_Speed_10MHz;19 GPIOZlnitStructure. GPIOZMode = GPI
8、O_Mode_AF_PP: 复用功能20 GPIOInit(GPIO_SPI, &GPIO_InitStructure);2122 *气压计的CSN引曲!:*23GPIO_InitStructure. GPI0_Pin = Pin_C3;24GPIO_InitStructure. GPIO_Speed = GPI0_Speed_10MHz;25GPIOZlnitStructure. GPI0_Moie = GPI0_Mode_0ut_PP;26GPIOZlnit(GPIO.CSN, &GPIOZlnitStructure)?27GPIO_SetBits(GPIO.CSN, Pin_C3);28
9、SPI_InitStructure. SPI_Direction = SPI_Direction_2Lines_FullDuplex; 双线全双工29 SPI_InitStructure. SPI_Mode = SPI_Mode_Master; / 主模式30 SPI_InitStructure. SPI_DataSize = SPI_DataSize_8b;数据大小8位31 SPI.InitStructure. SPICPOL = SPICPOL-Low; 时钟极性,空闲时为低32 SPI_InitStructure. SPICPHA=SPI_CPHAEdge; /第1个边沿有效,上升沿为采
10、样时刻33 SPI.InitStructure. SPI_NSS = SPI_NSS_Soft; /SS信号由软件产生34 SPI_InitStructure. SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8;4分频,9MHz35 SPI_InitStructure. SPIFirstBit 二 SPIFirstBit JISB; 高位在前36 SPI InitStructure. SPI CRCPolynomial = 7;3738 SPI_Init(SPI_X, &SPI_InitStructure);39 SPI_Cmd(SPlJt ENA
11、BLE);40 A 1SPI的读写代码如下。641 u8 SPI_RW(u8 dat)42 ld(434445464748495051565758 -SPI_RW(pDatai);/*当SP工发送缓冲器非空时等待*/while (SPI I2S GetFlagStatus(SPI X, SPI I2S FLAG TXE) = RESET);/*通过SP*发送一字节数据*/一一 一SPI I2S SendData(SPI X, dat);/*当SPf接收缓冲器为空时等待*/while (SPI_l2S_GetFlagStatus(SPI_Xf S PI_12 S_FLAG_RXNE) = RES
12、ET);/* Return the byte read from the SPI bus */return SPI I2S ReceiveData(SPI X);52 void SPI Transmit(uint8 t *pDataz uintl6 t Size)53B(一一54for(uintl6_t i=0; iSize; i+)55 -SPL06的读写代码如下。59 void SPI Receive (uint8 t *pData, uintl6 t Size)60R6162 A636465 )pDatai = SPI RW(0);for (uintl6 t i=0; ii32rawPr
13、essure = 0;266p_spl0601-i32rawTemperature = 0;267p_spl0601-chip_id = spl0601_read(OxOD );268 |269 isp1060l_get_ca1i b_param();270 I271 spl0601_rateset ( PRESSURE_SENSOR, 128, 16 );272 j273 spl0601_rateset ( TEMPERATURE-SENSOR, 8, 8 );274 ;275 spl0601_start_continuous ( CONTINUOUS_P_AND_T );276 :277 if(p_spl0601-chip_id = 0x10)278 i 279 I return 0:2