打印
[应用相关]

STM32F103读取MPU6050陀螺仪

[复制链接]
3468|25
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
mpu6050陀螺仪使用方法_用STM32F103读取MPU6050陀螺仪、加速度、角度的数据
1 介绍  大家从标题中来看呢,大家可能会有些困惑,MPU6050只输出加速度、陀螺仪。没有角度。这个也是我今天想和大家说的。最近我做了一个倾角项目。老板基于成本考虑希望我能用MPU6050去算出来角度。说实话自己没接触这个东西,去搞的时候才知道挺难的,很地方看不懂。然后我去看过了正电原子的MPU6050的解算。但是那个角度的结果和我想要精度有点差别。无意中呢在淘宝上搜到了一个维特智能的JY61模块。这个模块的内置的就是MPU6050模块。这个商家说它的静态角度的精度为0.05度、动态0.1度。这个精度是很符合我的需求。给大家看下这个模块




使用特权

评论回复
沙发
发给她更好fh|  楼主 | 2022-4-30 14:21 | 只看该作者
这个模块体积很小巧就15×15×2mm大小。串口通讯用单片机去获取数据很简单,相比起直接去获取MPU6050简单不知道多少倍了。下面和大家说说我是怎么去用STM32F103读取JY61陀螺仪、加速度、角度的数据。

使用特权

评论回复
板凳
发给她更好fh|  楼主 | 2022-4-30 14:23 | 只看该作者
2 开发准备

讲程序之前呢,和大家简单的说说一些硬件、软件准备和JY61怎么和STM32F103接线的。

使用特权

评论回复
地板
发给她更好fh|  楼主 | 2022-4-30 14:25 | 只看该作者
2.1硬件、软件准备

硬件:JY61模块、USB-TTL、STM32F103开发板、杜邦线。STM32F103的开发板呢,我用的也是维特智能32开发板做测试用。给大家上个图:

使用特权

评论回复
5
sxy4517| | 2022-4-30 14:50 | 只看该作者
陀螺仪一般用在哪些方面

使用特权

评论回复
6
发给她更好fh|  楼主 | 2022-4-30 14:55 | 只看该作者

使用特权

评论回复
7
发给她更好fh|  楼主 | 2022-4-30 14:56 | 只看该作者
软件 :https://pan.baidu.com/s/1SEWmixu4jtUL2HH_3Hcn2g 提取码:zryo

这个是我的写的一个 示例代码大家有兴趣的可以看下:https://pan.baidu.com/s/1sXnlT89FTTs5tONLiaPihw

使用特权

评论回复
8
发给她更好fh|  楼主 | 2022-4-30 15:00 | 只看该作者
2.2 接线方式

1、使用USB-TTL将STM32F103C8T6与电脑连接通信

2、JY61与STM32F103C8T6使用杜邦线连接。具体接线如下图所示:

具体接线方式如下:

使用特权

评论回复
9
发给她更好fh|  楼主 | 2022-4-30 15:01 | 只看该作者
3 程序讲解

3.1程序思路讲解

好了到大家最关心的地方了。在这里呢。我先和大家说下。我的整体思路是什么。以一个整体框架给大家做一个说明

使用特权

评论回复
10
发给她更好fh|  楼主 | 2022-4-30 15:02 | 只看该作者
从上面来看呢,一共就分为主要的两个部分。串口初始化和while主循环。

1 、串口初始化又分为串口1初始化、串口2初始化。其中串口2初始化又多了一个串口2中断服务函数,这个函数用来接收JY61的传过来的数据,然后放在数据缓存区。

2、while主循环包括数据解析和数据输出。数据解析负责把从串口2中断服务函数得到的数据进行数据的一个处理。然后从串口1把数据输出到PC端。

下面分别和大家说下中间的一些重要的函数。

使用特权

评论回复
11
发给她更好fh|  楼主 | 2022-4-30 15:03 | 只看该作者
3.1 main函数

程序的执行都是在这个函数里面进行的。它包括串口初始化和while主循环。其中这个Initial_UART1函数就是串口1初始化。Initial_UART2是串口2初始化.

int

使用特权

评论回复
12
发给她更好fh|  楼主 | 2022-4-30 15:04 | 只看该作者
3.1 串口1初始化

串口1初始化就是对串口1进行使能。打开UART1_Put_String函数。通过这个函数把结果输出到PC端的。

void 

使用特权

评论回复
13
发给她更好fh|  楼主 | 2022-4-30 15:05 | 只看该作者
3.2 串口2初始化

串口2初始化两个作用,第一打开串口2这个通道。第二就是打开串口2的中断服务函数。
void 

使用特权

评论回复
14
发给她更好fh|  楼主 | 2022-4-30 15:09 | 只看该作者
3.3 串口2中断服务函数

这个函数的功能就是不停的把JY61的数据放到数据缓存区,就是往这个CopeSerial2Data函数发数据。
void 

使用特权

评论回复
15
发给她更好fh|  楼主 | 2022-4-30 15:10 | 只看该作者
3.4 数据缓存区

数据缓存区是从串口2中断服务函数过来的。把数据最终放在stcAcc、stcGyro、stcAngle这些结构体里等待数据解析来处理。
void 

使用特权

评论回复
16
发给她更好fh|  楼主 | 2022-4-30 15:12 | 只看该作者
3.5 数据解析

从数据缓存区过来的数据,根据商家的协议都是16进制的数据。因此,我还需要进一步的把数据进行处理把16进制的数据处理成10进制的数据方便阅读。怎么处理呢?还是根据商家的协议去处理的。我们就以角度为例。

使用特权

评论回复
17
发给她更好fh|  楼主 | 2022-4-30 15:14 | 只看该作者
商家协议在下图:

使用特权

评论回复
18
发给她更好fh|  楼主 | 2022-4-30 15:15 | 只看该作者
从上图看呢。角度输出的格式呢是55 53 RollL RollH PitchL PitchH YawL YawH VL VH SUM。这个格式就是放在数据缓存区的格式。怎么把数据缓存区的16进制转换成10进制呢?这个还要根据商家给的公式(如下图所示)。

使用特权

评论回复
19
发给她更好fh|  楼主 | 2022-4-30 15:15 | 只看该作者

使用特权

评论回复
20
发给她更好fh|  楼主 | 2022-4-30 15:16 | 只看该作者
写成程序就是下面这样的。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

34

主题

416

帖子

1

粉丝