基于espidf的mpu6050驱动代码

前言

文章分为2部分,第一部分是代码讲解和编写思路,第二部分是所有代码的集合,复制即用。

代码分解

include

#include <stdio.h>
#include<driver/i2c.h>
#include<math.h>

变量

accel_scale是加速度系数,用于将获得的加速度寄存器的值映射到所配置的加速度取值范围内

当选择加速度的范围为正负2g时,加速度系数为16384

当选择加速度的范围为正负4g时,加速度系数为8192

当选择加速度的范围为正负8g时,加速度系数为4096

当选择加速度的范围为正负16g时,加速度系数为2048

gyro_scale是角速度系数,用于将获得的陀螺仪寄存器的值映射到所配置的角速度取值范围内

当选择角速度的范围为正负2g时,角速度系数为16384

当选择角速度的范围为正负4g时,角速度系数为8192

当选择角速度的范围为正负8g时,角速度系数为4096

当选择角速度的范围为正负16g时,角速度系数为2048

calibration_array时校正数组,用于对mpu6050产生的数据进行校正,相当于天平的配平。

float accel_scale=16384;
float gyro_scale=131;
float calibration_array[6]={0};

 写寄存器函数

void write_register(uint8_t *data){
    i2c_cmd_handle_t cmd = i2c_cmd_link_create();
    i2c_master_start(cmd);
    i2c_master_write_byte(cmd, 0x68<<1|0, true);
    i2c_master_write(cmd, data, sizeof(data), true);
    i2c_master_stop(cmd);
    i2c_master_cmd_begin(0, cmd, 1000 / portTICK_PERIOD_MS);
    i2c_cmd_link_delete(cmd);
}

读寄存器函数 

这里的0x68是mpu6050的I2C地址

uint8_t read_register(uint8_t reg){
    uint8_t data;
    i2c_master_write_read_device(0,0x68,&reg,1,&data,1,1000/portTICK_PERIOD_MS);
    return data;
}

I2C初始化函数

这里的sda是esp32的GPIO4,scl是esp32的GPIO5,速度为400kHz

void I2C_init(void){
    i2c_config_t conf={
        .mode=I2C_MODE_MASTER,
        .sda_io_num=4,
        .scl_io_num=5,
        .sda_pullup_en=1,
        .scl_pullup_en=1,
        .master.clk_speed=400000
    };
    i2c_param_config(0,&conf);
    i2c_driver_install(0,I2C_MODE_MASTER,0,0,0);
}

mpu6050初始化函数

mpu6050通电时是默认处于睡眠状态的,需要唤醒,配置加速度和角速度的范围

GYRO_CONFIG[]={27,0x0} 正负2g  GYRO_CONFIG[]={27,0x08} 正负4g

GYRO_CONFIG[]={27,0x10} 正负8g  GYRO_CONFIG[]={27,0x18} 正负16g

ACCEL_CONFIG[]={28,0x0} 正负2g  ACCEL_CONFIG[]={28,0x08} 正负4g

ACCEL_CONFIG[]={28,0x10} 正负8g  ACCEL_CONFIG[]={28,0x18} 正负16g

该函数的作用,配置一些寄存器,根据配置的加速度和角速度取值范围设定相应系数

void MPU6050_init(void){    
    uint8_t gyroscope_config_register=27;
    uint8_t accel_config_register=28;
    uint8_t poweron[]={107,0x01};
    uint8_t DLPF_CFG[]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值