amoBBS 阿莫电子论坛

 找回密码
 注册
搜索
bottom↓
查看: 34813|回复: 128
打印 上一主题 下一主题

新人成功mpu6050成功,源码发放,过程分享.

  [复制链接]
跳转到指定楼层
1
发表于 2014-3-23 13:55:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
新人小白,想做四轴,初学stm32.
3月15号在淘宝上买了一块6050模块,今天刚刚用stm32读到数据。其中也遇到了很多问题,现在在这里贴出来跟大家分享一下成功读出来的过程。
先贴一张图吧javascript:;

以前一直在学习51现在转到stm32感觉区别还是挺大的.

下面梳理一下自己遇到过的关于读6050数据的问题:
1. 卖家给的51程序成功读取到6050数据,stm32未成功,网上下载了很多程序也未成功读取(可能自己不会修改某些参数)。
2. stm32模拟IIC管脚问题。
3. 6050初始化问题。
4. IIC读取到数据不正确遇到过问题。1).数据全部为ff                2).数据全部为-1                3).数据有规律的成周期性的循环                4).读取6050  0x75地址  数值为 ff或0或不确定的值(反正不是0x68)

自己的处理过程:
1.先用51成功的读到了6050数据(证明6050是好的),看别人的程序的大体框架(细看有些地方也看不懂......)。
2.首先是配置问题————输出用推挽输出,输入用上拉输入(总线外部未接上拉电阻),端口时钟,IO口初始化,SDA端口不停地切换输入输出模式。
   其次是模拟IIC协议—————基础(后来由于读不到正确的数据,把以前的资料拿出来看了很多遍......)
3.6050初始化,有很多寄存器,也没有细细研究。但是我在一点里提到,虽然网上很多stm32读6050程序未能成功运行,但是他们的初始化程序大致相同。所以我就直接粘过来用了......(以后再细细研究)
4.IIC读数据不正确:
        过程很坎坷......今天礼拜日没课,所以昨晚干到3点多也未能读到正确数据........
        总结一下论坛里遇到过此问题后的处理方法吧:
                                                1).IIC模拟不正确                //包括电平持续时间,应答的发出,数据读取逻辑顺序               
                                                2).模拟正确后没有初始化       
                                                3).IIC初始化和6050初始化的时间间隔,需要延迟一段时间               
                                                4).软件复位6050。论坛里有人提到过是在PWR_MGMT_1(地址0x6b)寄存器中的bit7 DEVICE_RESET位 置1复位        。

        自己处理方法:
                1).保证自己的IIC是对的。先用24C02成功读写数据
                2).保证6050的器件地址0xd0无误后,用IIC读取6050的WHO_IM_I寄存器(地址0x75),默认值为0x68。成功读到0x68=104后就成功了一大半。
                3).(得寸进尺)读到0x68后,初始化6050再尝试去读取它x轴上的加速度 (MPU6050_RA_ACCEL_XOUT_H     0x3B)<<8|(MPU6050_RA_ACCEL_XOUT_L     0x3C)       
                                                                                                                                                                                                //高八位与低八位合成十六位数据(可省略此步)
                4).上面成功后就可以批量的去读取                加速度:X, Y, Z        陀螺仪:X ,Y ,Z        温度:temp                然后再用串口发送就好了
再贴一张自己调试的时候用到的24c02的图片

最后奉上自己读写成功的程序,还没整理比较乱......
IIC用的刘洋老师的        板子用的是原子的MINI STM32        芯片STM32F103                IIC_SDA.PB11                IIC_SCL.PB10                修改IIC端口时只需在IIC.h文件中修改相应的宏定义即可
6050寄存器中文手册论坛里有人上传大家可以去搜索一下。
本人新手,如有不对的地方希望大家指正!






本帖子中包含更多资源

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

x
2
发表于 2014-3-23 14:09:07 | 只看该作者
发来贺电
3
发表于 2014-3-23 14:25:48 | 只看该作者
本帖最后由 onev 于 2014-3-23 15:30 编辑

