
软件设计部分
第一步读取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测试程序~~
下一次就是对算法进行分析和选取合适的算法~
对于角度数据的融合现在我所知道的一共有三种
第一种,互补滤波
第二种,飞思卡尔滤波(不知道它叫什么滤波,因为是在飞思卡尔小车程序里面看到的,暂时先这么叫吧~~)
第三种,卡尔曼滤波~~
我现在正在仔细看他们的理论~~~
如果有人还有更好的算法,或者有对这些算法特别了解的大神们,还望不吝赐教~~
回复
打赏帖 | |
---|---|
汽车+汽车地线之间连接处理被打赏20分 | |
【Zephyr】使用Zephyr外设初始化过程解析被打赏30分 | |
【S32K146】S32DS watchdog 配置使用被打赏20分 | |
【Zephyr】使用 IAR 调试 Zephyr 镜像被打赏20分 | |
赚取电动螺丝刀+电源电路理论知识分享1被打赏5分 | |
我想要一部加热台+分享常见运算放大器电路的应用被打赏5分 | |
【Zephyr】MCXN947 Zephyr 开发入门适配shell被打赏20分 | |
我想要一部加热台+常见的MOS管驱动电路被打赏5分 | |
【我要开发板】6.联合MATLAB记录数据被打赏50分 | |
【换取手持数字示波器】MicrochipMPLABHarmony框架下串口调试printf输出记录被打赏29分 |