《飞控开发基础教程7开源编队无人机SPI气压计数据获取.docx》由会员分享,可在线阅读,更多相关《飞控开发基础教程7开源编队无人机SPI气压计数据获取.docx(10页珍藏版)》请在第一文库网上搜索。
1、COCOF1Y教程疯壳无人机系列目录.1一、SP1o6简介二、气压计数据获取实验A1开源编队无人机A1OPENSOURCEFORMATIONDRONE高级功能Q激光,压光波定点有头无头3D型治双定高双模式令公QfH4)W1F1aB传遥控控制视觉追踪初觉追踪视觉追除控制飞行图码强色形状/扁日七)视觉跟丽图形化多机支持图形化自主巡线A1语音控制3动小车编队飞行编程飞行官网地址:http:/www.fengke.c1ubSPI(气压计数据获取)一、SP1o6简介SP106是歌尔公司最新推出新款气压传感器,最新推出新款气压传感器SP106-001,歌尔是全球领先的MEMS厂家,SP1o6利用歌尔多年积
2、累的MEMS开发技术,通过搭载高精度的检测用MEMs(MicroE1ectroMechanica1Systems)EP微机电系统和低功耗的集成电路,实现了业界最高级别别的精度5cm,SP106是一种具有高精度和低电流消耗的小型化的数字式气压传感器,兼具压力和温度测量两种特点。压力传感器元件基于电容传感器原理,保证温度变化过程中的高精度测量。小型封装结构适合移动应用和可穿戴设备等。SP106的内部信号处理器将压力和温度传感器元件的输出转换为24位数据。每个压力传感器已被单独校准并包含校准系数。在应用中使用系数将测量结果转换成真实的压力和温度值。SP106的实物图如下所示。二、气压计数据获取实验气
3、压计数据获取实验使用STM32的硬件SPI与气压计SP106相连接,串口1即UART1通过USB转串口模块连接电脑,把SPI获取到的SP106的原始压力值以及原始温度值数据通过串口1传输到电脑端的串口调试助手显示出来。做该实验的时候需要把视觉模组暂时取下,并且把USB转串口的线接到视觉模组接口处。气压计SP106在无人机顶部的白色RGB彩灯盒里,通过软排把SPI及供电口接出,如下图所示。根据原理图,可以看到SP106的的SPI接口分别是:PBI5、PA5、PA6、PA7,如下图所示。SPI5VDGNDSeKMOS1MISOCSICS2CS3-J412345678CON8PAgPAVSATTJ_
4、TXPA1OUSARTiRXPA11PA!2PABJTMSSUaDOOPA14JTCK令WCtKPAISnD1VBA1VDD1VDD1VD(Bs1OSCjxrooOSCOCTPD1BOOTOPaoutcvtPA1PA2PASPA4PASPA6PA?BoonpB2mxPBjWtrstpbi口oI,-34,pPB11B1刖PBIPBIPB1PBITAMratRTCPCBOSC32INPCM0$C$20VTPC11VDoAVSSA(通过调用官方库)0串口1的配置可以参考串口(基础收发),配置代码获取SP106的数据代码编写的思路如下:1管脚配置1、定义结构体2、使能时钟3、填充结构体4、装载结构体2
5、SPI配置1、定义结构体2、使能时钟1112131415161718192021222324252627282930313233343536373839403、填充结构体4、装载结构体5、使能SPI3SP1读写逻辑1、读一个字节2、写一个字节4SP106驱动1、从传感器读2、从传感器写3、ICM20602初始化SP1初始化代码如下:6voidMy_SPI_Init(void)7早8SPI-InitTypeDefSPI_InitStructure;9GPI0_InitTvpeDefGPIO_InitStructure;10RCC_APB2PeriphC1ockCmd(RCC_GPI0_SPI,E
6、NAB1E);RCC_APB2PeriphC1ockCmd(RCC_CE,ENAB1E);RCC_APB2PeriphC1ockCmd(RCC_CSN,ENAB1E);RCC_APB2PeriphC1ockCmd(RCC_APB2Periph_SPI1,ENAB1E);*配置SP1NRF_SPI的SCK,MISO,MOSI引脚*GPIO_InitStructure.GPI0_Pin=SPI_Pin_SCKSPI_Pin_MIS0SPI_Pin_M0SI;GPIO-InitStructure.GPI0_Speed=GPI0_Speed_IONfHz;GPIZ1nitStructure.GPIZM
7、ode=GPIO_Mode_AF_PP;复用功能GPI0_Init(GPI0_SPI,&GPI0_InitStructure);*气压计的CSN引脚:*GPI0-InitStructure.GPI0_Pin=Pin_C3;GPI0_InitStructure.GPIO-Speed=GPI0_Speed_10MHz;GPI0_InitStructure.GPI0_Mode=GPI0_Mode_0ut_PP;GPIOZ1nit(GPIO_CSN,&GPI0_InitStructure)7GPIO_SetBits(GPIO_CSN,Pin_C3);SPI_InitStructure.SPI_Dire
8、ction=SPI_Direction_21ines_Fu1!Dup1ex;双线全双工SPI_InitStructure.SPI_Mode=SPI_1ode_Master:主模式SPI_InitStructure.SPI_DataSize=SPI_DataSize_8b;数据大小8位SP11nitStructure.SPCP01=SPI_CPO1_1ow;时钟极性.空闲时为低SPI-InitStructure.SPI_CPHA=SPj1CPHAEdge;第1个边沿有效,上升沿为采样时刻SPI-InitStructure.SPI_NSS=SPI_NSS_Soft;SS信号由软件产生SPI-Ini
9、tStructure.SPI_BaudRatePresca1er=SPI_BaudRatePresca1er_8;4分频,9MHzSPI-InitStructure.SPI_FirstBit=SPI_FirstBit_MSB;高位在前SPI_InitStructure.SPI_CRCPo1ynomia1=7;SPI_Init(SPI_X,&SPI_InitStructure);SPI_Cmd(SPI_X,ENAB1E):1234567890144444444455u8SPIRW(u8dat)早/*当SP工发送缓冲黯非空时等待*/whi1e(SPII2SGetF1agStatus(SPIX,SP
10、II2SF1AGTXE)=RESET);/*通过SP12发送一字节数据*/SPII2SSendData(SPIX,dat);/*当SPf接收缓冲器为主时等待*/whi1e(SPI_I2S_GetF1agStatus(SPI_XZSPI_12S_F1AG_RXNE)=RESET);*ReturnthebytereadfromtheSPIbus*/returnSPI_I2S_ReceiveData(SPI_X);I52 voidSPI_Transmit(uint8_t*pData,uint16_tSize)53 (一54 for(uint16_ti=0;iSize;i+)55 056 SPI_RW
11、(pDatai);57 58 59 voidSPIReceive(uint8t*pData,uint16tSize)6061for(uint16_ti=0;ii32rawPressure=0;266p_sp10601-i32rawTemperature=0:267p_sp10601-chip_id=sp10601_read(OxOD);268269sp10601_get_ca1ib_param();270271sp10601.rateset(PRESSURE_SENSOR,128,16):272273sp10601.rateset(TENfPERATURE-SENSOR,8,8);274275
12、sp10601_start_continuous(CONTINUOUS_P_AND_T);276277if(p_sp10601-chip_id=0x10)278(279return0:280)281e1se282-(283return1;284)285)36staticvoidsp10601_write(unsignedcharregadr,unsignedcharva1)37(3839如414243sp106-enab1e(1);SPIRW(regadr);SPI_RW(va1);sp106_enab1e(0);440,*45464748495051525354555657585960函数名
13、功能描述输入参数输出参数返回值调用函数被调函数修改历史1.日作修改内容sp10601readI2C寄存器读取子函数uint8hwadr硬件地址uint8regadr寄存器地址uint8读出值2023年O1月06日fengeke新生成函数*,u861(626364656667681sp10601_read(unsignedcharregadr)u8reg-data;sp106_enab1e(1);SPI_RW(regadr0x80);reg-data=SPI_RW(Oxff);sp106_enab1e(0);returnreg_data;查看手册发现压力、温度的24位原始值在地址0x00-0x05oRegisterNameAddEbit7bit6bit5bit4Wt3人叭bnIbitResetStatePSR_B20x00PSR23J6(r)COOhPSR_B10x01