你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【STM32F3开发日志】从零开始学STM32F3系列单片机--陀螺仪

[复制链接]
reayfei-119372 发布时间:2013-2-28 11:12
从零开始学STM32F3系列单片机
; T$ h' g, |- \
       STM32 F3开发套件内置陀螺仪和电子罗盘—9个自由度(DOF)MEMS传感器,结合新系列微控制器的先进信号处理和计算功能,可实现具有价格竞争力的传感器融合应用,例如航姿参考系统(Attitude HeadingReference Systems ,AHRS)。传感器融合应用结合强大的计算性能,让设计人员能够在移动游戏、增强实境、光学图像防抖功能、便携式导航系统、机器人和工业自动化系统中实现先进的3D运动检测系统。

* M( l6 m* C6 C% z+ ?' L
& M- c5 c: ~* o2 \
* A* J9 e4 F3 s2 u7 c9 Y3 w+ \9 R( v6 h$ `' R7 t* ^1 k6 w6 E
: j1 k" D: w( y- f
$ m& g" e7 G- D- R4 W: O) H2 |
       开发套件包括一个可直接使用的微控制器系统板,板上集成了STM32F303微控制器和相关芯片,以及LED指示灯、按钮、I/O排针和连接PC的USB接口。微控制器的所有引脚都可扩展至无障碍检测点,便于检测和调试应用设计。
% ?' K$ n  u, Q0 `
      板载MEMS传感器是L3GD20(3轴数字陀螺仪)和LSM303DLHC(6轴地磁传感器)模块,分别来自意法半导体宽广的MEMS传感器产品组合和iNEMO惯性模块。STM32F3 开发套件与Altium、Atollic、IAR、Keil等领先的第三方软件工具厂商提供的STM32软件开发环境相兼容。

8 v7 u# Y' q4 i4 ~+ v
      今天我们学习的就是基于Keil开发环境进行的。
6 }) h- j) j0 Q3 Q. T: ]9 D
      首先,拿到开发板之后,确保JP3和CN4是连接的,上电后会发现LD1长亮,LD2闪烁:

+ T9 O9 B' f1 Q' K& M
      1,             点击USER按钮后,陀螺仪开始启动,8颗LED根据陀螺仪的变化开始闪烁不同效果。
4 w2 ^: l8 m' j
      2,             再次点击USER按钮后,电子罗盘开始启动,开发板水平放置时,总有1颗LED指向北方。

3 C9 k; ^! @' m6 c" J4 A' D& O
      OK,一个小小的演示完成了,很炫吧!

4 c$ s3 z0 S9 m/ y
      STLink驱动的下载地址:http://www.st.com/internet/evalboard/product/251168.jsp

