一. 结构图 及 主要寄存器介绍
地址为:0x68时,AD0必须连线,否则INT 不工作(地址有关) 代码内INT连接的是pin29,可自行修改
设置为0x90, 主要是bit5位需设置位1;
二.主要代码
int main(void)
{
int ret = 0;
static int16_t AccValue[3],GyroValue[3];
float pitch,roll,yaw; //欧拉角
float a[3], g[3];
uint8_t i;
//初始化串口
uart_config();
gpio_init();
//初始化TWI
twi_master_init();
//上电服务前延时,否则数据可能会出错
nrf_delay_ms(500);
//初始化mpu6060,初始化过程中会验证mpu6050的ID
printf("MPU_Init start\r\n");
while(MPU_Init() != 0)
{
printf("MPU_Init fail\r\n");
nrf_delay_ms(20);
}
printf("MPU_Init sucess\r\n");
MPU_INT_Init(); //配置寄存器
while(1)
{
printf("enter sleep off\n");
nrf_delay_ms(1000);
system_off();
// 此部分可加入定时器,长时间不动时,进入休眠模式的判断依据
// ret = MPU_Read_Byte(MOT_DETECT_STATUS);
// printf("mot_detect ret = %d", ret);
// ret = nrf_gpio_pin_read(26);
// printf(" Int26 = %d\n", ret);
// nrf_delay_ms(1000);
}
}
/**
配置GPIOTE初始化
*/
static void gpio_init(void)
{
nrf_gpio_cfg_sense_input(PIN_MPUINT, NRF_GPIO_PIN_PULLUP, NRF_GPIO_PIN_SENSE_LOW);
}
#define MPU6050_RA_MOT_THR 0X1F //加速度中断阈值寄存器
#define MPU6050_RA_MOT_DUR 0X20 //加速中断时间寄存器
#define MPU6050_RA_ZRMOT_THR 0X21 //静止中断阈值寄存器
#define MPU6050_RA_ZRMOT_DUR 0X22 //静止中断时间寄存器
#define MPU6050_RA_FF_DUR 0X1D //自由落体中断阈值寄存器
#define MPU6050_RA_FF_THR 0X1E //自由落体中断时间寄存器
#define MOT_DETECT_STATUS 0x61 //运动状态寄存器
void Free_Fall_Interrupt(void) //自由落体中断
{
MPU_Write_Byte(MPU6050_RA_FF_THR,0x01); //自由落体阈值
MPU_Write_Byte(MPU6050_RA_FF_DUR,0x014); //自由落体检测时间20ms 单位1ms 寄存器0X20
}
void Motion_Interrupt(void) //运动中断
{
MPU_Write_Byte(MPU6050_RA_MOT_THR, 0x05); //运动阈值
MPU_Write_Byte(MPU6050_RA_MOT_DUR, 0x014); //检测时间20ms 单位1ms 寄存器0X20
}
void Zero_Motion_Interrupt(void) //静止中断
{
MPU_Write_Byte(MPU6050_RA_ZRMOT_THR,0x20); //静止阈值
MPU_Write_Byte(MPU6050_RA_ZRMOT_DUR,0x14); //静止检测时间20ms 单位1ms 寄存器0X20
}
void MPU_INT_Init(void)
{
Motion_Interrupt(); //运动中断
MPU_Write_Byte(MPU_CFG_REG, 0x04); //配置外部引脚采样和DLPF数字低通滤波器
MPU_Write_Byte(MPU_ACCEL_CFG_REG, 0x1C); //加速度传感器量程和高通滤波器配置 +-4g 分辨率 8193 LSB/g
// MPU_Write_Byte(MPU_INTBP_CFG_REG, 0X30); //INT引脚 中断时高电平,读取运动状态寄存器清中断
// MPU_Write_Byte(MPU_INT_EN_REG, 0x50); //中断使能寄存器 使能运动中断和加速度中断
MPU_Write_Byte(MPU_INTBP_CFG_REG, 0X90); //INT引脚 中断时高电平,读取运动状态寄存器清中断
MPU_Write_Byte(MPU_INT_EN_REG, 0x40); //中断使能寄存器 使能运动中断和加速度中断
}
三.代码下载链接
https://download.csdn.net/download/u012840934/89628828