只是你的函数怎么这样命名  I2C_Init           库函数也这样命名正好  我这几天纠结MPU6050  用硬件IIC DMA方式没成功  改成模拟的也不行 试试你的
4
发表于 2014-3-23 17:58:00 | 只看该作者
支持依稀,同样在学习中
5
 楼主| 发表于 2014-3-23 18:50:43 | 只看该作者
onev 发表于 2014-3-23 14:25
只是你的函数怎么这样命名  I2C_Init           库函数也这样命名正好  我这几天纠结MPU6050  用硬件IIC DM ...

这样啊,没注意哎........以后注意!!!
6
发表于 2014-3-23 21:01:21 | 只看该作者
等待你下一步,如何处理数据,我以前是用的硬件IIC,成功了但是不能打断,果断采用软件模拟.
7
发表于 2014-3-23 21:46:10 | 只看该作者
请问你上四轴了吗,振动怎么解决的?
8
发表于 2014-3-24 11:17:11 | 只看该作者
顶起来-----
9
发表于 2014-3-24 12:03:09 | 只看该作者
+1              
10
发表于 2014-3-24 12:43:30 | 只看该作者
感谢楼主分享!!谢谢
11
 楼主| 发表于 2014-3-24 14:08:51 | 只看该作者
再修改一下主函数,这样输出的就是可以用来计算的数值了   。转化成rad/s和m/s2

接下来的工作就是数据融合算出三个轴的偏移角度!

本帖子中包含更多资源

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

x
12
发表于 2014-3-24 15:01:02 | 只看该作者
多谢分享啊
13
发表于 2014-3-24 16:43:10 | 只看该作者
三轴陀螺仪+ 三轴加速度 ?
14
发表于 2014-3-24 17:01:40 | 只看该作者
为什么 没有读DMP  我都卡在这几个星期了~~~~~~~~
15
发表于 2014-3-27 10:33:19 | 只看该作者
你这是战舰的板子,不是MINI。。。。
16
发表于 2014-3-30 20:28:23 | 只看该作者
生来孤独 发表于 2014-3-24 14:08
再修改一下主函数,这样输出的就是可以用来计算的数值了   。转化成rad/s和m/s2

接下来的工作就是数据融合 ...

我的读出来没你的好  在加速度上  Z轴只有9.4+

本帖子中包含更多资源

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

x
17
 楼主| 发表于 2014-3-30 23:05:09 | 只看该作者
onev 发表于 2014-3-30 20:28
我的读出来没你的好  在加速度上  Z轴只有9.4+

你这个数据应该是正确的 ,我那个有点问题,重力加速度应该是9.81,我那静止时都超过去了。你的9.4是因为其他轴上有加速度分量,应该是的.......(实在看着不爽,直接加上一个初始值)
这都不是重点~
关键是后面的姿态解算......6天过去了,试过软件处理(滤波,积分,融合)未果,现在看看自带dmp功能,论坛里下载了一个程序,慢慢修改吧......
18
发表于 2014-3-30 23:30:44 | 只看该作者
正想玩,谢谢了!
19
发表于 2014-4-1 15:31:04 | 只看该作者
596142041 发表于 2014-3-23 21:01
等待你下一步,如何处理数据,我以前是用的硬件IIC,成功了但是不能打断,果断采用软件模拟. ...

你说的不能打断是啥意思?我最开始用的模拟,后来换成硬件IIC,没有发现什么问题啊。
20
发表于 2014-4-1 20:48:21 | 只看该作者
写的很详细,特别是有自己的总结,对于新人来说非常有价值
21
发表于 2014-4-2 00:39:26 | 只看该作者
建议楼主在标题中写清楚,stm32f1,这样大家也好找
22
发表于 2014-4-3 10:30:51 | 只看该作者
谢谢楼主!
23
发表于 2014-4-3 10:43:17 | 只看该作者
MPU6050自带融合算法,为啥不用?
24
 楼主| 发表于 2014-4-4 08:44:43 | 只看该作者
