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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
COCOFLY教程
——疯壳·无人机·系列
SPI(六轴传感器数据获取)
6 T: L! B, k2 p1 L" |

9 {1 ^2 E" U: j$ i. t: a% i4 J  K2 b4 ]5 s; i% L

7 M* @7 h6 L/ _. f6 y    图1% G0 x$ n! m7 S: R  u, v* o

: [3 z( R6 e  @
* Z# A0 M& H' y$ O3 Q& p+ o    一、ICM20602 简介9 @( Q: ?9 x$ {* I5 |9 x5 f
    六轴传感器在当今智能穿戴和定位导航产品中被广泛应用,而六轴传感器中做的最好的要属 InvenSense 公司的产品了,ICM20602 便是其推出的优秀六轴传感器之一。
6 N- O, j" J4 ]+ @    ICM20602 集成 3 轴加速度计和 3 轴陀螺仪,其中陀螺仪量程范围可以选择
; y9 V- b( Y; }    +/-250dps,+/-500dps,+/-1000dps 和+/-2000dps 这四种,而加速度计量程范围可选择+/-2g,+/-4g,+/-8g 和+/-16g 四种。& C& P+ R; J* H$ P& L: m
    ICM20602 支持高达 400KHz 的 I2C 以及高达 10MHz 的 SPI,具有较高的接口兼容性。
$ K6 J1 v# j" h6 T; A. d    ICM20602 的实物图如下所示。
% c1 m" [# c; [$ m; I! o' M' E9 k) e% j& O& f
   
/ i6 ]2 U. b& U, U. \- T    图2
1 G" R8 U+ \) C. s9 R! k/ t! `) Y2 f9 `    ICM20602 的引脚如下图所示。5 m5 d# U: A- z: r9 M2 J

6 u, z/ g7 S$ Q7 d     ( ~8 ~0 P7 e4 x0 O
    图3$ v* W2 }  n/ G8 s- A# m

3 z: p9 R8 J% k/ D8 e* d$ {$ F, @3 B9 t! m. v8 M& ?3 X
    二、SPI 概述
9 W- @+ {' }* U# `    SPI 是指 Serial Peripheral InteRFace 的缩写,即串行外围设备接口,是一种高速的、全双工、同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的引脚,SPI 的 4 条通信线为:, _9 k  s' ~" |* Z" i0 U5 e
    (1)MISO 主入从出接口;0 B+ C" w+ Z% y  S# k
    (2)MOSI 主出从入接口;& g- J) Y5 W# R7 E
    (3)SCLK 由主设备产生的时钟信号;
5 h* K( N7 O# ^/ _  `7 U* a! t1 R    (4)CS 由主设备控制的从设备片选信号。# O/ `4 c8 Z/ ^2 M4 Y& p
    STM32F103 的 SPI 的时钟最高可达 18MHz,支持 DMA。SPI 主从机通信,如下图所示:
1 J* _% }) p  r7 U+ w; t: R& A2 g4 K' w7 \) o2 R9 j) k
   
) C; ?2 p( y) l+ J6 x" m2 i* |. H, z    图4
- f$ z. h7 @- ?8 V  F7 m1 K    当有多个设备挂载在 SPI 总线上,其接线图如下图所示。
, R  ^4 a) x( u! X2 {
( b- E+ V2 C1 _; A7 z    
+ y( y  n' _) t, a* @1 e    图5& t9 d' N) _$ B  |$ ]
    单片机和外围器件之间进行 SPI 同步串行数据传输时,在主器件的移位脉冲下,数据按位传输,低位在前,高位在后,为全双工通信,数据传输速度总体来说比 I2C 总线要快,速度可达到几 Mbp,相比于其它总线,SPI 协议简单,相对数据速率高,但是 SPI 也有它的缺点,比如没有指定的流控制,没有应答机制确认是否接收到数据。
+ g8 a  C; v9 e! N
% ^% |8 e+ F* D    三、SPI 总线协议% C: ]% O. H+ J" b* I
    SPI 通信需要掌握以下知识: 时钟极性、时钟相位以及 SPI 的传输时序。% N4 Z5 \8 _3 j

9 D" P6 H, [. ]4 [! {    (1)时钟极性,SPI 通过时钟极性(CPOL)来决定在总线空闲时,同步时钟(SCLK)信号线的电平是高电平还是低电平。当时钟极性为 0 时(CPOL=0), SCLK 信号线在空闲时为低电平;当时钟极性为 1 时(CPOL=1),SCLK 信号线在空闲时为高电平;
0 |( ^$ o% \& m( C0 ?    (2)时钟相位,SPI 通过时钟相位(CPHA)用来决定何时进行信号采样。当时钟相位为 1 时(CPHA=1),在 SCK 信号线的第二个跳变沿进行采样;这里的跳变沿究竟是上升沿还是下降沿?这取决于时钟的极性。当时钟极性为 0
- c6 \* \) D0 P- f    时,取下降沿;当时钟极性为 1 时,取上升沿;如下图所示:3 u% g- ?0 x0 `! L* j

! r* o! S9 ]( _3 I5 f) G) T3 e0 ]
2 l/ A+ ~! k9 L' u$ A图6
6 r: \$ n) w8 v    当时钟相位为 0 时(CPHA=0),在 SCK 信号线的第一个跳变沿进行采样。跳变沿同样与时钟极性有关:当时钟极性为 0 时,取上升沿;当时钟极性为 11 i4 l$ X$ g1 [2 E% H
    时,取下降沿;如下图所示:
# r6 x/ `& t# _9 }) T) W# K
0 k* d* Y5 V5 u7 V    
6 h1 n8 r4 H- Q" p/ Y  x    图7
% w; y0 O2 W$ q) N: v, R    四、 SPI 寄存器
: @1 Z, ^' M& ]( M* z: p$ k    在本次实验中使用到的是 STM32 的硬件 SPI,STM32 的硬件 SPI 所涉及的寄存器较多,这里挑选较为重要的来讲解。4 k9 j: [; _8 q" W% }1 r

) F! f/ A( J2 G7 l6 V' ~) Z% u    (1)SPI_CR1:SPI 控制寄存器 1,如下图所示:0 F- K% v( D- d
6 D, F# Y* V% f5 |
   
) {. m& c& |5 U; b    图8
2 k2 t8 Z& f1 q8 v- i/ V$ Y    其中 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 个时钟跳边沿开始采集。
9 m$ y9 S% x& B    (2)SPI_SR:SPI 状态寄存器,如下图所示:) a$ q2 M& o% A% g6 ~5 G
. T% K3 [" X. J' w
   
% c2 B. ~% W1 C5 m+ V% r! ]. K8 G    图9
6 \# l7 F2 ]! @5 b    其中 TXE 是发送缓冲区状态位,该位为 0 时发送缓冲区非空,为 1 时发送缓冲区为空;RXNE 为接收缓冲区状态位,该位为 0 时接收缓冲区为空,该位为1 时,接收缓冲区为非空。% x( @& f1 f0 T& N: o
    (3)SPI_DR:SPI 数据寄存器,用于存储接收或者发送的数据。SPI_DR 的描述如下图所示:
3 m4 Z# Y( L2 J, s: l; A' p( C+ J  `& ^& O, ~( a: A" v
    ! ]4 U- B2 c* b
    图109 [( v) A6 `% X- R( I! U
    其中 DR[15:0]存放 SPI 数据。, Y& Z8 I( N% ]+ t1 `, C
    五、六轴传感器数据获取实验
0 m; s4 ^( ^4 A* @1 T# R7 ]: l. v- W% D2 l
    六轴传感器数据获取实验使用 STM32 的硬件 SPI 与六轴传感器 ICM20602 相连接,串口 1 即 UART1,通过 USB 转串口模块连接电脑,把 SPI 获取到的六轴数据通过串口 1 传输到电脑端的串口调试助手显示出来。做该实验的时候需要把视觉模组暂时取下,并且把 USB 转串口的线接到视觉模组接口处。六轴传感器 ICM20602 在无人机顶部的白色 RGB 彩灯盒里,通过软排把 SPI 及供电口接出,如下图所示。
& ~# \$ F& m, v& ^9 D+ E1 Y3 l# n- a6 H. ~
   
. O5 T. a! V: e8 ?    图11
/ b7 @3 K) P3 |+ K, c, h1 n    根据原理图,可以看到 ICM20602 的的 SPI 接口分别是:PB13、PA5、PA6、PA7,如下图所示。
" z) z( g+ J! B" ~: ^6 W) m% U" w$ c
      p$ o8 k7 r  ], W+ m4 U; O
    图12
