COCOFLY教程
——疯壳·无人机·系列
SPI(六轴传感器数据获取)

    
    图1
    
    
    一、ICM20602 简介
    六轴传感器在当今智能穿戴和定位导航产品中被广泛应用,而六轴传感器中做的最好的要属 InvenSense 公司的产品了,ICM20602 便是其推出的优秀六轴传感器之一。
    ICM20602 集成 3 轴加速度计和 3 轴陀螺仪,其中陀螺仪量程范围可以选择
    +/-250dps,+/-500dps,+/-1000dps 和+/-2000dps 这四种,而加速度计量程范围可选择+/-2g,+/-4g,+/-8g 和+/-16g 四种。
    ICM20602 支持高达 400KHz 的 I2C 以及高达 10MHz 的 SPI,具有较高的接口兼容性。
    ICM20602 的实物图如下所示。
    
    
    图2
    ICM20602 的引脚如下图所示。
    
    
    图3
    
    
    二、SPI 概述
    SPI 是指 Serial Peripheral Interface 的缩写,即串行外围设备接口,是一种高速的、全双工、同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的引脚,SPI 的 4 条通信线为:
    (1)MISO 主入从出接口;
    (2)MOSI 主出从入接口;
    (3)SCLK 由主设备产生的时钟信号;
    (4)CS 由主设备控制的从设备片选信号。
    STM32F103 的 SPI 的时钟最高可达 18MHz,支持 DMA。SPI 主从机通信,如下图所示:
    
    
    图4
    当有多个设备挂载在 SPI 总线上,其接线图如下图所示。
    
    
    图5
    单片机和外围器件之间进行 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 时,取上升沿;如下图所示:

图6
    当时钟相位为 0 时(CPHA=0),在 SCK 信号线的第一个跳变沿进行采样。跳变沿同样与时钟极性有关:当时钟极性为 0 时,取上升沿;当时钟极性为 1
    时,取下降沿;如下图所示:
    
    
    图7
    四、 SPI 寄存器
    在本次实验中使用到的是 STM32 的硬件 SPI,STM32 的硬件 SPI 所涉及的寄存器较多,这里挑选较为重要的来讲解。
    
    (1)SPI_CR1:SPI 控制寄存器 1,如下图所示:
    
    
    图8
    其中 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 状态寄存器,如下图所示:
    
    
    图9
    其中 TXE 是发送缓冲区状态位,该位为 0 时发送缓冲区非空,为 1 时发送缓冲区为空;RXNE 为接收缓冲区状态位,该位为 0 时接收缓冲区为空,该位为1 时,接收缓冲区为非空。
    (3)SPI_DR:SPI 数据寄存器,用于存储接收或者发送的数据。SPI_DR 的描述如下图所示:
    
    
    图10
    其中 DR[15:0]存放 SPI 数据。
    五、六轴传感器数据获取实验
    
    六轴传感器数据获取实验使用 STM32 的硬件 SPI 与六轴传感器 ICM20602 相连接,串口 1 即 UART1,通过 USB 转串口模块连接电脑,把 SPI 获取到的六轴数据通过串口 1 传输到电脑端的串口调试助手显示出来。做该实验的时候需要把视觉模组暂时取下,并且把 USB 转串口的线接到视觉模组接口处。六轴传感器 ICM20602 在无人机顶部的白色 RGB 彩灯盒里,通过软排把 SPI 及供电口接出,如下图所示。
    
    
    图11
    根据原理图,可以看到 ICM20602 的的 SPI 接口分别是:PB13、PA5、PA6、PA7,如下图所示。
    
    
    图12
    串口 1 的配置可以参考《串口(基础收发),配置代码(通过调用官方库) 获取 ICM20602 的数据代码编写的思路如下:
    
    代码思路
    
    
    表1
    SPI 初始化代码如下:
    
    
    图13
    SPI 的读写代码如下。
    
    
    图14
    ICM20602 的初始化代码如下。
    
    
    图15
    ICM20602 的读写代码如下。
    
    
    图16
    这里注意要把串口的发送也配置好,这样才能把数据发送到电脑。串口 1 通过 USB 转串口模块接到电脑,获取 ICM20602 代码如下。
    
    
    图17
    保存、编译、下载代码,可以看到 USB 转串口模块在不断地打印 ICM20602
    的 X 轴加速度高 8 位,数据如下图所示:
    
    
    图18

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

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

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

  2. 【开源教程1】疯壳·开源编队无人机-开机测试

    疯壳·COCOFLY教程 --开源编队无人机 开机测试 图1.1 一.开机测试 1.1前期准备   疯壳 cocofly 无人机到手后是一个高耐压防碰撞内置优质海绵泡沫防护的手提铝合金箱子,打开铝合金 ...

  3. 【快速上手教程1】疯壳·开源编队无人机-开机测试

    疯壳·COCOFLY教程 --开源编队无人机 开机测试 图1.1 一.开机测试 1.1前期准备   疯壳 cocofly 无人机到手后是一个高耐压防碰撞内置优质海绵泡沫防护的手提铝合金箱子,打开铝合金 ...

  4. 【飞控开发基础教程10】疯壳·开源编队无人机-PID 基础原理

    COCOFLY教程 --疯壳·无人机·系列 PID 基础原理          图1               一.PID 简介     PID 控制是自动控制系统中最常用的一种控制手段,它的诞生主 ...

  5. 【飞控开发基础教程9】疯壳·开源编队无人机-PWM(电机控制)

    COCOFLY教程 --疯壳·无人机·系列 PWM(电机控制)          图1               一.PWM 简介     脉冲宽度调制(PWM),是英文"Pulse Wi ...

  6. 【飞控开发高级教程7】疯壳·开源编队无人机-编队飞行

    COCOFLY教程 --疯壳·无人机·系列 编队飞行 图1                   一.编队飞行     COCOFLY 支持编队飞行,编队飞行需要依托编队的图形码地图以及COCOFLY ...

  7. 【飞控开发高级教程6】疯壳·开源编队无人机-AI语音控制

    COCOFLY教程 --疯壳·无人机·系列 AI语音控制 图1               一.AI 语音控制     cocofly 支持 AI 语音控制,具体的使用方法和<视觉追踪>中 ...

  8. 【开源教程29】疯壳·开源编队无人机-编队飞行

    COCOFLY教程 --疯壳·无人机·系列 编队飞行 图1                   一.编队飞行     COCOFLY 支持编队飞行,编队飞行需要依托编队的图形码地图以及COCOFLY ...

  9. 【开源教程27】疯壳·开源编队无人机-视觉追踪

    COCOFLY教程 --疯壳·无人机·系列 视觉追踪 图1               一.cocofly 视觉追踪简介     cocofly 无人机支持视觉追踪,其视觉追踪的功能主要是依托于无人机 ...