lancefang 发表于 2014-4-3 10:43
MPU6050自带融合算法,为啥不用?

最近在捣鼓6050的内部隐藏大招.........学习中,论坛里有很多好帖子!!!
25
发表于 2014-4-18 10:48:34 | 只看该作者
楼主的DMP 搞定了吗?
26
发表于 2014-4-18 20:21:14 | 只看该作者
我也是在用硬I2C调,也是出来的数全是无符号就是FF,有符号就是-1,愁死了,能不能交流下,这个问题是怎么解决的。ID读不到,读0x75时,还是FF。。。

我觉得我老惨了!!!
27
 楼主| 发表于 2014-4-20 13:59:49 | 只看该作者
tearedice 发表于 2014-4-18 10:48
楼主的DMP 搞定了吗?

搞定了......
28
 楼主| 发表于 2014-4-20 14:02:17 | 只看该作者
sylarwcy 发表于 2014-4-18 20:21
我也是在用硬I2C调,也是出来的数全是无符号就是FF,有符号就是-1,愁死了,能不能交流下,这个问题是怎么 ...

我用的模拟IIC,都说硬件IIC有问题.......(不太清楚)。你读不出来数据可能是IIC驱动问题,还有就是IIC管脚没有使能吧....
29
发表于 2014-4-22 15:00:53 | 只看该作者
D:\刚刚接触这个东西,用了楼主的程序,数据时出来了,但是感觉不对劲,不知道是怎么回事,还请楼主给讲解一下!这是我运行后接受到的数据
30
发表于 2014-4-22 15:02:24 | 只看该作者
刚刚图片没发得上去,抱歉!

本帖子中包含更多资源

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

x
31
发表于 2014-4-25 19:21:16 | 只看该作者
大神啊,我也想买块原子的mini
32
发表于 2014-4-25 20:04:57 | 只看该作者
不错哎~,一直没有时间鼓捣@!!!
33
 楼主| 发表于 2014-4-26 09:19:24 | 只看该作者
glacierPYC 发表于 2014-4-22 15:02
刚刚图片没发得上去,抱歉!

不太清楚,你是不是IIC线接错了?这程序拿过来接上线就应该能跑的啊!
34
发表于 2014-4-29 08:12:49 | 只看该作者
生来孤独 发表于 2014-4-26 09:19
不太清楚,你是不是IIC线接错了?这程序拿过来接上线就应该能跑的啊!

线接错了应该就收不到数据吧?
35
 楼主| 发表于 2014-5-1 23:27:00 | 只看该作者
glacierPYC 发表于 2014-4-29 08:12
线接错了应该就收不到数据吧?

不知道啊~~~~~你再慢慢捣鼓吧.......
我开始也捣鼓了好长时间,加油加油!!!
36
发表于 2014-5-4 22:31:52 | 只看该作者
好吧。反正有你的这个程序总比我自己瞎捣鼓强,灰常感谢你的分享!
37
发表于 2014-5-6 20:09:45 | 只看该作者
我也读取成功了,但PID高不好,飞不起来
38
发表于 2014-5-6 20:13:57 | 只看该作者
只能看看了         
39
发表于 2014-5-11 15:35:34 | 只看该作者
看了你描述的过程,觉得不错,一步一步,得寸进尺
40
 楼主| 发表于 2014-5-16 12:38:33 | 只看该作者
茶亦爽 发表于 2014-5-6 20:09
我也读取成功了,但PID高不好,飞不起来

........读出来还要滤波融合的啊!!亲
41
发表于 2014-5-16 16:08:24 | 只看该作者
生来孤独 发表于 2014-5-16 12:38
........读出来还要滤波融合的啊!!亲

做过了,用的四元数算法。求得姿态后,PID一直搞不好。
42
发表于 2014-5-19 00:06:13 | 只看该作者
顶楼主。。。。。
43
发表于 2014-5-19 00:34:58 来自手机 | 只看该作者
读了lz的程序,我刚接触嵌入式linux,在2440上做。也做的软i2c,可是有两个地方的函数不太清楚,卡在了I2C数据读取和写入的地方。。。
44
 楼主| 发表于 2014-5-19 13:54:12 | 只看该作者
