找回密码
 注册
关于网站域名变更的通知
查看: 241|回复: 1
打印 上一主题 下一主题

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

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-7-8 18:52 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

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

" b- r4 I/ u7 `& {
! j3 ^" `4 S, g5 ^) {$ |
2 Y! ~' C2 c3 |+ } % Z( w1 J& @2 H8 g4 s" y  n3 r
    图1
! w/ T, o9 D' i, ]( T
- \: }2 e+ ?. D6 c& R' |
/ n& E2 G' s( o; O6 D) `2 V" O    一、ICM20602 简介
$ j0 A, k/ P# v, @    六轴传感器在当今智能穿戴和定位导航产品中被广泛应用,而六轴传感器中做的最好的要属 InvenSense 公司的产品了,ICM20602 便是其推出的优秀六轴传感器之一。
9 r; U% K$ q' f& z" C    ICM20602 集成 3 轴加速度计和 3 轴陀螺仪,其中陀螺仪量程范围可以选择
. N, H, H8 J# n( [0 ]$ z* H    +/-250dps,+/-500dps,+/-1000dps 和+/-2000dps 这四种,而加速度计量程范围可选择+/-2g,+/-4g,+/-8g 和+/-16g 四种。
2 |* T4 W3 T6 ?6 x3 D, R+ k  q; b    ICM20602 支持高达 400KHz 的 I2C 以及高达 10MHz 的 SPI,具有较高的接口兼容性。
& x% ?' _8 J2 E0 `* x. y8 h- T2 F    ICM20602 的实物图如下所示。
8 g" W8 K; {3 G
- L" \0 o! z  z8 w     7 g4 o, X& v  {/ D  @
    图2
  l: T- G+ \4 ?* N- V    ICM20602 的引脚如下图所示。1 l# Z0 H8 v# F
3 X8 r9 b3 ?9 ?1 Z3 l, M3 C5 S( b
    2 D# B9 l6 o0 T5 t4 V
    图3& ~: p" l  o: Z
3 J6 B) R* l0 ^; k
! ]5 W5 G6 M1 l4 B! V1 B- `
    二、SPI 概述
3 j: d* ]7 z  o- s1 u    SPI 是指 Serial Peripheral InteRFace 的缩写,即串行外围设备接口,是一种高速的、全双工、同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的引脚,SPI 的 4 条通信线为:
$ {+ N% i% g5 P1 X    (1)MISO 主入从出接口;
1 R' }- N# E9 B/ ]2 d% r    (2)MOSI 主出从入接口;
7 N! a8 S" v" {0 L( Z3 m& Y* w    (3)SCLK 由主设备产生的时钟信号;
# V2 E3 u' Y; W/ |4 q    (4)CS 由主设备控制的从设备片选信号。
% U& ?4 M: r( W, D, F9 l    STM32F103 的 SPI 的时钟最高可达 18MHz,支持 DMA。SPI 主从机通信,如下图所示:
; o- [+ C% V" l; C# Y: W4 _# G" V- @! _4 I% v3 t9 I
   
, i2 \8 i) W. A% l% z5 X; n    图48 `0 c8 |; B  P/ L9 i$ o7 |3 _
    当有多个设备挂载在 SPI 总线上,其接线图如下图所示。
