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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

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

3 \' o/ a0 u1 i' {# L' z
- q# a# A" g( Q% Z8 ]" Q1 \! V* a3 V6 u
5 d2 m4 V8 e9 h1 @
2 L! R, `+ D# p. t8 o    图1$ z; P, W& i1 y# [* ^
$ V4 J7 o6 i) g9 ]
4 {' I! d* T0 ^2 a
    一、ICM20602 简介
- _) N5 Z% D4 J    六轴传感器在当今智能穿戴和定位导航产品中被广泛应用,而六轴传感器中做的最好的要属 InvenSense 公司的产品了,ICM20602 便是其推出的优秀六轴传感器之一。
" E9 k) P+ h, ~" @/ k1 o$ `( o5 }/ t& D    ICM20602 集成 3 轴加速度计和 3 轴陀螺仪,其中陀螺仪量程范围可以选择  X% c1 l& D+ B5 G% u4 l
    +/-250dps,+/-500dps,+/-1000dps 和+/-2000dps 这四种,而加速度计量程范围可选择+/-2g,+/-4g,+/-8g 和+/-16g 四种。
6 W% D4 [8 P' Y& I    ICM20602 支持高达 400KHz 的 I2C 以及高达 10MHz 的 SPI,具有较高的接口兼容性。
: I4 }+ S* x0 e  p    ICM20602 的实物图如下所示。
; z' [1 D0 Y/ i9 U! V5 o% u/ G8 ]
5 C; F+ Z, o* |3 ^2 l    
3 `6 `4 r: y& `6 m9 W. T1 ^    图2
0 w* `* M* I7 R5 ^; |    ICM20602 的引脚如下图所示。
" F9 o) u; o! y9 Q
0 i- R8 h& ]4 ^/ K4 S    
$ U8 o$ h+ A" B: U    图3
7 w( H, @1 p1 A  _, s& I; J5 j! ?+ i& ?; k

$ B1 N5 O7 \- P0 z    二、SPI 概述
( W8 V8 i% x" W/ N$ u    SPI 是指 Serial Peripheral InteRFace 的缩写,即串行外围设备接口,是一种高速的、全双工、同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的引脚,SPI 的 4 条通信线为:; ?7 _2 d' j8 E2 G: i/ E
    (1)MISO 主入从出接口;# B" a# u3 W! L( J
    (2)MOSI 主出从入接口;
" l' }2 d" M2 |/ }" U6 o% [    (3)SCLK 由主设备产生的时钟信号;
# |1 W% h+ {# p, ?$ A) j+ ?! k    (4)CS 由主设备控制的从设备片选信号。, a6 k& L2 @% v
    STM32F103 的 SPI 的时钟最高可达 18MHz,支持 DMA。SPI 主从机通信,如下图所示:1 O# v8 J3 h' m' G

9 o+ K3 T6 @+ d& c; s    
7 r3 e# p2 L' _! `' T2 W- x    图4. ^& v& b) j! i6 h
    当有多个设备挂载在 SPI 总线上,其接线图如下图所示。# f# t% o1 P9 c% d
% l. T8 [! d0 ~
   
+ p- |6 ?6 I4 I  l% ?" `    图5! V, c8 Z# }: Q1 [3 o
    单片机和外围器件之间进行 SPI 同步串行数据传输时,在主器件的移位脉冲下,数据按位传输,低位在前,高位在后,为全双工通信,数据传输速度总体来说比 I2C 总线要快,速度可达到几 Mbp,相比于其它总线,SPI 协议简单,相对数据速率高,但是 SPI 也有它的缺点,比如没有指定的流控制,没有应答机制确认是否接收到数据。
* O5 u0 @! P7 y# i- R2 o% p' S% n, y7 h* r; c6 J3 J
    三、SPI 总线协议
, c0 ]$ v" Y6 q; m& N0 X    SPI 通信需要掌握以下知识: 时钟极性、时钟相位以及 SPI 的传输时序。7 q$ a) x' p! D. Y0 W2 U
& g* P6 W8 ~1 A
    (1)时钟极性,SPI 通过时钟极性(CPOL)来决定在总线空闲时,同步时钟(SCLK)信号线的电平是高电平还是低电平。当时钟极性为 0 时(CPOL=0), SCLK 信号线在空闲时为低电平;当时钟极性为 1 时(CPOL=1),SCLK 信号线在空闲时为高电平;
" F, J1 O; ~* x* b' B2 L+ |    (2)时钟相位,SPI 通过时钟相位(CPHA)用来决定何时进行信号采样。当时钟相位为 1 时(CPHA=1),在 SCK 信号线的第二个跳变沿进行采样;这里的跳变沿究竟是上升沿还是下降沿?这取决于时钟的极性。当时钟极性为 02 o  |6 r6 j7 m: q6 I( \
    时,取下降沿;当时钟极性为 1 时,取上升沿;如下图所示:; B4 r0 P: ^4 ~* I$ A( U1 a+ e

4 s7 X4 J7 _! g2 B+ C1 h9 O$ y. }   ]. R# O" v% L0 L6 {
图61 E: r% i' I9 u
    当时钟相位为 0 时(CPHA=0),在 SCK 信号线的第一个跳变沿进行采样。跳变沿同样与时钟极性有关:当时钟极性为 0 时,取上升沿;当时钟极性为 1