shaolong 发表于 2014-5-19 00:34
读了lz的程序,我刚接触嵌入式linux,在2440上做。也做的软i2c,可是有两个地方的函数不太清楚,卡在了I2C ...

前两天看了一下自己的程序,关于IIC的部分自己写的是有点问题的。是关于IIC管脚修改的注意点,I2C.h文件里面改过后还要在I2C.c文件里面改一下GPIO-pin .c是关于IIC读取和写入时的管脚配置问题  推完和上拉输入
45
发表于 2014-5-23 09:24:45 | 只看该作者
为什么都不用硬件I2C
46
 楼主| 发表于 2014-5-23 14:28:57 | 只看该作者
yzb1019 发表于 2014-5-23 09:24
为什么都不用硬件I2C

很多人说不好用,就没有再去搞了。直接模拟GG
47
发表于 2014-5-27 16:01:00 | 只看该作者
请问楼主可以读出T,xyz都是0怎么回事啊

本帖子中包含更多资源

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

x
48
 楼主| 发表于 2014-5-28 18:35:15 | 只看该作者
SZHjy 发表于 2014-5-27 16:01
请问楼主可以读出T,xyz都是0怎么回事啊

老朽掐指一算~~~不知道~~估计IIC通信问题
49
发表于 2014-5-29 08:47:14 | 只看该作者
生来孤独 发表于 2014-5-28 18:35
老朽掐指一算~~~不知道~~估计IIC通信问题

恩恩,谢谢了,我再好好看看
50
发表于 2014-6-4 16:09:53 | 只看该作者
我现在读0x75的数据为-1,想问问 “模拟正确后没有初始化  ” 初始化指的是什么
51
发表于 2014-6-25 15:49:34 | 只看该作者
绿大侠,我想请教个问题。就是,我的6050读出来不是0,也不是-1,但是数据不会变化,这是什么原因啊?
52
发表于 2014-6-28 11:15:59 | 只看该作者
请问mpu6050有什么优缺点啊,能否用在强震的的情况下啊?
53
发表于 2014-7-30 13:17:51 | 只看该作者
mark 求dmp
54
发表于 2014-7-30 14:14:38 | 只看该作者
mark
正在研究中
55
发表于 2014-7-30 14:30:40 | 只看该作者
祝贺,发来贺电。。。
56
发表于 2014-7-31 12:04:56 | 只看该作者
为什么去哦气动DMP后的数值跟随机数一样,没有一点规律的乱动勒,摇晃MPU6050也不变
57
 楼主| 发表于 2014-8-2 09:51:48 | 只看该作者

DMP在我的另一篇帖子中
58
发表于 2014-8-5 14:26:30 | 只看该作者
LZ你好,第一次玩这个6050,菜鸟一枚,按着LZ的程序学习了一下,LZ帮我看看,谢谢了
为什么我的Z轴加速度只有8.9左右呢,这个是有问题么还是怎么回事呢,看附件

本帖子中包含更多资源

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

x
59
 楼主| 发表于 2014-8-6 08:46:47 | 只看该作者
kaisfree 发表于 2014-8-5 14:26
LZ你好,第一次玩这个6050,菜鸟一枚,按着LZ的程序学习了一下,LZ帮我看看,谢谢了
为什么我的Z轴加速度只 ...

不知道,我那时读出数据后就没有再高了。后去研究6050的DMP了。之前我的也有问题,就是6050DMP刚刚开始工作时的初始状态问题,好像有个自检什么的。你可以尝试直接在输出状态上减去一个初始值试试。我回头再搞搞
60
发表于 2014-8-6 10:08:20 | 只看该作者
谢谢你的回答,另外还想问个很弱智的问题,这个读出来的加速度是什么加速度?是相关轴的线加速度么?
61
 楼主| 发表于 2014-8-6 12:00:34 | 只看该作者
