mandzy 发表于 2015-1-25 22:41:17

战舰stm32板子mpu6050官方DMP移植成功,源码分享...

根据坛子里其他大侠的讲解和源代码,自己在战舰STM32开发板上移植成功,可以在匿名上位机中看到姿态变化,另外这个代码中USRAT部分还有完整的DMA收发功能,可以接收和发送不定长度的字符串,希望可以帮到有需要的人

qs6361036 发表于 2015-1-25 23:46:17

不错 ,有时间在自己的板子上搞起来 !

cdh 发表于 2015-1-26 09:00:53

顶起来。

Free_man 发表于 2015-1-26 09:09:01

      MARK!

xiaojianren210 发表于 2015-1-26 09:29:05

谢谢分享,请问lz这是6.1的DMP库吗,想请教一下初始化的流程官方哪里有介绍还是看例程和API?

cdfs_shangxiao 发表于 2015-1-26 09:56:38

这个很酷啊

Shampoo 发表于 2015-1-26 11:20:19

已测试。可用。
能给个讲解的链接吗?

mandzy 发表于 2015-1-26 19:06:47

xiaojianren210 发表于 2015-1-26 09:29
谢谢分享,请问lz这是6.1的DMP库吗,想请教一下初始化的流程官方哪里有介绍还是看例程和API? ...

5.1的库,就是看库里边的函数,大概看看明白是什么意思就行了,初始化就是用inv_mpu.c里边的那个初始化,就是对照着代码一步一步查看阅读,MDK编译器的GO TO功能挺好用
int mpu_init(void)
{
    unsigned char data, rev;

    /* Reset device. */
    data = 0x80;//BIT_RESET;   // 这里写0x80就是复位MPU,可以直接查MPU_PWR_MGMT1_REG寄存器的设置,电源管理1
    if (i2c_write(st.hw->addr, st.reg->pwr_mgmt_1, 1, &(data)))
      return -1;
    delay_ms(100);

    /* Wake up chip. */
    data = 0x00; // 这里写0x00就是唤醒MPU,可以直接查MPU_PWR_MGMT1_REG寄存器的设置,电源管理1
    if (i2c_write(st.hw->addr, st.reg->pwr_mgmt_1, 1, &(data)))
      return -1;

#if defined MPU6050
    /* Check product revision. */
    if (i2c_read(st.hw->addr, st.reg->accel_offs, 6, data))
      return -1;
    rev = ((data & 0x01) << 2) | ((data & 0x01) << 1) |
      (data & 0x01);

    if (rev) {
      /* Congrats, these parts are better. */
      if (rev == 1)
            st.chip_cfg.accel_half = 1;
      else if (rev == 2)
            st.chip_cfg.accel_half = 0;
      else {
            log_e("Unsupported software product rev %d.\n");
            return -1;
      }
    } else {
      if (i2c_read(st.hw->addr, st.reg->prod_id, 1, &(data)))
            return -1;
      rev = data & 0x0F;
      if (!rev) {
            log_e("Product ID read as 0 indicates device is either "
                "incompatible or an MPU3050.\n");
            return -1;
      } else if (rev == 4) {
            log_i("Half sensitivity part found.\n");
            st.chip_cfg.accel_half = 1;
      } else
            st.chip_cfg.accel_half = 0;
    }
#elif defined MPU6500
#define MPU6500_MEM_REV_ADDR    (0x17)
    if (mpu_read_mem(MPU6500_MEM_REV_ADDR, 1, &rev))
      return -1;
    if (rev == 0x1)
      st.chip_cfg.accel_half = 0;
    else {
      log_e("Unsupported software product rev %d.\n", rev);
      return -1;
    }

    /* MPU6500 shares 4kB of memory between the DMP and the FIFO. Since the
   * first 3kB are needed by the DMP, we'll use the last 1kB for the FIFO.
   */
    data = BIT_FIFO_SIZE_1024 | 0x8;//设置FIFO
    if (i2c_write(st.hw->addr, st.reg->accel_cfg2, 1, data))
      return -1;
#endif

    /* Set to invalid values to ensure no I2C writes are skipped. */
    st.chip_cfg.sensors = 0xFF;
    st.chip_cfg.gyro_fsr = 0xFF;
    st.chip_cfg.accel_fsr = 0xFF;
    st.chip_cfg.lpf = 0xFF;
    st.chip_cfg.sample_rate = 0xFFFF;
    st.chip_cfg.fifo_enable = 0xFF;
    st.chip_cfg.bypass_mode = 0xFF;
#ifdef AK89xx_SECONDARY
    st.chip_cfg.compass_sample_rate = 0xFFFF;
#endif
    /* mpu_set_sensors always preserves this setting. */
    st.chip_cfg.clk_src = INV_CLK_PLL;
    /* Handled in next call to mpu_set_bypass. */
    st.chip_cfg.active_low_int = 1;
    st.chip_cfg.latched_int = 0;
    st.chip_cfg.int_motion_only = 0;
    st.chip_cfg.lp_accel_mode = 0;
    memset(&st.chip_cfg.cache, 0, sizeof(st.chip_cfg.cache));
    st.chip_cfg.dmp_on = 0;
    st.chip_cfg.dmp_loaded = 0;
    st.chip_cfg.dmp_sample_rate = 0;

    if (mpu_set_gyro_fsr(2000))//设置陀螺仪量程2000dps
      return -1;
    if (mpu_set_accel_fsr(2))//设置加速度量程2g
      return -1;
    if (mpu_set_lpf(42))//设置滤波器
      return -1;
    if (mpu_set_sample_rate(50))//设置采样频率
      return -1;
    if (mpu_configure_fifo(0))//设置FIFO
      return -1;

    /*if (int_param)
      reg_int_cb(int_param);*/

#ifdef AK89xx_SECONDARY
    setup_compass();
    if (mpu_set_compass_sample_rate(10))
      return -1;
#else
    /* Already disabled by setup_compass. */
    if (mpu_set_bypass(0))
      return -1;
#endif

    mpu_set_sensors(0);
    return 0;
}

