一、ICM20602简介

六轴传感器在当今智能穿戴和定位导航产品中被广泛应用,而六轴传感器中做的最好的要属InvenSense公司的产品了,ICM20602便是其推出的优秀六轴传感器之一。

ICM20602集成3轴加速度计和3轴陀螺仪,其中陀螺仪量程范围可以选择+/-250dps,+/-500dps,+/-1000dps和+/-2000dps这四种,而加速度计量程范围可选择+/-2g,+/-4g,+/-8g和+/-16g四种。

ICM20602支持高达400KHz的I2C以及高达10MHz的SPI,具有较高的接口兼容性。

ICM20602的实物图如下所示。

ICM20602的引脚如下图所示。

二、SPI概述

SPI是指Serial Peripheral Interface的缩写,即串行外围设备接口,是一种高速的、全双工、同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的引脚,SPI的4条通信线为:

(1)MISO主入从出接口;

(2)MOSI主出从入接口;

(3)SCLK由主设备产生的时钟信号;

(4)CS由主设备控制的从设备片选信号。

STM32F103的SPI的时钟最高可达18MHz,支持DMA。

SPI主从机通信,如下图所示:

当有多个设备挂载在SPI总线上,其接线图如下图所示。

单片机和外围器件之间进行SPI同步串行数据传输时,在主器件的移位脉冲下,数据按位传输,低位在前,高位在后,为全双工通信,数据传输速度总体来说比I2C总线要快,速度可达到几Mbp,相比于其它总线,SPI协议简单,相对数据速率高,但是SPI也有它的缺点,比如没有指定的流控制,没有应答机制确认是否接收到数据。

三、SPI总线协议

SPI通信需要掌握以下知识: 时钟极性、时钟相位以及SPI的传输时序。

  1. 时钟极性,SPI通过时钟极性(CPOL)来决定在总线空闲时,同步时钟(SCLK)信号线的电平是高电平还是低电平。当时钟极性为0时(CPOL=0),SCLK信号线在空闲时为低电平;当时钟极性为1时(CPOL=1),SCLK信号线在空闲时为高电平;
  2. 时钟相位,SPI通过时钟相位(CPHA)用来决定何时进行信号采样。当时钟相位为1时(CPHA=1),在SCK信号线的第二个跳变沿进行采样;这里的跳变沿究竟是上升沿还是下降沿?这取决于时钟的极性。当时钟极性为0时,取下降沿;当时钟极性为1时,取上升沿;如下图所示:

当时钟相位为0时(CPHA=0),在SCK信号线的第一个跳变沿进行采样。跳变沿同样与时钟极性有关:当时钟极性为0时,取上升沿;当时钟极性为1时,取下降沿;如下图所示:

四、 SPI寄存器

在本次实验中使用到的是STM32的硬件SPI,STM32的硬件SPI所涉及的寄存器较多,这里挑选较为重要的来讲解。

(1)SPI_CR1:SPI控制寄存器1,如下图所示:

其中SPE为SPI使能控制位,等于1时使能SPI,等于0时关闭SPI;BR[2:0]为SPI的波特率控制位,BR[2:0]等于000则波特率为fPCLK/2,等于001则波特率为fPCLK/4,等于010则波特率为fPCLK/8,等于011则波特率为fPCLK/16,等于100则波特率为fPCLK/32,等于101则波特率为fPCLK/64,等于110则波特率为fPCLK/128,等于111则波特率为fPCLK/256;MSTR为SPI主从模式选择位,等于0时为从模式,等于1时为主模式;CPOL为SPI时钟极性设置位,为0则空闲时钟为低电平,为1则空闲时钟为高电平;CPHA为SPI时钟相位设置位,等于0时,在第一个时钟跳边沿开始采集,等于1时,在第2个时钟跳边沿开始采集。

(2)SPI_SR:SPI状态寄存器,如下图所示:

其中TXE是发送缓冲区状态位,该位为0时发送缓冲区非空,为1时发送缓冲区为空;RXNE为接收缓冲区状态位,该位为0时接收缓冲区为空,该位为1时,接收缓冲区为非空。

(3)SPI_DR:SPI数据寄存器,用于存储接收或者发送的数据。SPI_DR的描述如下图所示:

其中DR[15:0]存放SPI数据。

五、六轴传感器数据获取实验

六轴传感器数据获取实验使用STM32的硬件SPI与六轴传感器ICM20602相连接,串口1即UART1,通过USB转串口模块连接电脑,把SPI获取到的六轴数据通过串口1传输到电脑端的串口调试助手显示出来。做该实验的时候需要把视觉模组暂时取下,并且把USB转串口的线接到视觉模组接口处。六轴传感器ICM20602在无人机顶部的白色RGB彩灯盒里,通过软排把SPI及供电口接出,如下图所示。

根据原理图,可以看到ICM20602的的SPI接口分别是:PB13、PA5、PA6、PA7,如下图所示。

串口1的配置可以参考《串口(基础收发),配置代码(通过调用官方库)

获取ICM20602的数据代码编写的思路如下:

代码思路

1

管脚配置

1、定义结构体;

2、使能时钟;

3、填充结构体;

4、装载结构体。

2

SPI配置

1、定义结构体;

2、使能时钟;

3、填充结构体;

4、装载结构体;

5、使能SPI。

3

SPI读写逻辑

  1. 读一个字节;
  2. 写一个字节。

4

ICM20602驱动

  1. 从传感器读;
  2. 从传感器写;
  3. ICM20602初始化。

SPI初始化代码如下:

SPI的读写代码如下。

ICM20602的初始化代码如下。

ICM20602的读写代码如下。

这里注意要把串口的发送也配置好,这样才能把数据发送到电脑。串口1通过USB转串口模块接到电脑,获取ICM20602代码如下。