kaisfree 发表于 2014-8-6 10:08
谢谢你的回答,另外还想问个很弱智的问题,这个读出来的加速度是什么加速度?是相关轴的线加速度么? ...

X,Y,Z轴的加速度
62
发表于 2014-8-10 21:30:29 | 只看该作者
准备仔细研读一番!!!
63
发表于 2014-8-13 23:00:26 | 只看该作者
最近也在研究6050,菜鸟一枚,希望能借助大神的帖子搞懂它
64
发表于 2014-8-24 15:30:53 | 只看该作者
已读取成功,谢楼主分享

本帖子中包含更多资源

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

x
65
发表于 2014-8-28 20:22:45 | 只看该作者
感谢楼主的共享,学习了
66
发表于 2014-9-2 21:18:55 | 只看该作者
生来孤独 发表于 2014-5-28 18:35
老朽掐指一算~~~不知道~~估计IIC通信问题

哈哈!

很有意思
67
发表于 2014-9-11 18:24:54 | 只看该作者
我的程序更恼火,IIC_Wait_ASK()里面如果先设置SDA线输入然后再SCL拉高,读写24c02正常,6050错误。先SCL拉高,再SDA设置成输入,6050读取正确,24c02读取错误。。。。
68
发表于 2014-9-11 18:48:15 | 只看该作者
得到这些低级数据并非难事,难的是过滤,整合这些6轴数据,转化为四元组,而且要解决累积漂移,机械抖动时的干扰等问题。
69
发表于 2014-9-15 15:32:15 | 只看该作者
love_ourdev 发表于 2014-9-11 18:48
得到这些低级数据并非难事,难的是过滤,整合这些6轴数据,转化为四元组,而且要解决累积漂移,机械抖动时 ...

头像真棒……
说的很对,数据得到是很简单的,难点在于怎么处理,是套用官方数值还是绑在电机上转来调节参数。
70
发表于 2014-9-25 12:22:11 | 只看该作者
路过,看看
71
发表于 2014-9-29 23:20:32 | 只看该作者
victor9079 发表于 2014-8-24 15:30
已读取成功,谢楼主分享

你的温度读取出来后的数据怎么处理变成29 的?
72
发表于 2014-10-1 13:14:36 | 只看该作者
学习了   
73
发表于 2014-10-26 23:28:17 | 只看该作者

感谢楼主的共享
74
发表于 2014-10-27 10:30:02 | 只看该作者
好好学习,争取早日为本吧效力!
75
发表于 2014-10-29 19:36:34 | 只看该作者
驱起来了!新人感谢楼主!!!
76
发表于 2014-10-29 19:56:17 | 只看该作者
下载准备测试一下,谢谢分享
77
发表于 2014-10-29 23:12:58 | 只看该作者
正好最近在调这个
78
发表于 2014-10-30 10:17:10 | 只看该作者
正在调,还是先搞IIC吧
79
发表于 2014-10-30 22:06:41 | 只看该作者
向楼主学习学习 , 我现在  51还没有读出数据
80
发表于 2014-10-31 17:35:43 | 只看该作者
进入这个芯片领域,玩玩。
81
发表于 2014-11-1 01:07:59 | 只看该作者
顶起来啊!!!
82
发表于 2014-11-6 17:49:15 | 只看该作者
楼主,程序读取的只是一个轴的哇
83
 楼主| 发表于 2014-11-8 10:21:35 | 只看该作者
Me、小丁丁 发表于 2014-11-6 17:49
楼主,程序读取的只是一个轴的哇

三周啊         
84
发表于 2014-11-10 17:36:50 | 只看该作者

可是没看到你切换寄存器啊。
85
发表于 2014-11-10 17:43:43 | 只看该作者
恭喜啊 刚上手确实需要付出很多
86
 楼主| 发表于 2014-11-11 11:48:35 | 只看该作者
Me、小丁丁 发表于 2014-11-10 17:36
可是没看到你切换寄存器啊。

