|
从零开始学STM32F3系列单片机 6 b: I4 y1 ^" `* F: U. s STM32 F3开发套件内置陀螺仪和电子罗盘—9个自由度(DOF)MEMS传感器,结合新系列微控制器的先进信号处理和计算功能,可实现具有价格竞争力的传感器融合应用,例如航姿参考系统(Attitude HeadingReference Systems ,AHRS)。传感器融合应用结合强大的计算性能,让设计人员能够在移动游戏、增强实境、光学图像防抖功能、便携式导航系统、机器人和工业自动化系统中实现先进的3D运动检测系统。 & 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 开发套件包括一个可直接使用的微控制器系统板,板上集成了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开发环境进行的。 首先,拿到开发板之后,确保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指向北方。 OK,一个小小的演示完成了,很炫吧! STLink驱动的下载地址:http://www.st.com/internet/evalboard/product/251168.jsp ! J0 `! h. O q% Y2 V 注意:安装完软件后,需要重新启动电脑才能生效。 官方提供了例程和模板如图: $ \; p1 M$ T c6 R) c 6 n7 g6 d9 U ^$ E9 L, c% z 打开模版里的工程,选择的是MDK-ARM目录下的工程,(不需要配置,因为是已经配置好的)连接上开发板,编译链接、下载程序到开发板中。 开发板此时只有四个led轮流点亮,则证明下载程序成功。 % l( c% o% o2 r+ v/ C; l8 L9 j% k0 z$ q' _( n 实验一 UART通讯 ; B% U5 J$ M) j5 x2 J6 F6 ]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 当我们把USART文件夹里的USART_Printf内所有内容拷贝到STM32F30x_StdPeriph_Templates文件夹后,编译运行会在串口调试助手里看到: - A% X- S3 ~* y9 x2 r& _7 l% ~) H4 M8 | 7 k# b4 K& a, b USARTx 配置信息: -BaudRate = 115200 baud - WordLength = 8 Bits - OneStop Bit - 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硬件连接: RX_PIN:GPIOE_1 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 }实验二 MEMS陀螺仪 2 l. ]8 M8 V1 F- Q3 BC" 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 _1. MEMS陀螺仪工作原理 - ?0 t" ?, b) _6 v7 {, G8 [2 |4 U* ` MEMS陀螺仪利用科里奥效应测量运动物体的角速率,如下图所示。 2 ~2 J" K4 x+ T. ?) S W 5 S3 `( U) T$ `( U & K* {& I4 J- `6 d: w% p 根据科里奥效应,当一个物体(m)沿(V)方向运动且施加角旋转速率(Ω)时,该物体将受到一个黄色箭头方向的力。然后,从一个电容感应结构可以测到科里奥效应最终产生的物理位移。 2.MEMS陀螺仪应用 ● MEMS陀螺仪能够测量角速率。数码相机使用陀螺仪检测人手的旋转运动,能够对图像起到稳定的作用。 ● 当汽车导航系统无法接收GPS卫星信号时,偏航陀螺仪能够测量汽车的方位,使汽车始终沿电子地图的规划路线行驶,这个功能被称之为航位推测系统。 在汽车上,偏航陀螺仪可以开启电子稳定控制(ESC)制动系统,防止汽车急转弯时发生意外事故。当汽车出现翻滚状况时,滚转陀螺仪可以引爆安全气囊。 ! ~! q% H8 |+ ? ● 偏航陀螺仪还能用于室内机器人控制。 ● 安装在机器人四肢上的多路惯性测量单元(IMU)能够跟踪和监测身体运动。 2 K: F/ _8 |$ M" [. K3.MEMS陀螺仪测试 在陀螺仪校准后,应测试陀螺仪的性能,了解如何从陀螺仪原始数据中获取有价值的角位移信息。 下面是板载陀螺仪L3GD20的特性: · Three selectablefull scales (250/500/2000 dps) ' m$ y4 m: E6 O · I2C/SPIdigital output interface · 16 bit-rate valuedata output · 8-bit temperaturedata output · Two digital outputlines (interrupt and data ready) J7 b6 {1 C% O · Integrated low-and high-pass filters with user-selectable bandwidth · Wide supplyvoltage: 2.4 V to 3.6 V · Lowvoltage-compatible IOs (1.8 V) ( x0 l0 d8 b4 o/ s( @ · Embeddedpower-down and sleep mode · Embeddedtemperature sensor · Embedded FIFO · 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文件里: #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 宏定义了在不同情况下的陀螺仪分辨率。 6 z1 [/ e7 {. K+ N1 F* S! v% U3 ?: F- B$ d( f 第161行,Demo_GyroConfig( )函数对陀螺仪进行了初始化 下面介绍陀螺仪的结构体,里面存储了关键的参数 0 `! ]" |$ Z+ J2 S/* L3GD20struct */ typedefstruct { . o0 f4 H7 p! }+ k8 l' M7 x uint8_t Power_Mode; /* 电源模式选择 */ 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{ uint8_t tmpbuffer[6] ={0}; int16_t RawData[3] = {0}; uint8_t tmpreg = 0; float sensitivity = 0; % y' u# P9 `4 G int i =0; 6 k5 p9 _, |( C. T. L+ m3 h$ B% P# L, K# j /* 检测 controlregister 4 数据是大端还是小端存储的*/ L3GD20_Read(&tmpreg,L3GD20_CTRL_REG4_ADDR,1); ' D0 N7 J- |& L/ J' A6 ?2 W /* 读取X轴的角度 */ L3GD20_Read(tmpbuffer,L3GD20_OUT_X_L_ADDR,6); /* 如果是小端模式 */ if(!(tmpreg & 0x40)) { : R+ x3 d. h, ]2 A' E$ {6 E7 B* c- G& N for(i=0; i |
DMA 原理从 0 到 1:为什么它能解放 CPU?一文讲透 DMA 的工作流程
基于STM32F303双电机FOC驱动: 无感原理图/BOM表/代码等开源...
stm32cube_pwm配置
stm32f334驱动1.69寸SPI LED屏
stm32f334c8t6实现一个简单的温度湿度检测器
stm32f334温度湿度显示器开发板
stm32f334_硬件IIC跑u8g2移植步骤
详解STM32单片机的堆栈
stm32f334_第二十三章基础定时器6/7非中断方式单次触发
stm32f334_IIC通信点亮0.96OLED
微信公众号
手机版
有源码就更好啦
RE:从零开始学STM32F3系列单片机--陀螺仪
RE:从零开始学STM32F3系列单片机--陀螺仪
RE:从零开始学STM32F3系列单片机--陀螺仪
RE:从零开始学STM32F3系列单片机--陀螺仪
RE:从零开始学STM32F3系列单片机--陀螺仪
RE:从零开始学STM32F3系列单片机--陀螺仪
RE:从零开始学STM32F3系列单片机--陀螺仪
RE:从零开始学STM32F3系列单片机--陀螺仪
RE:从零开始学STM32F3系列单片机--陀螺仪
RE:从零开始学STM32F3系列单片机--陀螺仪
回复:从零开始学STM32F3系列单片机--陀螺仪
RE:从零开始学STM32F3系列单片机--陀螺仪
回复:从零开始学STM32F3系列单片机--陀螺仪
RE:从零开始学STM32F3系列单片机--陀螺仪