软件设计部分
第一步读取MPU6050的数据
最近因为乱七八糟的事情特别多,天气又特别冷都不想把手拿出了~~所以更新特别特别慢,对不起各位了~~~
说正题,学会读取和分析MPU6050的数据也是比较重要的一步,读取的数据是否准确直接影响到后面算法,是否可以正确的判断出小车的实时状态
首先了解它的通信协议,MPU6050为I2C通信协议,然后了解它的数据结构,然后再仔细阅读并了解它的寄存器和寄存器相关的配置,这里我把写的初始化话函数加进来~~
void MPU6050_Init(void) //MPU6050初始化函数
{
I2C_WriteByteData(DEVICE_COM0,PWR_MGMT_1, 0x00); //解除休眠状态(电源管理模块)
I2C_WriteByteData(DEVICE_COM0,SMPLRT_DIV, 0x07); //陀螺仪&加速度计采样率,典型值:0x07(125Hz)
I2C_WriteByteData(DEVICE_COM0,CONFIG, 0x06); //低通滤波频率,典型值:0x06(5Hz)
I2C_WriteByteData(DEVICE_COM0,GYRO_CONFIG, 0x18); //陀螺仪自检及测量范围,典型值:0x18(不自检,2000deg/s)(寄存器手册P14)
I2C_WriteByteData(DEVICE_COM0,ACCEL_CONFIG, 0x01); //加速计自检、测量范围及高通滤波频率(这个在寄存器上面没有看到详细介绍),
//典型值:0x01(不自检,2G,5Hz)
}
下面我会附上我程序,程序重点难点部分,基本上都有注释~~包括每一段是干什么用的。而且MPU6050的所有寄存器的映射都写出来了,而且基本上每一个都有相应的注释,所以那个MPU6050.H可以直接拿去用了。。。
因为不会写上位机(最近在学LabVIEW,准备用它来编上位机),所以读出的数据只能
用LCD1602来进行显示,所以只能看到读出的加速度和角速度的数据,不能看到数据具体的变化趋势,还有就是,在用程序对加速度计和陀螺仪数据融合后的效果是看不出的,如果用上位机就可以很清楚看到数据融合过程的效果~~
关于MPU6050的更多用法可以参加它的数据手册~~~比如直接以数字输出6 轴或9 轴的旋转矩阵、四元数(quaternion)、欧拉角格式(Euler Angle forma)的融合演算数据,这些就要使用到他的DMP功能了~数字运动处理(DMP: Digital Motion Processing)引擎可减少复杂的融合演算数据、感测器同步化、姿势感应等的负荷。。等等~~MPU6050的功能还是非常强大的~~
下面来两张图~~我用MPU6050里面的温度计,来采集温度值和某一个轴的加速度或者角速度值显示在LCD1602上面~~
以前做的一个日历采集的温度值:
MPU6050采集的温度值和一个轴的数据:
开发板~~~
附件资料~~~
MPU6050测试程序~~
下一次就是对算法进行分析和选取合适的算法~
对于角度数据的融合现在我所知道的一共有三种
第一种,互补滤波
第二种,飞思卡尔滤波(不知道它叫什么滤波,因为是在飞思卡尔小车程序里面看到的,暂时先这么叫吧~~)
第三种,卡尔曼滤波~~
我现在正在仔细看他们的理论~~~
如果有人还有更好的算法,或者有对这些算法特别了解的大神们,还望不吝赐教~~
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
与电子爱好者谈读图二被打赏50分 | |
【FRDM-MCXN947评测】Core1适配运行FreeRtos被打赏50分 | |
【FRDM-MCXN947评测】双核调试被打赏50分 | |
【CPKCORRA8D1B评测】---移植CoreMark被打赏50分 | |
【CPKCORRA8D1B评测】---打开硬件定时器被打赏50分 | |
【FRDM-MCXA156评测】4、CAN loopback模式测试被打赏50分 | |
【CPKcorRA8D1评测】--搭建初始环境被打赏50分 | |
【FRDM-MCXA156评测】3、使用FlexIO模拟UART被打赏50分 | |
【FRDM-MCXA156评测】2、rt-thread MCXA156 BSP制作被打赏50分 | |
【FRDM-MCXN947评测】核间通信MUTEX被打赏50分 |