最新文章

  1. 汽车车牌识别系统(六)-- 项目中的各个文件解析
  2. 黑客攻击澳大利亚政府网站 抗议互联网过滤器
  3. 宝德服务器pr2710装系统过程,宝德PR2710R服务器
  4. Javascript验证上传图片大小[前台处理]
  5. 思维方式是看待事物的角度、方式和方法,它对人的言行起到决定性作用
  6. 如何在 Simulink 中使用 PID Tuner 进行 PID 调参?
  7. 【java笔记】类与对象(定义,创建,使用,标准的类,对象数组)
  8. 用Java代码实现学生管理系统
  9. android.net.http.AndroidHttpClient Android6.0 API23以后失效
  10. 哇嘎显示等待无服务器,vagaa 哇嘎搜索不了资源怎么破?vagaa 哇嘎无法搜索的原因分析和解决方法介绍...
  11. 51单片机汇编语言例子,涵盖数码管显示,流水灯,串口,外拓,电子钟,频率计,DA、AD转换等实例
  12. win10电脑wifi服务器未响应,Win10系统点击无线图标没反应的解决方法
  13. 网页视频下载方法二:手机浏览器下载
  14. 金蝶专业版日记账批量生成凭证导入操作
  15. 计算机的开机键在哪里设置,笔记本电脑怎么开机 笔记本电脑开机键在哪
  16. Java实现数据排序
  17. 人力资源2017年的八大趋势
  18. 模拟100只老鼠试毒题目,根据酒桶数量生成对应的老鼠数量,选中老鼠,找出对应的毒酒
  19. iPhone11霸占高端手机市场,安卓手机难望其项背
  20. 关于缓存一致性的一些介绍

热门文章

  1. 仿京东手机端地址选择四级地址选择
  2. python招聘广州黄埔_小案例:用Pandas分析招聘网Python岗位信息
  3. 基于Matlab的载波同步建模与仿真(科斯塔斯环)
  4. ShuffleNetV2-Yolov5 更轻更快易于部署的yolov5
  5. Data Binding 用户指南(Android)
  6. 三星A7100手机更换电池方法拆电池方法
  7. 专利申请的流程与时间
  8. scrapy爬虫实例:凤凰网
  9. 红岭创投黑名单批量导入
  10. PID和TID之间的区别