mandzy 发表于 2015-1-26 19:07:56

Shampoo 发表于 2015-1-26 11:20
已测试。可用。
能给个讲解的链接吗?

哪有什么讲解啊,都是自己慢慢看,论坛上边有很多关于MPU的帖子,综合起来看

mandzy 发表于 2015-1-26 19:10:36

官方的DMP库已经上传了,坛子其他帖子也有,这里上传方便大家下载,免得找

xiaojianren210 发表于 2015-1-27 08:41:07

mandzy 发表于 2015-1-26 19:06
5.1的库,就是看库里边的函数,大概看看明白是什么意思就行了,初始化就是用inv_mpu.c里边的那个初始化, ...

谢谢 我再研究一下

123bac 发表于 2015-1-28 12:45:22

相当强大的帖子{:smile:}

技术平原 发表于 2015-2-4 21:50:44

感谢分享

xld826 发表于 2015-3-27 16:30:38

楼主可以加QQ吗,就一个问题,947894709

ghdnui 发表于 2015-3-28 15:05:23

感谢分享,请问 lz对xyz轴 inv_orientation_matrix_to_scalar这个函数怎么理解的,我一直想不通

芒果丶 发表于 2015-3-28 15:19:46

感谢楼主分享,最近也在弄这个

GHmcu 发表于 2015-3-28 15:53:53

谢谢分享,学习一下。

bkyss 发表于 2015-4-24 16:11:38

谢楼主! 最近打算玩玩这个~

睿翼1992 发表于 2015-4-28 16:17:11

另外这个代码中USRAT部分还有完整的DMA收发功能,可以接收和发送不定长度的字符串,这玩意有么?楼主只是配置了DMA,却没有使用吧   

mandzy 发表于 2015-4-28 22:42:04

睿翼1992 发表于 2015-4-28 16:17
另外这个代码中USRAT部分还有完整的DMA收发功能,可以接收和发送不定长度的字符串,这玩意有么?楼主只是配 ...

对,只是配置好了,这个代码里边没有用到

完美幸 发表于 2015-4-28 22:51:07

谢谢分享。。。。

hao999a 发表于 2015-4-29 08:48:18

mark大力支持楼主继续更好的作品

tjuspring001 发表于 2015-4-29 09:11:39

这个怎么玩啊,有大神能科普一下吗

机械电子协会 发表于 2015-5-27 16:19:15

必须赞一个               

Arthur244 发表于 2015-5-28 11:56:16

楼主你用的是软写IIC么。。

万古长风 发表于 2015-6-2 19:39:52

谢谢分享

acchkr 发表于 2015-6-2 20:41:57

多谢分享~

videofun 发表于 2015-6-13 15:32:27

谢谢分享,楼主厉害               

