智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 20128|回复: 17
打印 上一主题 下一主题

用过MPU6050 的各位大神,都出来分享一下经验吧!!!

  [复制链接]

6

主题

34

帖子

0

精华

高级会员

Rank: 4

积分
600
威望
316
贡献
150
兑换币
193
注册时间
2013-1-15
在线时间
67 小时
跳转到指定楼层
1#
发表于 2013-4-16 21:41:53 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
小弟近日在搞MPU6050,这个东东读出陀螺仪数值,加计数值,然后融合,然后问题一大堆~~~~~~~

1

主题

6

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
384
威望
304
贡献
68
兑换币
35
注册时间
2010-11-24
在线时间
6 小时
推荐
发表于 2013-7-7 11:31:42 | 只看该作者
我用过非常好用,我用在自平衡车上。
  1. //初始化MPU6050,根据需要请参考pdf进行修改

  2. u8 Init_MPU6050(void)
  3. {
  4.   GPIO_InitTypeDef  GPIO_InitStructure;

  5.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE  );
  6.    
  7.         GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_10;
  8.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  9.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;  
  10.   GPIO_Init(GPIOB, &GPIO_InitStructure);

  11.   GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_11;
  12.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  13.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
  14.   GPIO_Init(GPIOB, &GPIO_InitStructure);
  15.                
  16.         if(Single_Read(MPU6050_Addr,WHO_AM_I)==0x68)
  17.         {
  18.           Single_Write(MPU6050_Addr,PWR_MGMT_1, 0x00);//电源管理1,解除休眠状态,时钟为内部8MHz
  19.     Single_Write(MPU6050_Addr,SMPLRT_DIV, 0x07);//采样速率125Hz
  20.     Single_Write(MPU6050_Addr,CONFIG,0x06);
  21.                 //不使能FSYNC,不使用外同步采样速率;DLPF_CFG[2~0],设置任意轴是否通过DLPF,
  22.                 //典型值:0x06(5Hz)低通滤波器带宽5Hz,
  23.                 //对加速度和陀螺仪都有效,输出频率为1kHz,决定SMPLRT_DIV的频率基准

  24.     Single_Write(MPU6050_Addr,GYRO_CONFIG, 0x08);//不自测,量程设置500°/s
  25.     /*?GYRO 量程单位系数
  26.                     +-250  deg/s  131  LSB/deg/s 初始化hex 0x00
  27.                     +-500  deg/s  65.5 LSB/deg/s           0x08   
  28.                     +-1000 deg/s  32.8 LSB/deg/s           0x10
  29.                     +-2000 deg/s  16.4 LSB/deg/s           0x18
  30.                 */
  31.                 Single_Write(MPU6050_Addr,ACCEL_CONFIG, 0x00);//不自测,量程设置2g
  32.                 /*  Accle any axe
  33.                     +-2  g    16384 LSB/g
  34.                     +-4  g    8192  LSB/g
  35.                     +-8  g    4096  LSB/g
  36.                     +-16 g    2048  LSB/g
  37.                 */
  38.                
  39.                 return 0;
  40.          }
  41.         return 1;
  42. }

  43. //******读取MPU6050数据****************************************
  44. //**************************************
  45. //读取mpu6050内部数据,两个字节,合成数据
  46. //**************************************
  47. s16 GetData(u8 REG_Address)                                                                //返回值为有符号的整形,16位
  48. {
  49.         s16 H=0,L=0;
  50.         H = Single_Read(MPU6050_Addr,REG_Address);        //先读高字节,再读低字节
  51.         L = Single_Read(MPU6050_Addr,REG_Address+1);
  52.         return (H<<8)+L;                                                                                                    //合成数据,为有符号整形数
  53. }

  54. //-------------加速度部分解算角度------------------

  55. s32 Read_Acc(void)
  56. {
  57.         s32 Accel_x;             //mpo6050读出的X轴加速度
  58.   s32 Accel_z;       //mpu6050读出的z轴加速度
  59. //-------------加速度部分解算------------------

  60. /*使用是加速度轴x轴正向朝向小车行径方向,y轴陀螺仪的正向 逆时针方向。  
  61.         加速度计的量程范围见配置  不自测,量程设置4g   scal系数为8192
  62. Accle any axe
  63.                     +-2  g    16384 LSB/g
  64.                     +-4  g    8192  LSB/g
  65.                     +-8  g    4096  LSB/g
  66.                     +-16 g    2048  LSB/g
  67. */
  68.        
  69.         Accel_x  = GetData(ACCEL_XOUT_H); //从mpu6050读取X轴加速度
  70.         Accel_z  = GetData(ACCEL_ZOUT_H); //从mpu6050读取z轴加速度
  71.        
  72.         if(Accel_x>0)
  73.         {
  74.                 Angle_accel = atan2((float)Accel_x,(float)Accel_z)*(180/3.14159265);//反正切计算rad
  75. /*    atan2(y,x)是表示X-Y平面上所对应的(x,y)坐标的角度,
  76.                   它的值域范围是(-Pi,Pi)   
  77.       用数学表示就是:atan2(y,x)=arg(y/x)-Pi   
  78.       当y<0时,其值为负,   
  79.       当y>0时,其值为正. atan2*180/Pi可以计算出角度值         */
  80.                
  81.         }
  82.                 else
  83.                 {
  84.                    Angle_accel = atan2((float)Accel_z,(float)Accel_x)*(180/3.14159265)-90;//反正切计算
  85.                         Angle_accel = -Angle_accel;
  86.     }
  87.         //angle_accel物理量单位是角度 deg!
  88.                 return Angle_accel;
  89. }

  90. //陀螺仪计算Y轴的角速度
  91. s32 Read_Gry(void)
  92. {
  93.    s32 read_gyro_y;
  94.    s32 Angle_gyro;       
  95. //-------角速度解算-------------------------
  96. //角速度量程见配置   本处使用1000 deg/s。scal系数为32.8 LSB
  97. /*?GYRO 量程单位系数
  98.                     +-250  deg/s  131  LSB/deg/s    offset 44.38188277*2
  99.                     +-500  deg/s  65.5 LSB/deg/s    offset 44.38188277
  100.                     +-1000 deg/s  32.8 LSB/deg/s ok offset 44.38188277/2
  101.                     +-2000 deg/s  16.4 LSB/deg/s    offset 44.38188277/4
  102. */

  103.   read_gyro_y= GetData(GYRO_YOUT_H)+Gyro_y_offset; //静止时角速度Y轴输出
  104.         //Gyro_y_offset计算方法gyro静止时候N多个数据的算术均值
  105.        
  106.         Angle_gyro= -read_gyro_y/65.5; //去除零点偏移,计算角速度值,负号为方向处理
  107.         //Angle_gyro测量值的单位是 deg/s.测量的物理量是角速度。
  108.         return Angle_gyro;
  109. }