6 @3 \& _/ {; j9 u% a; S) Y7 v/ |  Y2 R3 d9 f/ [4 U; C% N+ x
    6 t, K7 V  J" W) X* k  O) g
    图5
* C: W3 w' B( E1 e    单片机和外围器件之间进行 SPI 同步串行数据传输时,在主器件的移位脉冲下,数据按位传输,低位在前,高位在后,为全双工通信,数据传输速度总体来说比 I2C 总线要快,速度可达到几 Mbp,相比于其它总线,SPI 协议简单,相对数据速率高,但是 SPI 也有它的缺点,比如没有指定的流控制,没有应答机制确认是否接收到数据。
* x0 w+ }- |$ [4 U$ ^+ ^/ Y1 J" P6 d$ j4 r
    三、SPI 总线协议
0 ]$ ~5 H3 u, T" B( x  b7 E* w    SPI 通信需要掌握以下知识: 时钟极性、时钟相位以及 SPI 的传输时序。
/ \' G. s# G( k* X5 t# D+ t
( |6 m9 h$ q& w1 c2 Y    (1)时钟极性,SPI 通过时钟极性(CPOL)来决定在总线空闲时,同步时钟(SCLK)信号线的电平是高电平还是低电平。当时钟极性为 0 时(CPOL=0), SCLK 信号线在空闲时为低电平;当时钟极性为 1 时(CPOL=1),SCLK 信号线在空闲时为高电平;7 f8 F1 Y! ~3 j
    (2)时钟相位,SPI 通过时钟相位(CPHA)用来决定何时进行信号采样。当时钟相位为 1 时(CPHA=1),在 SCK 信号线的第二个跳变沿进行采样;这里的跳变沿究竟是上升沿还是下降沿?这取决于时钟的极性。当时钟极性为 0; E, y& e8 x4 Z! Y; ]" d% k
    时,取下降沿;当时钟极性为 1 时,取上升沿;如下图所示:. i" f1 q7 q, k! r, K

" {/ z  ]* h( I9 K, X- n1 Q2 Y( l4 Z 2 U8 o  }' h; n3 }4 Q; E: N# ~, s
图61 d% p& H0 H" p( N  h( ^9 a
    当时钟相位为 0 时(CPHA=0),在 SCK 信号线的第一个跳变沿进行采样。跳变沿同样与时钟极性有关:当时钟极性为 0 时,取上升沿;当时钟极性为 1
1 u- w! q( L, ~! _8 W8 J( Z& v6 o    时,取下降沿;如下图所示:' C( h- k: P* I! u/ Q& B  Z

; y* ^( ^* G$ x6 K' H      K( M0 d: C4 R9 i0 ]0 `5 \4 Q
    图7. E  X1 V. `; g" L/ `
    四、 SPI 寄存器8 Q6 _' q  X$ v1 C$ O
    在本次实验中使用到的是 STM32 的硬件 SPI,STM32 的硬件 SPI 所涉及的寄存器较多,这里挑选较为重要的来讲解。
. W9 S8 s0 b% q  j) J) p' W- j- _: r
5 s( i% Y. e& R  _$ I$ H    (1)SPI_CR1:SPI 控制寄存器 1,如下图所示:3 I1 Z: Q" {! P
  w! h1 j, _; B9 v5 U
   $ a" V: _/ b) Q% L% Y3 O! T
    图87 ~$ z: X5 @# e) y) y6 o
    其中 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 个时钟跳边沿开始采集。' Z( g2 a7 ~  E8 |( I
    (2)SPI_SR:SPI 状态寄存器,如下图所示:# K- o, |& H2 n' M# _2 o: c

' v, q0 o3 V1 q: m% H0 u    
0 \+ o- F2 P' D* [) K    图96 v1 i+ E; @( y; `
    其中 TXE 是发送缓冲区状态位,该位为 0 时发送缓冲区非空,为 1 时发送缓冲区为空;RXNE 为接收缓冲区状态位,该位为 0 时接收缓冲区为空,该位为1 时,接收缓冲区为非空。
  K; P3 u+ z, O$ |7 u    (3)SPI_DR:SPI 数据寄存器,用于存储接收或者发送的数据。SPI_DR 的描述如下图所示:
5 K( X" _+ s9 e5 \% f
( y7 J; u8 C  y* a: G% N* U* y4 f! a    
& V2 _) B  r4 i  o    图10/ g8 V, }2 `1 W# m# j+ d4 w
    其中 DR[15:0]存放 SPI 数据。
$ g) [$ Q* D9 A- Y! I# L    五、六轴传感器数据获取实验+ Z" I0 W, ?3 i, C, M) |

& k5 h. D: L, u/ k6 T( G# d: |    六轴传感器数据获取实验使用 STM32 的硬件 SPI 与六轴传感器 ICM20602 相连接,串口 1 即 UART1,通过 USB 转串口模块连接电脑,把 SPI 获取到的六轴数据通过串口 1 传输到电脑端的串口调试助手显示出来。做该实验的时候需要把视觉模组暂时取下,并且把 USB 转串口的线接到视觉模组接口处。六轴传感器 ICM20602 在无人机顶部的白色 RGB 彩灯盒里,通过软排把 SPI 及供电口接出,如下图所示。
) q) K# D: J& r  B* E" G$ u$ m+ o) b, R: P" G' h$ ^9 |
    ' H9 L8 G( n( I
    图11
2 J# o& o0 k# Z$ M. ~. ?    根据原理图,可以看到 ICM20602 的的 SPI 接口分别是:PB13、PA5、PA6、PA7,如下图所示。* @1 }8 x$ ~' p7 t

) c) \+ M. L8 A  w. p* l  V     ' e0 f5 t/ B$ q: E* q
    图127 p; s4 r% r- |
    串口 1 的配置可以参考《串口(基础收发),配置代码(通过调用官方库) 获取 ICM20602 的数据代码编写的思路如下:9 b/ V# O0 B0 g$ r" @8 V4 }7 a$ s
( Q; H  M" j& C+ u& L' F1 K; k
    代码思路3 _  f# W- ~7 ^. U/ k
4 }) \3 [$ t4 }  N" {/ Q
   4 [7 M- R$ Z  H7 P1 Y2 S( T, F8 }
    表1
$ X; o1 g/ o6 o+ @% C    SPI 初始化代码如下:4 w: `5 F) Z1 T' B2 E, o
9 g$ {) |: g7 u, K, \
   
/ i9 N, }$ b+ H% m" i2 ?    图13# q4 X. J$ v& n; O
    SPI 的读写代码如下。2 Z$ o! t" Y, f* W5 L( t