zhangyh89 发表于 2015-7-7 10:21:41

移植到了LPC1114上,但发现,刚上点的时候yaw航向角一直在变,灯过一段时间才稳定,不知道楼主有没有这问题

王晨 发表于 2015-7-12 21:26:05

楼主好,我把源码下进去之后,发现上位机能收到数据,但是通过手摇动6050,姿态没有变化呀,这应该是什么原因呢?

mandzy 发表于 2015-7-12 22:28:09

王晨 发表于 2015-7-12 21:26
楼主好,我把源码下进去之后,发现上位机能收到数据,但是通过手摇动6050,姿态没有变化呀,这应该是什么原 ...

先查一下硬件连接,这个程序在战舰板子上运行正常

王晨 发表于 2015-7-12 22:57:44

mandzy 发表于 2015-7-12 22:28
先查一下硬件连接,这个程序在战舰板子上运行正常

MPU6050接到STM32上面去四根线呀,分别是SCL,SDA,VCC,GND,I2C接B10,B11   再不用接别的线到STM32上面去了吧硬件应该没有连错呀

AbnerSmith 发表于 2015-7-22 20:17:24

如果想加入hmc5883l该怎么修改呢

mandzy 发表于 2015-7-22 22:21:20

AbnerSmith 发表于 2015-7-22 20:17
如果想加入hmc5883l该怎么修改呢

这个没研究过,不好意思

dianzixiehui 发表于 2015-7-27 09:27:31

点赞点赞点赞点赞点赞

dianzixiehui 发表于 2015-7-27 09:33:37

pid可以读写吗

dianzixiehui 发表于 2015-7-27 10:12:35

王晨 发表于 2015-7-12 21:26
楼主好,我把源码下进去之后,发现上位机能收到数据,但是通过手摇动6050,姿态没有变化呀,这应该是什么原 ...

你解决了没,我也是这样啊

王晨 发表于 2015-7-27 12:29:05

dianzixiehui 发表于 2015-7-27 10:12
你解决了没,我也是这样啊

我之前接的单片机的5V电源输出,5V上没有电压,然后接的3.3V,就可以正常工作了   
有时候上位机有点问题,关了,再开就行

沉默胜过白金 发表于 2015-7-27 19:54:28

dianzixiehui 发表于 2015-7-27 10:12
你解决了没,我也是这样啊

你解决了没?我的也全是0 。

jorry 发表于 2015-8-2 07:59:53

顶,赞谢谢分享

jorry 发表于 2015-8-3 16:29:38

谢谢!感谢分享!!!

ilove_music 发表于 2015-8-3 19:15:17

谢谢分享啦

430504 发表于 2015-8-3 19:22:49

很漂亮 谢谢分享

maxes 发表于 2015-8-3 23:15:26

感谢楼主分享{:smile:}

yllyly0454 发表于 2016-11-14 15:48:22

很好的分享,但是上位机好像下载不了了,请帮忙看看

yllyly0454 发表于 2016-11-14 15:56:15

很好的分享,上位机好像下载不了,请帮忙看看。

sanwa 发表于 2021-10-27 15:08:37

这个上位机下载不了,只有1k多大小,还能再上传下吗?

armok. 发表于 2021-12-4 11:30:57

sanwa 发表于 2021-10-27 15:08
这个上位机下载不了,只有1k多大小,还能再上传下吗?

谁有这个文件能帮忙重新上传?

sanwa 发表于 2021-12-4 13:48:33

ghdnui 发表于 2015-3-28 15:05
感谢分享,请问 lz对xyz轴 inv_orientation_matrix_to_scalar这个函数怎么理解的,我一直想不通 ...

这个帖子的资料还有吗?能否方便上传下

armok. 发表于 2021-12-5 10:54:53

根据坛友提供的资料,上位机可以在下面的帖子可以找到,我已经上传到楼主位。大家可以到上面楼主位下载。


匿名上位机

https://www.amobbs.com/forum.php?mod=viewthread&tid=5627461&highlight=%E5%8C%BF%E5%90%8D%E4%B8%8A%E4%BD%8D%E6%9C%BA

https://www.amobbs.com/forum.php?mod=viewthread&tid=5718039&highlight=%E5%8C%BF%E5%90%8D%E4%B8%8A%E4%BD%8D%E6%9C%BA
页: [1]
查看完整版本: 战舰stm32板子mpu6050官方DMP移植成功,源码分享...