复制代码
回复 支持 0 反对 1

使用道具 举报

0

主题

770

帖子

0

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
9280
威望
5224
贡献
3388
兑换币
3559
注册时间
2016-9-1
在线时间
334 小时
毕业学校
西南某校
18#
发表于 2016-11-19 13:03:42 | 只看该作者
角度解算方法,可以度娘一下陀螺仪解算方法,文库里面大把的是
回复 支持 反对

使用道具 举报

0

主题

20

帖子

0

精华

高级会员

Rank: 4

积分
687
威望
311
贡献
246
兑换币
190
注册时间
2016-6-2
在线时间
65 小时
毕业学校
JHUN
17#
发表于 2016-11-16 16:52:09 | 只看该作者
感谢   
回复 支持 反对

使用道具 举报

1

主题

28

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
412
威望
214
贡献
126
兑换币
144
注册时间
2014-5-3
在线时间
36 小时
毕业学校
重庆三峡学院
16#
发表于 2014-9-1 20:59:35 | 只看该作者
bg8wj 发表于 2013-7-7 11:31
我用过非常好用,我用在自平衡车上。

你这样做了过后怎么办的啊?角度是根据加速度计得到的啊!后面怎么处理的啊?
回复 支持 反对

使用道具 举报

0

主题

34

帖子

0

精华

高级会员

Rank: 4

积分
834
威望
433
贡献
255
兑换币
283
注册时间
2014-7-26
在线时间
73 小时
毕业学校
西南科技大学
15#
发表于 2014-9-1 17:17:04 | 只看该作者
厉害呀楼主谢谢了
回复 支持 反对

使用道具 举报

5

主题

43

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3920
威望
1918
贡献
1250
兑换币
1270
注册时间
2013-10-9
在线时间
376 小时
14#
发表于 2014-4-9 16:55:45 | 只看该作者
大神,发一份给我吧。775277266@qq.com
回复 支持 反对

使用道具 举报

9

主题

52

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
427
威望
229
贡献
104
兑换币
131
注册时间
2013-8-6
在线时间
47 小时
毕业学校
fdf
13#
发表于 2013-8-30 20:38:20 | 只看该作者
bg8wj 发表于 2013-7-7 11:31
我用过非常好用,我用在自平衡车上。

大侠~有K60的6050代码吗?
回复 支持 反对

使用道具 举报

4

主题

24

帖子

0

精华

注册会员

Rank: 2

积分
169
威望
88
贡献
63
兑换币
38
注册时间
2013-8-22
在线时间
9 小时
12#
发表于 2013-8-30 19:42:04 | 只看该作者
求6050程序代码呀
回复 支持 反对

使用道具 举报

10

主题

146

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1566
威望
751
贡献
413
兑换币
459
注册时间
2012-11-24
在线时间
201 小时
11#
发表于 2013-8-25 19:29:01 | 只看该作者
bg8wj 发表于 2013-7-7 11:31
我用过非常好用,我用在自平衡车上。

哥们,我最近刚开始入手mpu6050,不知道您能提供我一些资料么,例如你这个代码里面写的 参考的pdf???小弟万谢
回复 支持 反对

使用道具 举报

30

主题

333

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2063
威望
1008
贡献
633
兑换币
600
注册时间
2013-3-9
在线时间
211 小时
毕业学校
杭州电子科技大学
10#
发表于 2013-8-15 12:41:48 | 只看该作者
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2025-1-13 03:36 , Processed in 0.145685 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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