MPU9150的开发记录(1)

本文详细记录了使用stm32f103c8t6单片机开发MPU9150(包含MPU6050和AK8975C)的过程,包括器件选择、数据融合算法实现以及AK8975的寄存器配置。开发过程中,作者经历了从互补滤波到卡尔曼滤波的融合算法实践,并解决了AK8975数据获取的问题。总结了IIC通信中地址的注意事项,并决定开源相关代码,后续将继续研究滤波算法。
摘要由CSDN通过智能技术生成

一、器件&结果

采用单片机为:stm32f103c8t6,陀螺仪为:mpu9150
mpu9150实际上为:mpu6050和AK8975C
测量结果实际效果图

二、开发记录

MPU6050开发用了4天,期间主要做了:
(1)基于互补滤波的陀螺仪和加速度的融合,参考了Mahony互补滤波、四轴飞行器DIY。
Mahony
(2)基于北航全权的多旋翼飞行器设计与控制校准了陀螺仪
(3)参考飞行器入门、电子酷、DR_CAN做了卡尔曼的融合
AK8975的开发了近三天:
MPU6050的原始数据获取直接调库很容易,AK8975的程序则比较少,大多基于DMP库,或者ST的库,看了半天也不知道写的啥。 没有办法有点强迫症,开始翻MPU9150A,8975C的技术手册,从IIC到每个寄存器的作用都看了一遍。能够用上的直接上图:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
可以看出寄存器的地址完全一样
在这里插入图片描述
在这里插入图片描述
(1)单次测量模式下,每一次测量数据的输出后,发送模式自动进入Power_DOWN(所有内部电路的电源已关闭,除保险丝ROM外,所有寄存器均可在电源关闭模式下访问,存储在读/写寄存器中的数据被保留),意味着ADC采集不能使用,所以必须单次测量后要进入CNTL寄存器重新设置0x01,重新单次测量。

(2)这里要吐槽一下,单次测量看了几个不同的demo,后面才明白,测量一次相当于XYZ三个方向全部测量出,不需要每读一次数据,重新测量一遍哈哈,直接被那份51的历程带翻车了。

(3)不同的代码,IIC都一样好久没看底层的我详细的看了一下,都一样,标准的MUP6050的地址0x68(接地,或者挂空),有几份直接写成0xD0 ;AK8975的标准地址为:ox0c,有的也会出现0x18这种情况。这用问题,大多与IIC的写法相关。
(4)最后,一直得不到AK8975数据的原因找到了,要配置MPU6050, z真的没想到;

三 、后续

代码开源!最近没想法了,后续接着做融合算法,还有滤波。 D0915

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值