7 [& Q1 r. c; G8 x' B+ [3 s    串口 1 的配置可以参考《串口(基础收发),配置代码(通过调用官方库) 获取 ICM20602 的数据代码编写的思路如下:; g5 s, f0 J3 a# N
6 @( y. ]; o4 z
    代码思路
7 f5 {( z# G- \4 a  f6 w$ e6 [( U- S- a/ y& D% ]% ?
   0 R, T. J8 q. H; c4 R/ n+ g$ s2 i
    表1
  F' k' m, W. L0 b+ V$ l" @    SPI 初始化代码如下:
2 t4 f7 D( f4 r
( Q( [( B& }2 O" g- m" k3 W     0 j: m! h! T- ?' v$ |
    图13
$ s$ s! z. x6 K, d# {    SPI 的读写代码如下。
$ a0 {; S& V1 ?; n* c, ]8 g
( n9 }; y5 B# S. H' E     8 N1 N: `& H. A- J4 X5 q6 t
    图14
6 M/ P( _; {0 q. I! w+ o- T; A    ICM20602 的初始化代码如下。
* L/ `* ?7 B! ^' C" s* @9 p! p3 W% U6 D9 }# }# y* x8 i
   
& i& v1 s9 Q9 M5 i0 G1 P- {  p    图15/ w: R: k; w* m$ `6 g6 y; n# }
    ICM20602 的读写代码如下。
+ L! j9 q; L: _9 [6 v
. _. E6 P7 k+ Y+ w8 B2 d- B    
. M, M, ?4 y7 P    图16% o; w+ i# x8 h+ J! V
    这里注意要把串口的发送也配置好,这样才能把数据发送到电脑。串口 1 通过 USB 转串口模块接到电脑,获取 ICM20602 代码如下。/ }3 [* Y: h- Z: T& g

' v$ t1 Q& }# R/ }
1 j% X8 v9 z# \+ s    7 Y2 V8 }* U  }+ ]
    图172 B9 |! B: U4 [8 P/ k
    保存、编译、下载代码,可以看到 USB 转串口模块在不断地打印 ICM206028 L) [, N: H0 J
    的 X 轴加速度高 8 位,数据如下图所示:
3 j% S8 C( \5 J. M- w' V" s' _, U$ i) }: @$ I- \! Z# G8 Y
   
5 _) c2 U7 K; b    图187 ~* {- Y2 h4 l3 V- e& V
9 H  @$ T" ~& F4 k6 }% Y+ g
7 }  ]. [7 K. j2 x3 d

; S( T6 T4 F% f  ]% L6 {9 H    配套资料:http://www.fengke.club
% ?* s! `, k6 R8 ^& y    套件地址:http://shop115904315.taobao.com 6 o: u4 G5 l( \, y: f
    文件下载请点击: 【6】SPI(六轴传感器数据获取).pdf (1.19 MB, 下载次数: 1) : A8 [$ X; b% a9 g+ d5 I

* A" J8 P4 h7 v1 U! z9 q& l+ C# b" S$ L$ \6 b/ n/ k

该用户从未签到

2#
发表于 2022-7-12 11:01 | 只看该作者
此协议还是比较浅显易懂的8 j; a8 _) R1 {2 z
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-22 07:05 , Processed in 0.125000 second(s), 26 queries , Gzip On.

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

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

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