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

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

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

: b. R  p9 k' N% d
8 x+ l- U& S0 V" w9 {& i, d: K) X; H9 N- E8 b+ P
+ Z! Z/ z& a4 U" {8 R# Q4 A. g, w
: U6 o0 d' B" I* k8 k

8 T* D1 X5 ]# f. F
       开发套件包括一个可直接使用的微控制器系统板,板上集成了STM32F303微控制器和相关芯片,以及LED指示灯、按钮、I/O排针和连接PC的USB接口。微控制器的所有引脚都可扩展至无障碍检测点,便于检测和调试应用设计。
; z* ~6 q) R& [% r5 z' k( M; Z
      板载MEMS传感器是L3GD20(3轴数字陀螺仪)和LSM303DLHC(6轴地磁传感器)模块,分别来自意法半导体宽广的MEMS传感器产品组合和iNEMO惯性模块。STM32F3 开发套件与Altium、Atollic、IAR、Keil等领先的第三方软件工具厂商提供的STM32软件开发环境相兼容。
+ G4 h' A1 O' L. I: `2 R: D: B# y
      今天我们学习的就是基于Keil开发环境进行的。

2 X- g, J7 {% Z- s! d
      首先,拿到开发板之后,确保JP3和CN4是连接的,上电后会发现LD1长亮,LD2闪烁:
7 b4 A; ~0 @# `2 a9 ^
      1,             点击USER按钮后,陀螺仪开始启动,8颗LED根据陀螺仪的变化开始闪烁不同效果。
3 a! C: D! L9 O9 w
      2,             再次点击USER按钮后,电子罗盘开始启动,开发板水平放置时,总有1颗LED指向北方。

+ }% C7 ?' M+ X; @$ a! ?: o
      OK,一个小小的演示完成了,很炫吧!

7 i# `! D) X3 c6 G1 V6 B1 n% ?% z
      STLink驱动的下载地址:http://www.st.com/internet/evalboard/product/251168.jsp
! J0 `! h. O  q% Y2 V
      注意:安装完软件后,需要重新启动电脑才能生效。

% ^+ U. G* D% x4 F* K7 w' Z* s% k
9 }9 T1 d6 S, ^) `2 H# X
      官方提供了例程和模板如图:

0 t7 M) \/ V. {5 G
& O+ P7 t+ H$ p: W3 |% f" r6 @$ \; p1 M$ T  c6 R) c

2 t1 N/ f$ ~3 E: H4 k* l; E7 h 6 n7 g6 d9 U  ^$ E9 L, c% z
      打开模版里的工程,选择的是MDK-ARM目录下的工程,(不需要配置,因为是已经配置好的)连接上开发板,编译链接、下载程序到开发板中。 开发板此时只有四个led轮流点亮,则证明下载程序成功。
% l( c% o% o2 r+ v/ C; l
8 L9 j% k0 z$ q' _( n

& [( n( G6 [( J, D% H
实验一 UART通讯
; B% U5 J$ M) j5 x2 J6 F
6 ]3 N% }0 O* Y. f2 A
      首先,我们看一下如何使用Example文件夹里的例子。打开STM32F30x_StdPeriph_Examples文件夹,会看到有25个例子(ADC、DMA、I2C等),打开ADC文件夹,把里面的所有文件复制,粘贴到STM32F30x_StdPeriph_Templates文件夹里,如下图所示,然后用Keil打开并编译即可。
# k+ [8 W4 `. b* ^
/ ?/ \' R: j: h" u

5 ~1 A4 j6 ?" z$ i) R$ H+ l
. F  @9 v1 U; a' {6 @0 r
: Q2 x" t/ b# B
0 [( h/ w* K! G9 y
      当我们把USART文件夹里的USART_Printf内所有内容拷贝到STM32F30x_StdPeriph_Templates文件夹后,编译运行会在串口调试助手里看到:
- A% X- S3 ~* y9 x
2 r& _7 l% ~) H4 M8 |

9 ?/ x, l% }" y2 z- z4 h% |
" Z( N  i6 c& [2 |5 R/ A+ k/ P1 p 7 k# b4 K& a, b

6 S2 J- Z4 g: I+ ?& E* P) c' X
USARTx 配置信息:

) n/ t8 t8 u) j4 J! o
        -BaudRate = 115200 baud  

/ ^, s0 Q2 a9 y5 L! F' S8 Y& U
        - WordLength = 8 Bits

. [6 n) z% _9 e9 ~" y" a9 H
        - OneStop Bit

1 [) ^9 E2 E7 \3 s8 |
        - Noparity
$ t6 d4 p- m* K7 H1 t
        -Hardware flow control disabled (RTS and CTS signals)
! _; n' n, R1 H1 _
        - Receive and transmit enabled
; u# i& i! j- M" J( k& K
硬件连接:

3 [& H6 K, A# ]) z9 I" S  Y
       RX_PIN:GPIOE_1

2 U# `3 F& s  I
       TX_PIN:GPIOC_1
% _8 K$ r$ }) |, t
      接下来,我们分析一下代码含义,找到时钟配置函数:
. y  J+ q) E2 N0 q9 M. [5 I6 c7 O
      在system_stm32f30x.c文件里的SystemInit( )是系统初始化函数,最先运行的,它的作用是FPU设定、复位关键寄存器、配置系统时钟、映射RAM中断向量表。
2 t- H; P: y  q. Z6 Q2 N; b
      SetSysClock( )是配置系统时钟函数,对内外部时钟及PLL进行了设置,用户可以在这里进行改变。
/ b4 u0 ^' R' n- j# G9 }

0 W" q2 F7 D: q% F
) ?; b7 z. b% i4 o

. I9 I7 a8 D0 s

5 ?) ~  [1 w" V: B4 O; E

$ Y( V  Z# E& _2 W/ `& a9 e

3 {! e+ `4 i* ?' _: ~3 G
实验二 MEMS陀螺仪
2 l. ]8 M8 V1 F- Q3 B
  C" A0 s7 y1 z9 w) W6 ^9 e
       基于MEMS(MEMS是微机电系统“Micro-Electro-Mechanical Systems”的英文缩写)的陀螺仪价格相比光纤或者激光陀螺便宜很多,但使用精度非常低,需要使用参考传感器进行补偿,以提高使用精度。
& I. f* \' J2 ^6 B* R0 s0 a
       基于MEMS 技术的陀螺仪因其成本低,能批量生产,目前已经能够广泛应用于汽车牵引控制系统、医用设备、军事设备等低成本需求应用中。
+ I9 v6 j. H9 |. O0 _

* b7 R. E+ |* T' H: V3 z
1. MEMS陀螺仪工作原理
- ?0 t" ?, b) _6 v7 {, G8 [2 |4 U* `
       MEMS陀螺仪利用科里奥效应测量运动物体的角速率,如下图所示。

2 G+ R6 r& ^3 o9 u6 _1 h! b
* K. K' S/ C4 }, t# m4 b! Y1 X* \2 ~2 J" K4 x+ T. ?) S  W

- p9 s, d) c  @$ Z7 f& \4 R 5 S3 `( U) T$ `( U
& K* {& I4 J- `6 d: w% p
       根据科里奥效应,当一个物体(m)沿(V)方向运动且施加角旋转速率(Ω)时,该物体将受到一个黄色箭头方向的力。然后,从一个电容感应结构可以测到科里奥效应最终产生的物理位移。

  [- A( x( h4 N9 s: L9 h1 U7 J
' r* Z5 |$ W, Q" _1 `  t/ f4 H2 p
2.MEMS陀螺仪应用

6 Z( r8 C7 ^7 n7 N3 s$ a& e
       ● MEMS陀螺仪能够测量角速率。数码相机使用陀螺仪检测人手的旋转运动,能够对图像起到稳定的作用。

2 N! l# L+ J8 H7 U
       ● 当汽车导航系统无法接收GPS卫星信号时,偏航陀螺仪能够测量汽车的方位,使汽车始终沿电子地图的规划路线行驶,这个功能被称之为航位推测系统。

$ O. |$ C9 L8 l/ }2 {3 A
       在汽车上,偏航陀螺仪可以开启电子稳定控制(ESC)制动系统,防止汽车急转弯时发生意外事故。当汽车出现翻滚状况时,滚转陀螺仪可以引爆安全气囊。
! ~! q% H8 |+ ?
       ● 偏航陀螺仪还能用于室内机器人控制。

# x5 k" P; e+ Q# ^
       ● 安装在机器人四肢上的多路惯性测量单元(IMU)能够跟踪和监测身体运动。
2 K: F/ _8 |$ M" [. K

" u& ^* C. \# O8 ~( m- q
3.MEMS陀螺仪测试

7 G$ ]/ Z1 r3 h; X
       在陀螺仪校准后,应测试陀螺仪的性能,了解如何从陀螺仪原始数据中获取有价值的角位移信息。

, a! h0 @! c5 j6 t0 |5 m, x: W3 X
       下面是板载陀螺仪L3GD20的特性:

3 G8 H+ r4 O- I7 o) k4 S
       ·        Three selectablefull scales (250/500/2000 dps)
' m$ y4 m: E6 O
       ·        I2C/SPIdigital output interface

" J: P0 U2 {4 [: I: V. `
       ·        16 bit-rate valuedata output

; Q- q- s: n- T8 v9 q, i
       ·        8-bit temperaturedata output

1 X1 n# v6 w7 N  F/ O: ]8 E
       ·        Two digital outputlines (interrupt and data ready)
  J7 b6 {1 C% O
       ·        Integrated low-and high-pass filters with user-selectable bandwidth

' W( }2 Z& ]% ]5 _2 S' T' c
       ·        Wide supplyvoltage: 2.4 V to 3.6 V

1 b* q& W7 ~* O* c& |6 `
       ·        Lowvoltage-compatible IOs (1.8 V)
( x0 l0 d8 b4 o/ s( @
       ·        Embeddedpower-down and sleep mode

1 E: y( P2 U6 B" _5 U1 j* Q1 D
       ·        Embeddedtemperature sensor

6 w+ a' G* E1 T, D
       ·        Embedded FIFO

& O+ l# R- T& c$ n
       ·        High shocksurvivability
+ N  z4 H& X: L2 A0 n
       ·        Extended operatingtemperature range (-40 °C to +85 °C)
7 q4 Q. D! b; v/ J! v5 G& b
       ·        ECOPACK® RoHS and“Green” compliant
% A: F' s1 V; W- i9 ~( }: |
8 o% [8 c" e1 J5 ]9 S
       打开Demonstration文件夹里的工程,main.c文件里:

- ]% g7 h$ X) ]3 Q2 r# T
       #define L3G_Sensitivity_250dps     (float)  114.285f
' O- \" n/ M1 X% \* o
       #define L3G_Sensitivity_500dps     (float)  57.1429f
- k5 |+ {. j$ x, h' C8 p* L# Q
       #define L3G_Sensitivity_2000dps    (float)   14.285f  

# A- J9 b& D1 S
       宏定义了在不同情况下的陀螺仪分辨率。
6 z1 [/ e7 {. K+ N1 F
* S! v% U3 ?: F- B$ d( f
       第161行,Demo_GyroConfig( )函数对陀螺仪进行了初始化

" K/ s& `2 v/ X
       下面介绍陀螺仪的结构体,里面存储了关键的参数
0 `! ]" |$ Z+ J2 S
/* L3GD20struct */

& ~! q, }0 z- X6 H+ z
typedefstruct

: b, C8 X3 D, j- [* C; [9 [" C0 _
{
. o0 f4 H7 p! }+ k8 l' M7 x
  uint8_t Power_Mode;                        /* 电源模式选择 */

5 B$ I" V/ B" O5 Q0 _& o9 L& q
  uint8_t Output_DataRate;                     /* 输出速率     */
! p) f8 G! y) @7 q
  uint8_t Axes_Enable;                        /* 坐标轴时能   */
4 M' C# s: _9 Y! U4 i
  uint8_t Band_Width;                        /* 带宽选择     */
) S+ Q" T0 D2 r" P
  uint8_t BlockData_Update;                   /* 快数据更新   */
" \3 s* N! }: F3 x4 a. B& X
  uint8_t Endianness;                         /* 大小端数据选择 */
- z' u  L/ o; V% A( X' [3 A
  uint8_t Full_Scale;                         /* 分辨率选择 */
2 d: K$ v4 T. o* _
}L3GD20_InitTypeDef;
% l* j/ s2 L$ l$ s. b5 g
- m- {7 K! L+ E
       那么,我们如何读到陀螺仪的值,通过Demo_GyroReadAngRate(Buffer)函数,在477行。在487       行,L3GD20_Read(tmpbuffer,L3GD20_OUT_X_L_ADDR,6)用于读取X轴的角度。
: Q4 R! X+ |3 P/ a- C0 ]
; _7 e" l5 }2 k7 x
voidDemo_GyroReadAngRate (float* pfData)
+ c, H. y$ B0 l& V8 X
{

4 `: |/ I- y: E/ F8 k
  uint8_t tmpbuffer[6] ={0};

5 v$ q- d& c; P3 [: [6 c. f" {( Z
  int16_t RawData[3] = {0};

6 Z( {7 j; \9 `0 u
  uint8_t tmpreg = 0;

, m( c: m& ~8 V5 d
  float sensitivity = 0;
% y' u# P9 `4 G
  int i =0;
6 k5 p9 _, |( C. T. L+ m
3 h$ B% P# L, K# j
/* 检测 controlregister 4 数据是大端还是小端存储的*/

4 Z- o- S* \2 E- h/ ?7 J4 @
L3GD20_Read(&tmpreg,L3GD20_CTRL_REG4_ADDR,1);
' D0 N7 J- |& L/ J' A6 ?2 W
  /* 读取X轴的角度 */

  m6 H+ V5 g: b+ x- J% G
  L3GD20_Read(tmpbuffer,L3GD20_OUT_X_L_ADDR,6);

2 O: B; g2 B6 ?. K5 _
  /* 如果是小端模式 */

0 D, v* D& n* K4 Z( F) q
    if(!(tmpreg & 0x40))

& T# T) c8 B% T/ m# _% k/ ]
  {
: R+ x3 d. h, ]
2 A' E$ {6 E7 B* c- G& N
    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
学习了,谢谢楼主
& D9 T" K) `6 O: N$ F; J5 M有源码就更好啦
书剑飘零 回答时间: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 手机版