保存、编译、下载代码,可以看到USB转串口模块在不断地打印ICM20602的X轴加速度高8位,数据如下图所示:

疯壳AI开源无人机SPI(六轴传感器数据获取)相关推荐

  1. 疯壳AI开源无人机开机测试及硬件资源介绍

    一.开机测试 1.1 前期准备 疯壳cocofly无人机到手后是一个高耐压防碰撞内置优质海绵泡沫防护的手提铝合金箱子,打开铝合金手提箱子就可以看到包含的物品:无人机一架.遥控手柄一个.无人机电池一个. ...

  2. 疯壳AI开源无人机地面站上位机的使用和介绍

    地面站上位机使用和介绍 COCOFLY地面站上位机是配套COCOFLY无人机使用的,该地面站上位机功能非常的全.主要分为5大功能板块,分别是基本收发.飞控设置.波形显示.图形编队以及飞控状态. 1.1 ...

  3. 疯壳AI开源无人机GPIO(LED航情灯、信号灯控制)

    一.LED LED简介 LED(Light Emitting Diode)即为发光二极管的缩写.LED是一种在生活中非常常见的照明发光器件.LED的在我们生活中形态种类非常的多,如下图所示. 尽管LE ...

  4. 疯壳AI开源无人机PWM(电机控制)

    一.PWM简介 脉冲宽度调制(PWM),是英文"Pulse Width Modulation"的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术 ...

  5. 疯壳AI开源无人机中断(按键检测)

    一.轻触按键 1.1轻触按键简介 轻触按键是众多按键中的一款产品,它其实相当于是一种电子开关,只要轻轻的按下按键就可以把开关接通,松开时把开关断开.轻触按键由于微动开关的特性以及体积小.质量轻的优势在 ...

  6. 【开源教程13】疯壳·开源编队无人机-SPI(六轴传感器数据获取)

    COCOFLY教程 --疯壳·无人机·系列 SPI(六轴传感器数据获取)          图1               一.ICM20602 简介     六轴传感器在当今智能穿戴和定位导航产品 ...

  7. 【飞控开发基础教程6】疯壳·开源编队无人机-SPI(六轴传感器数据获取)

    COCOFLY教程 --疯壳·无人机·系列 SPI(六轴传感器数据获取)          图1               一.ICM20602 简介     六轴传感器在当今智能穿戴和定位导航产品 ...

  8. Micro Python———MPU6050六轴传感器

    目录 1.什么是MPU6050? MPU6050介绍: MPU6050寄存器介绍: 2.例程 1.平台 2.目的 3.讲解 1.查阅原理图 2.流程分析 3.代码讲解 3.结果 1.什么是MPU605 ...

  9. keil4怎么移植其他人的程序_【调试笔记】韦东山:在100ask_imx6ull上移植使用六轴传感器ICM20608...

    之前发了LCD调试笔记,大家很感兴趣,所以这次再来一篇:六轴传感器ICM20608驱动移植笔记,大家还需要什么移植笔记?可以留言.我们尽量满足. 1.1 移植思路 先找到驱动:也许内核里已经有,也许需 ...

  10. LSM6DS3(六轴传感器)STM32驱动及6D功能实现

    刚使用了STM32测试了LSM6DS3该六轴传感器,顺便也测试了其6D方向检测功能,效果是能满足对6个面方向的识别需求. 该六轴传感器支持I2C/SPI通信.在读取该六轴传感器寄存器时,采用I2C通信 ...

最新文章

  1. jenkins与gitlab集成,分支提交代码后自动构建任务(六)
  2. 简单了解SSL/TLS协议
  3. android 多布局
  4. 新技能,利用Reflector来修改dll引用
  5. 3dmax卸载工具_终极解决方案之 Autodesk系列软件3dmax、maya、cad 安装失败清理删除错误注册表重装...
  6. 两台计算机共享文件夹,两台电脑共享文件,详细教您两台电脑如何共享文件
  7. 【Cpp】C和C++混合编程
  8. python透视表画图_透视表、交叉表、matplotlib作图
  9. 十八、DPM模型案例(二)
  10. java 孕周计算器_周期表孕期计算器
  11. 实战篇-OpenSSL之AES加密算法-ECB模式
  12. [读书笔记]How to Get the Most of Studying
  13. MySQL数据库之GROUP BY用法
  14. for循环标记使用方法、配合Break,Continue例题演示
  15. android数字标牌,【Android开放性优势突出,携手数字标牌正当时】PjTime.COM数字告示系统 市场观察...
  16. 国家电网调控人工智能创新大赛开启 百度飞桨提供国产AI平台
  17. AMD打出四大旗号 偷拍HD5970实物展机
  18. OLTP与OLAP的区别和联系
  19. 自己制作字体的试验(自制字体使用FontForge等)
  20. 使用pgrouting和geotools实现最短路径,服务区分析

热门文章

  1. postman并发测试_三种高并发测试工具总结(Postman,Apache Bench,Jmeter)
  2. Python中pyserial库
  3. 电脑的ppt打不开计算机二级,ppt打不开怎么办?详细教您详细解决方法
  4. 油田生产数据选取进展22.2.11——2.17——2.26
  5. java计算机毕业设计易医就医购药交互平台源码+系统+mysql数据库+lw文档
  6. win10位置定位服务器,win10定位设置在哪里进行设置|win10定位的设置方法详解
  7. 系列学习 Gateway 之第 1 篇 —— SpringCloud Gateway 简介,Gateway 入门实例
  8. android盒子没声音,安卓手机投屏,投影仪没有声音解决办法
  9. java注册功能实现
  10. FusionSphere 物理CPU与VCPU的关系梳理总结