5-MPU6050采集的数据

后天要去公司实习了,带着些许担忧,终于从学校走出去了,不知江湖的水有多深,一切都是待定!

把程序移植之后,发现我还没真正研究过MPU6050这个传感器,结合程序我大概了解了下,先看下图

上图是与加速度传感器有关的寄存器参数,采集到的三轴方向上的值都是16位的,选用的满量程范围是正负8g,4096/g的意思就是说当某一方向上的重力加速度为1g时,该寄存器的值就是4096。采集到的陀螺仪的值也是类似的,如图所示:


当某一方向的每秒钟转1度的时候,采集到的值就是16.4。比之前的有些传感器使用电压值然后再计算角度容易多了,数字传感器就是直接。

在程序中,关于传感器的数值用了一个结构体定义:

typedef struct
{
    // 参数信息,pos=0。
    uint8_t version; // 参数结构的版本。
    uint8_t length;  // 参数总长度,单位:字,即字节数/4。
    uint16_t reserve_zero_0;
    //
    // 传感器校正参数,pos=[1,18]。
    float acc_offset[3];
    float acc_gain[3];
    float gyr_offset[3];
    float gyr_gain[3];
    float mag_offset[3];
    float mag_gain[3];
    //
    // 四元数表示的水平面,pos=[19,22]。
    quaternion horizon;
    //
    // 控制参数,[xyz][pid],pos=[23,31]。
    struct
    {
        float p,i,d; // 顺序严格按P、I、D。
    }xyz_pid[3];
    //
    uint32_t crc;
} param_t;

其中,float acc_offset[3];float acc_gain[3];float gyr_offset[3];float gyr_gain[3];是本次需要关心的,再从初始化函数

得到些端倪,分为增益和偏移量,初始偏移量都是零,没问题,加速度最终量化成个g/LSB,陀螺仪量化成rad/s(弧度每秒):

        param->acc_gain[i]   = 9.7883 / 4096.0;//加速度传感器8g,灵敏度是4096LSB/g
        param->acc_offset[i] = 0;
        param->gyr_gain[i]   = (3.1415926/180.0) / 16.4;//陀螺仪满刻度范围2000°/s,灵敏度是16.4LSB/°/s
        param->gyr_offset[i] = 0;

前期的参数都已经确定了,当采集到实时传感器的数据后,通过以下公式将数据量化

acc[i] = (p->acc_offset[i] + mpu6050_rawData.acc[i]) * p->acc_gain[i];-----加速度

gyr[i] = (p->gyr_offset[i] + mpu6050_rawData.gyr[i]) * p->gyr_gain[i];----陀螺仪

然后在对量化后的acc和gyr的值做平均,最终叉积法融合陀螺和加速度。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

技术在路上

帮助需要的人

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值