mpu6050动态唤醒nrf52

一. 结构图 及 主要寄存器介绍

 

地址为: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

  • 21
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值