( K2 b. E7 n7 z3 e& T$ u+ T! a2 y
      注意:安装完软件后,需要重新启动电脑才能生效。

! R% }* U/ m7 R+ Y8 t' }! ^
; v( M. M0 _1 r$ I" c. v
      官方提供了例程和模板如图:
' V) U3 o" I! F' [3 L. l# @2 |; x
* w1 [5 i: b2 b" T/ H7 u$ R' m8 w
3 _2 V/ B3 \5 L2 ~+ O* H

+ _* d9 \7 Y" f; e- X# ?' \ # @2 p/ {1 {7 V4 X1 o1 q
      打开模版里的工程,选择的是MDK-ARM目录下的工程,(不需要配置,因为是已经配置好的)连接上开发板,编译链接、下载程序到开发板中。 开发板此时只有四个led轮流点亮,则证明下载程序成功。

( |* `8 s1 E/ F- |( l8 ^
. X4 Q( j3 [8 l& A% y# b 5 r0 k+ U6 x0 N
实验一 UART通讯
% X7 U, `. ~; n# O9 r# ?
1 ~8 q1 c- v  ?3 J  O
      首先,我们看一下如何使用Example文件夹里的例子。打开STM32F30x_StdPeriph_Examples文件夹,会看到有25个例子(ADC、DMA、I2C等),打开ADC文件夹,把里面的所有文件复制,粘贴到STM32F30x_StdPeriph_Templates文件夹里,如下图所示,然后用Keil打开并编译即可。
! q/ ^% C- Y7 e* D* c. R* z( O

' ?. v' F; D0 ~- n8 z$ U- }# Y- n1 J  S# V

# q$ w  A2 Y$ u0 A
0 {3 r  h1 M1 M( a 3 S8 a( ?* _  H: s
      当我们把USART文件夹里的USART_Printf内所有内容拷贝到STM32F30x_StdPeriph_Templates文件夹后,编译运行会在串口调试助手里看到:
  {! J# N+ c2 k# X

: R& f5 i* t5 c  y$ X4 {: s) k( R# b; u9 @" l8 {7 l

. V, i) ^. [% A+ p5 J & X# b  T0 l0 u: X& \3 I

  s- T" F+ G, }6 g5 a5 x0 B  j
USARTx 配置信息:

% r* N6 ]) u8 _* Z: q& g$ ~
        -BaudRate = 115200 baud  
/ C" Y$ x+ _9 @9 e
        - WordLength = 8 Bits
6 B& i7 e6 V& ]* L
        - OneStop Bit
# C8 c& ]2 a) l8 x& r* G
        - Noparity

" @" ^/ L7 i! X  v2 l
        -Hardware flow control disabled (RTS and CTS signals)
. L* d- d, e( [  w  {% K8 G& ^. X
        - Receive and transmit enabled

+ x! y3 x/ b3 \; O7 f# C4 {
硬件连接:
' ^: h9 _; k! E- @8 j0 ^2 y
       RX_PIN:GPIOE_1
9 q5 L& ^9 \, e% G1 ~8 S4 ]+ `2 _2 ^
       TX_PIN:GPIOC_1
( d6 a( ?6 |* q; S9 E
      接下来,我们分析一下代码含义,找到时钟配置函数:
; s. j/ H4 |1 H! x: e; w
      在system_stm32f30x.c文件里的SystemInit( )是系统初始化函数,最先运行的,它的作用是FPU设定、复位关键寄存器、配置系统时钟、映射RAM中断向量表。

8 G1 n* W0 N  f1 |  j' w' H
      SetSysClock( )是配置系统时钟函数,对内外部时钟及PLL进行了设置,用户可以在这里进行改变。
& y  g4 ]; ]2 O+ S1 r
& E8 m; V4 B% ?; a* M* p4 p

& Y4 d% S. [3 Y, n
, _/ D/ c5 o* a0 g" `7 X! X

8 b! T9 c& p& |% F' D  l
1 {2 X, Z1 E- i; R) B

  Q8 t# L9 L% ^& @
实验二 MEMS陀螺仪

3 j+ }- U3 k9 k' G
$ r- e' o  D0 H! Q* o. {( k' o
       基于MEMS(MEMS是微机电系统“Micro-Electro-Mechanical Systems”的英文缩写)的陀螺仪价格相比光纤或者激光陀螺便宜很多,但使用精度非常低,需要使用参考传感器进行补偿,以提高使用精度。
; g6 X" `% q, P" S" t8 K% }9 c
       基于MEMS 技术的陀螺仪因其成本低,能批量生产,目前已经能够广泛应用于汽车牵引控制系统、医用设备、军事设备等低成本需求应用中。
- |( s9 _3 z, y3 o) T
+ Q' u# N; ^( l% i9 r( v
1. MEMS陀螺仪工作原理

0 m; M0 R7 t" s
       MEMS陀螺仪利用科里奥效应测量运动物体的角速率,如下图所示。

1 Z) B* u2 Y! M# }" ~' o# p7 P
+ P2 B( D  l+ d+ T1 R! U7 u5 H: X2 t% c5 b, Y# S
3 Z$ C1 B0 z+ r! q

7 \" o5 S& x0 g) k7 _1 U # V7 S7 A8 x8 X/ i/ s
       根据科里奥效应,当一个物体(m)沿(V)方向运动且施加角旋转速率(Ω)时,该物体将受到一个黄色箭头方向的力。然后,从一个电容感应结构可以测到科里奥效应最终产生的物理位移。

6 E2 p: n, [7 O) \ $ t/ L( ?5 A6 g" [
2.MEMS陀螺仪应用
. ?. J+ M7 ]; T# C
       ● MEMS陀螺仪能够测量角速率。数码相机使用陀螺仪检测人手的旋转运动,能够对图像起到稳定的作用。
. }1 A; N  h  |5 W  a
       ● 当汽车导航系统无法接收GPS卫星信号时,偏航陀螺仪能够测量汽车的方位,使汽车始终沿电子地图的规划路线行驶,这个功能被称之为航位推测系统。

- @& Q4 j9 T  a/ i
       在汽车上,偏航陀螺仪可以开启电子稳定控制(ESC)制动系统,防止汽车急转弯时发生意外事故。当汽车出现翻滚状况时,滚转陀螺仪可以引爆安全气囊。

; g& \' V8 d9 B9 j5 \
       ● 偏航陀螺仪还能用于室内机器人控制。

7 H3 s/ {& p, N' {
       ● 安装在机器人四肢上的多路惯性测量单元(IMU)能够跟踪和监测身体运动。
1 ^, [  E& }* e8 P  b& Q; X  E

! ?! j& Z& @  y+ D+ P% `9 ?# o
3.MEMS陀螺仪测试

: h" b# K1 a' M0 {! m/ ^
       在陀螺仪校准后,应测试陀螺仪的性能,了解如何从陀螺仪原始数据中获取有价值的角位移信息。

1 j7 b/ C& f& J" Z1 K
       下面是板载陀螺仪L3GD20的特性:
' ^2 J8 o7 k  ^$ u
       ·        Three selectablefull scales (250/500/2000 dps)

4 X) H4 a5 ~- X
       ·        I2C/SPIdigital output interface
. a& R: J' h3 t
       ·        16 bit-rate valuedata output
( f) i# G- R1 S: R
       ·        8-bit temperaturedata output

8 Y2 U) \7 H/ ~. Q* l1 F
       ·        Two digital outputlines (interrupt and data ready)
, O3 ?% f1 \$ l* X' X
       ·        Integrated low-and high-pass filters with user-selectable bandwidth
, R/ X1 d, H3 A7 g* L' [
       ·        Wide supplyvoltage: 2.4 V to 3.6 V
% U6 v  Q- R) T6 e9 }' C
       ·        Lowvoltage-compatible IOs (1.8 V)

2 `" z+ @# S" P: U+ e; s% u+ R, E/ E
       ·        Embeddedpower-down and sleep mode
" Y" }% s% m0 r- J% l, [3 O
       ·        Embeddedtemperature sensor
; ?9 h4 V- K: M6 _+ ^5 P2 K1 x& K
       ·        Embedded FIFO
, O5 U( J& I4 Z4 H
       ·        High shocksurvivability

' X' F& c4 F! s, W. H; N6 Y5 Z
       ·        Extended operatingtemperature range (-40 °C to +85 °C)
* W" V2 r5 h3 o; }- S: M& t3 I
       ·        ECOPACK® RoHS and“Green” compliant

9 T9 l7 }9 c( d5 ^0 d + E) i) k$ [  E
       打开Demonstration文件夹里的工程,main.c文件里:

4 @; _7 Z8 p# ?
       #define L3G_Sensitivity_250dps     (float)  114.285f

: i! C9 v+ S5 l, ]1 _3 f0 ^
       #define L3G_Sensitivity_500dps     (float)  57.1429f

  K3 v0 N( p3 Y, U4 j! Q( K( C
       #define L3G_Sensitivity_2000dps    (float)   14.285f  
0 ?7 ~: ^% _6 o* w
       宏定义了在不同情况下的陀螺仪分辨率。

+ h4 Q. X3 O& I+ ]3 F
( Z3 Q7 g; n* |9 l
       第161行,Demo_GyroConfig( )函数对陀螺仪进行了初始化
$ v& ?! ?5 b& u% z3 r( Q, ]- t  |
       下面介绍陀螺仪的结构体,里面存储了关键的参数

( _. f7 R3 f0 U5 F
/* L3GD20struct */

: o$ e0 V/ j; t& r
typedefstruct

$ c7 A1 c% ?  I7 ]% C7 j8 ~
{

2 Z) ^( ~5 x6 i% W* V1 c6 r& Y% Q
  uint8_t Power_Mode;                        /* 电源模式选择 */
5 ^$ l" H$ T4 b5 h% S8 U% R9 z  ]
  uint8_t Output_DataRate;                     /* 输出速率     */
, i) S5 K: |/ J+ V0 i! G7 K
  uint8_t Axes_Enable;                        /* 坐标轴时能   */
0 w, V1 c6 n+ h! b8 L
  uint8_t Band_Width;                        /* 带宽选择     */
% X- P; E' H  \
  uint8_t BlockData_Update;                   /* 快数据更新   */
" w- ?* G* r& c; w; `; m* u7 }
  uint8_t Endianness;                         /* 大小端数据选择 */

  A/ @* {" R7 I* s
  uint8_t Full_Scale;                         /* 分辨率选择 */

# S# B( O7 C& ?# T+ R& ]
}L3GD20_InitTypeDef;
9 N9 x3 X' n! u1 u" T

  P) q/ v( b8 I( G  A4 x
       那么,我们如何读到陀螺仪的值,通过Demo_GyroReadAngRate(Buffer)函数,在477行。在487       行,L3GD20_Read(tmpbuffer,L3GD20_OUT_X_L_ADDR,6)用于读取X轴的角度。

. y4 A. _9 ?+ ]  B
0 G& I5 T' n0 W. l0 [9 ]2 b5 g2 W, n
voidDemo_GyroReadAngRate (float* pfData)

  B3 b8 _" {. v4 I4 A
{
; k& ?& d. Q! V" B
  uint8_t tmpbuffer[6] ={0};

& g0 ^0 @0 Y2 a) E% b
  int16_t RawData[3] = {0};
1 p' o5 ?: I' k  z2 x
  uint8_t tmpreg = 0;

& T4 y4 j; W! z5 x0 i/ Q
  float sensitivity = 0;

$ K' G0 L" w) T/ T, s0 E4 D
  int i =0;
; s8 V7 s' S- N" e6 {8 D
* P5 M) s3 L5 d& ]& d9 Y3 B
/* 检测 controlregister 4 数据是大端还是小端存储的*/

. b3 p( z8 [$ z( p2 b3 L
L3GD20_Read(&tmpreg,L3GD20_CTRL_REG4_ADDR,1);
9 p$ }/ D8 r. q1 d0 ]
  /* 读取X轴的角度 */

8 j* O- K$ j. C
  L3GD20_Read(tmpbuffer,L3GD20_OUT_X_L_ADDR,6);

* B; S) I: Z% ^$ W& P5 W
  /* 如果是小端模式 */
# F4 N5 s* ~/ e7 d
    if(!(tmpreg & 0x40))
) d5 t" p) y6 S! g$ ?
  {
1 M& o0 x  o; l% z& t& _

& @9 x0 m3 S1 j& Q8 E. h# o8 x    for(i=0; i

实验二 MEMS 陀螺仪.pdf

下载

161.9 KB, 下载次数: 187

从零开始学STM32F3系列单片机.pdf

下载

236.29 KB, 下载次数: 171

L3GD20_陀螺仪数据手册.pdf

下载

1.54 MB, 下载次数: 202

STM32F3用户手册.pdf

下载

1.38 MB, 下载次数: 200

MEMS陀螺仪技术简介.pdf

下载

1.93 MB, 下载次数: 173

赞 收藏 1 评论22 发布时间:2013-2-28 11:12

举报

22个回答
归依龙井 回答时间:2017-8-2 21:42:06
学习了,谢谢楼主4 o% R# k' ?5 P' \$ e
有源码就更好啦
书剑飘零 回答时间:2013-2-28 12:35:48

RE:从零开始学STM32F3系列单片机--陀螺仪

很好,学习了
dlyt03 回答时间:2013-2-28 13:18:42

RE:从零开始学STM32F3系列单片机--陀螺仪

学习下
IC爬虫 回答时间:2013-2-28 23:30:40

RE:从零开始学STM32F3系列单片机--陀螺仪

看看
IC爬虫 回答时间:2013-2-28 23:52:30

RE:从零开始学STM32F3系列单片机--陀螺仪

做串口实验的时候除了ST-LINK那一条线外,还需要别USB转串口线吗?
IC爬虫 回答时间:2013-2-28 23:52:50

RE:从零开始学STM32F3系列单片机--陀螺仪

官方提供的例程和模板在哪里可以下载到呢?官方网站找不到啊。
tjCFeng 回答时间:2013-3-1 09:13:40

RE:从零开始学STM32F3系列单片机--陀螺仪

学习学习。。。。。。。。
qiaoyang123 回答时间:2013-3-1 13:26:35

RE:从零开始学STM32F3系列单片机--陀螺仪

学习学习。。。。。。。。
reayfei-119372 回答时间:2013-3-4 12:03:26

RE:从零开始学STM32F3系列单片机--陀螺仪

顶一个
sacq12 回答时间:2013-3-4 14:45:01

RE:从零开始学STM32F3系列单片机--陀螺仪

值得学习
BLUE脚印 回答时间:2013-3-5 13:44:12

RE:从零开始学STM32F3系列单片机--陀螺仪

马克一下
nemon 回答时间:2013-3-6 15:23:49

回复:从零开始学STM32F3系列单片机--陀螺仪

楼主辛苦了
liuy911 回答时间:2013-3-10 17:20:14

RE:从零开始学STM32F3系列单片机--陀螺仪

ddddddddddddddddddddd
liuyu-419812 回答时间:2013-3-10 23:28:26

回复:从零开始学STM32F3系列单片机--陀螺仪

学习了,很好。。。。
reayfei-119372 回答时间:2013-3-20 11:14:18

RE:从零开始学STM32F3系列单片机--陀螺仪

顶一个
12下一页

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版