" V3 z3 A7 L( h5 J  m9 q1 H    时,取下降沿;如下图所示:9 [* T8 \5 A5 H, D" K) c
3 R6 A6 y* a2 L8 h0 A) z6 }% v
   
( Q+ b& w5 F; J& ~1 W1 v" v: K9 w: K    图7
! B4 L1 s4 u/ h6 S5 C! N; o    四、 SPI 寄存器+ ^: b; b8 |+ U, r- W7 V& _, q
    在本次实验中使用到的是 STM32 的硬件 SPI,STM32 的硬件 SPI 所涉及的寄存器较多,这里挑选较为重要的来讲解。
4 x( n6 f1 e9 ?3 |0 ?2 z
7 l/ _- K1 \! T2 S, m( n6 g5 p) _    (1)SPI_CR1:SPI 控制寄存器 1,如下图所示:
$ q* @. t0 o$ K  s1 J
% ?% f, R2 J( B, P, x* ]    
6 j8 x& y: l( ]0 ^    图82 g% ^. V. A" t7 w: V- o* m2 c) u/ J
    其中 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 个时钟跳边沿开始采集。
: D% h0 b3 ~! ?/ E) J# k    (2)SPI_SR:SPI 状态寄存器,如下图所示:
% q3 R- C4 K0 s
6 c2 z; M9 o& M5 B! x0 L' i    ( }7 y+ s+ s* T9 t8 q# U
    图9
' A: a, ?+ \. E, j    其中 TXE 是发送缓冲区状态位,该位为 0 时发送缓冲区非空,为 1 时发送缓冲区为空;RXNE 为接收缓冲区状态位,该位为 0 时接收缓冲区为空,该位为1 时,接收缓冲区为非空。/ d. ^+ ]* H9 \/ X
    (3)SPI_DR:SPI 数据寄存器,用于存储接收或者发送的数据。SPI_DR 的描述如下图所示:
: ^5 {& T/ ?/ c  _* c( W  e: p* K+ v, |  z) g, c. N
    ( q# k/ ?. ^0 p$ X
    图10% U! E/ p5 S% K( t7 a  E
    其中 DR[15:0]存放 SPI 数据。
- {, h7 P+ k! p9 H    五、六轴传感器数据获取实验: d) P4 [+ B% m! I1 Q  p
' [; W5 h$ {$ U* q  ?5 E/ p1 }3 c
    六轴传感器数据获取实验使用 STM32 的硬件 SPI 与六轴传感器 ICM20602 相连接,串口 1 即 UART1,通过 USB 转串口模块连接电脑,把 SPI 获取到的六轴数据通过串口 1 传输到电脑端的串口调试助手显示出来。做该实验的时候需要把视觉模组暂时取下,并且把 USB 转串口的线接到视觉模组接口处。六轴传感器 ICM20602 在无人机顶部的白色 RGB 彩灯盒里,通过软排把 SPI 及供电口接出,如下图所示。! {$ s/ {4 T- W' Z3 t5 X

7 b% X7 i( w4 B$ @7 Z0 u  G4 ~& M     4 D# ?5 ~9 R8 g7 k
    图116 ~4 y" h2 n% e# [, h8 Z
    根据原理图,可以看到 ICM20602 的的 SPI 接口分别是:PB13、PA5、PA6、PA7,如下图所示。/ o6 ?5 R7 V1 N0 ?% x

, K0 n1 z3 L1 P3 T1 Y     5 Y/ b9 ]3 E0 c. y
    图121 C4 i: G# R0 j( T/ B% U
    串口 1 的配置可以参考《串口(基础收发),配置代码(通过调用官方库) 获取 ICM20602 的数据代码编写的思路如下:
) x2 @4 Z8 ^2 ^8 u. M
+ c* E& `' r+ h* P1 z    代码思路
2 @" D2 B7 j9 h" h) N& S& h) E+ [' w8 U4 u( ?7 \3 ^4 M, {  J" J
   ( b9 Y( {) C( `- G/ s  [
    表17 K$ |6 a1 v) {) ?' T  B+ ~  K$ T
    SPI 初始化代码如下:
- u; V/ t$ J8 {+ R+ Y) |% u  i- O
    6 S7 F" {' `! Z3 `6 g
    图13
3 O/ ?2 I" R9 n  }    SPI 的读写代码如下。, O3 F- N( C# q* }" s
: {5 a( @# y$ q; x# G
    1 S* U  @4 H% V: l" y
    图14
2 `3 {' U1 ]: {9 X+ v' L# b0 ?    ICM20602 的初始化代码如下。9 I3 j* s  J/ G& ?) L6 |  g
1 b3 t  }6 }0 i% u( R+ j6 N* v  f
   
& M2 ~/ C1 P- z    图15
+ W  a# P3 {. G    ICM20602 的读写代码如下。, L6 |! {. f0 T" B% U% ]
' ~; Q' \1 B- v. ?
   
& m4 V- x  l2 y+ ?- R3 N) i    图16/ b. P2 S/ v+ V
    这里注意要把串口的发送也配置好,这样才能把数据发送到电脑。串口 1 通过 USB 转串口模块接到电脑,获取 ICM20602 代码如下。& [9 o" L% j  ?! F" J6 U3 k
" [/ ^+ B$ V2 h) m+ e
, b7 b) `; c; d
   
2 L$ Y6 b3 s1 |    图17* O2 v& e% }8 P2 J4 v" M
    保存、编译、下载代码,可以看到 USB 转串口模块在不断地打印 ICM20602
6 C& P" q4 E3 e8 t; F2 Y4 ?    的 X 轴加速度高 8 位,数据如下图所示:$ S* E$ o4 w' n- r

2 v8 Q/ [: h6 l# M+ }5 |    ! @. v- I- c$ i- X% w
    图18
- h7 U% k% n) `7 T6 i2 M% K( n- V, S( h7 |
; L4 Z0 h6 R' W7 J* }3 U- f6 \" x- ^* g/ D  {- C  g! s
* |4 `! y$ _" N6 D4 _4 R7 n
    配套资料:http://www.fengke.club( T3 Y/ Q5 }8 N2 q
    套件地址:http://shop115904315.taobao.com ! R0 A4 u; e" r$ ~9 w
    文件下载请点击: 【6】SPI(六轴传感器数据获取).pdf (1.19 MB, 下载次数: 1) . Q( d; L  ]( y! A7 M

2 d! K( d/ p# b0 D: x5 i% P' F  l1 z: p; q$ T5 V

该用户从未签到

2#
发表于 2022-7-12 11:01 | 只看该作者
此协议还是比较浅显易懂的8 P, n' Q6 H+ H* @
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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