2 w' a" u6 ^% |# z% a4 X, ~
   
; h1 w  Q) X, S    图14
* c) N& p* C# i1 g0 A) Y0 F6 q    ICM20602 的初始化代码如下。
- x& ?) t+ m) r7 s. _" `
9 z# Y8 Y2 Q8 l6 }3 Z, \     * X# c9 ~  z' W0 m) h: A2 o  |
    图15; I9 V* Q/ s3 H. m3 b# R$ k
    ICM20602 的读写代码如下。
$ r8 |- |, K8 ~2 G+ L9 j3 B3 y3 ?7 [
   7 D. Z% B# ?* |' D6 [
    图16
8 G5 s/ c1 f5 }$ Z    这里注意要把串口的发送也配置好,这样才能把数据发送到电脑。串口 1 通过 USB 转串口模块接到电脑,获取 ICM20602 代码如下。
4 e# ^/ |! n! d2 L! w1 J' X+ e; _3 a0 I: d' E8 w8 t( t5 v6 G
) g$ D8 q/ L$ k/ m
   8 F4 {$ B) ^7 e. \# w& u! V, G
    图17
- E1 k+ X9 P: A2 g9 c3 n( v    保存、编译、下载代码,可以看到 USB 转串口模块在不断地打印 ICM20602
$ Q9 d% D; a! e: W/ g    的 X 轴加速度高 8 位,数据如下图所示:+ M  z0 b9 b2 c  z$ d
) Y( g& f/ ?! e2 r
   8 w  K4 o; n- F% O
    图18" }% F- |! q  A5 [
% M: m$ }, d6 j. B2 `

3 T1 j& v1 a. o0 |/ Y" w
1 z$ Q. o- w: j) `1 a& C- E' p    配套资料:http://www.fengke.club
6 K$ n1 z0 ^: E1 @- q; H    套件地址:http://shop115904315.taobao.com
+ o; Q! v0 m) j    文件下载请点击: 【6】SPI(六轴传感器数据获取).pdf (1.19 MB, 下载次数: 1)
2 {: b# M  ~9 V1 {  D0 n; e, X
7 T* ~. n& d- C+ @: p
! v8 u; {2 G& S( [: g0 n

该用户从未签到

2#
发表于 2022-7-12 11:01 | 只看该作者
此协议还是比较浅显易懂的
( y" B/ x/ W) \/ a- {
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-10-29 10:34 , Processed in 0.156250 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表