一次读出来的,在。c文件里    他们的数据地址是连续的 ,就一下读取了6个地址,地址指针自动加1
87
发表于 2014-11-11 11:50:14 | 只看该作者
生来孤独 发表于 2014-11-11 11:48
一次读出来的,在。c文件里    他们的数据地址是连续的 ,就一下读取了6个地址,地址指针自动加1 ...

so ga ,受教了
88
 楼主| 发表于 2014-11-11 11:52:55 | 只看该作者
刚把得哟~
89
发表于 2014-11-12 18:19:50 | 只看该作者
请教一下 #define MPU6050_SLAVE_ADDRESS  0xd0      //MPU6050器件读地址是什么意思  我在寄存器手册中没有找到这个地址啊  但是你每次读取还是写入都会 用到 有点不理解 请指点
90
 楼主| 发表于 2014-11-12 19:21:06 | 只看该作者
IIC 器件地址      不懂得话回头看看IIC协议  
91
发表于 2014-11-14 20:48:20 | 只看该作者
谢谢分享
92
发表于 2014-11-15 01:33:20 | 只看该作者
楼主你好~我的问题和87楼的一样。。MPU6050三轴数据地址是连续的,3B3C3D3E3F40,但是从你的code里哪里让地址每次+1了呀?不是很理解……reg_add不是一直不变么?

void PMU6050_ReadData(u8 reg_add,unsigned char*Read,u8 num)
{
        unsigned char i;
       
        I2C_Start();
        I2C_Send_Byte(MPU6050_SLAVE_ADDRESS);
        I2C_Wait_Ack();
        I2C_Send_Byte(reg_add);
        I2C_Wait_Ack();
       
        I2C_Start();
        I2C_Send_Byte(MPU6050_SLAVE_ADDRESS+1);
        I2C_Wait_Ack();
       
        for(i=0;i<(num-1);i++){
                *Read=I2C_Read_Byte(1);
                Read++;
        }
        *Read=I2C_Read_Byte(0);
        I2C_Stop();
}
93
发表于 2014-11-15 01:49:14 | 只看该作者
小黑@电子 发表于 2014-11-12 18:19
请教一下 #define MPU6050_SLAVE_ADDRESS  0xd0      //MPU6050器件读地址是什么意思  我在寄存器手册中没 ...

MPU6050的地址应该是0x68,变成二进制只有7个bit……还少了最后一个bit告诉他是R/W……你看到的0xd0就是“地址+R/W”变成一个直接的8-bit值……你到计算器里16进制转2进制看一下就知道了
94
发表于 2014-11-23 21:41:55 | 只看该作者
lz,我用两块MPU6050模块采到的Z轴加速度原始值经过换算后一块是9.1m/s²,还有一块是8.8m/s²,不知道lz遇到过这种问题没有
95
 楼主| 发表于 2014-11-24 11:27:01 | 只看该作者
shortking 发表于 2014-11-23 21:41
lz,我用两块MPU6050模块采到的Z轴加速度原始值经过换算后一块是9.1m/s²,还有一块是8.8m/s²,不知道lz遇 ...

在论坛里面搜一下 加速度计校准
96
发表于 2014-11-24 13:30:37 | 只看该作者
OK,多谢了
97
发表于 2015-1-9 23:27:52 | 只看该作者
学习了,谢谢分享
98
发表于 2015-1-28 12:53:18 | 只看该作者
哈哈哈  谢谢楼主
99
发表于 2015-1-28 21:45:34 | 只看该作者
   还有没有调试mpu6050
100
发表于 2015-1-31 13:22:14 | 只看该作者
谢谢楼主了啊
友情提示:标题不合格、重复发帖,将会被封锁ID。详情请参考:论坛通告:封锁ID、获得注册邀请码、恢复被封ID、投诉必读
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|阿莫电子论坛(原ourAVR/ourDEV) ( 公安备案:44190002001997(交互式论坛) 工信部备案:粤ICP备09047143号 )

GMT+8, 2018-10-20 09:13

阿莫电子论坛, 原"中国电子开发网"

© 2004-2018 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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