战舰stm32板子mpu6050官方DMP移植成功,源码分享...
根据坛子里其他大侠的讲解和源代码,自己在战舰STM32开发板上移植成功,可以在匿名上位机中看到姿态变化,另外这个代码中USRAT部分还有完整的DMA收发功能,可以接收和发送不定长度的字符串,希望可以帮到有需要的人不错 ,有时间在自己的板子上搞起来 ! 顶起来。 MARK! 谢谢分享,请问lz这是6.1的DMP库吗,想请教一下初始化的流程官方哪里有介绍还是看例程和API? 这个很酷啊 已测试。可用。
能给个讲解的链接吗? 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;
} Shampoo 发表于 2015-1-26 11:20
已测试。可用。
能给个讲解的链接吗?
哪有什么讲解啊,都是自己慢慢看,论坛上边有很多关于MPU的帖子,综合起来看 官方的DMP库已经上传了,坛子其他帖子也有,这里上传方便大家下载,免得找 mandzy 发表于 2015-1-26 19:06
5.1的库,就是看库里边的函数,大概看看明白是什么意思就行了,初始化就是用inv_mpu.c里边的那个初始化, ...
谢谢 我再研究一下 相当强大的帖子{:smile:} 感谢分享 楼主可以加QQ吗,就一个问题,947894709 感谢分享,请问 lz对xyz轴 inv_orientation_matrix_to_scalar这个函数怎么理解的,我一直想不通 感谢楼主分享,最近也在弄这个 谢谢分享,学习一下。 谢楼主! 最近打算玩玩这个~ 另外这个代码中USRAT部分还有完整的DMA收发功能,可以接收和发送不定长度的字符串,这玩意有么?楼主只是配置了DMA,却没有使用吧 睿翼1992 发表于 2015-4-28 16:17
另外这个代码中USRAT部分还有完整的DMA收发功能,可以接收和发送不定长度的字符串,这玩意有么?楼主只是配 ...
对,只是配置好了,这个代码里边没有用到 谢谢分享。。。。 mark大力支持楼主继续更好的作品 这个怎么玩啊,有大神能科普一下吗 必须赞一个 楼主你用的是软写IIC么。。 谢谢分享 多谢分享~ 谢谢分享,楼主厉害 移植到了LPC1114上,但发现,刚上点的时候yaw航向角一直在变,灯过一段时间才稳定,不知道楼主有没有这问题 楼主好,我把源码下进去之后,发现上位机能收到数据,但是通过手摇动6050,姿态没有变化呀,这应该是什么原因呢? 王晨 发表于 2015-7-12 21:26
楼主好,我把源码下进去之后,发现上位机能收到数据,但是通过手摇动6050,姿态没有变化呀,这应该是什么原 ...
先查一下硬件连接,这个程序在战舰板子上运行正常 mandzy 发表于 2015-7-12 22:28
先查一下硬件连接,这个程序在战舰板子上运行正常
MPU6050接到STM32上面去四根线呀,分别是SCL,SDA,VCC,GND,I2C接B10,B11 再不用接别的线到STM32上面去了吧硬件应该没有连错呀 如果想加入hmc5883l该怎么修改呢 AbnerSmith 发表于 2015-7-22 20:17
如果想加入hmc5883l该怎么修改呢
这个没研究过,不好意思 点赞点赞点赞点赞点赞 pid可以读写吗
王晨 发表于 2015-7-12 21:26
楼主好,我把源码下进去之后,发现上位机能收到数据,但是通过手摇动6050,姿态没有变化呀,这应该是什么原 ...
你解决了没,我也是这样啊
dianzixiehui 发表于 2015-7-27 10:12
你解决了没,我也是这样啊
我之前接的单片机的5V电源输出,5V上没有电压,然后接的3.3V,就可以正常工作了
有时候上位机有点问题,关了,再开就行 dianzixiehui 发表于 2015-7-27 10:12
你解决了没,我也是这样啊
你解决了没?我的也全是0 。 顶,赞谢谢分享 谢谢!感谢分享!!! 谢谢分享啦 很漂亮 谢谢分享 感谢楼主分享{:smile:} 很好的分享,但是上位机好像下载不了了,请帮忙看看 很好的分享,上位机好像下载不了,请帮忙看看。 这个上位机下载不了,只有1k多大小,还能再上传下吗? sanwa 发表于 2021-10-27 15:08
这个上位机下载不了,只有1k多大小,还能再上传下吗?
谁有这个文件能帮忙重新上传? ghdnui 发表于 2015-3-28 15:05
感谢分享,请问 lz对xyz轴 inv_orientation_matrix_to_scalar这个函数怎么理解的,我一直想不通 ...
这个帖子的资料还有吗?能否方便上传下 根据坛友提供的资料,上位机可以在下面的帖子可以找到,我已经上传到楼主位。大家可以到上面楼主位下载。
匿名上位机
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]