i.MX6ULL终结者MPU6050 六轴传感器例程程序设计

本文档详细介绍了如何在Linux环境下,基于i.MX6ULL开发板进行MPU6050六轴传感器的驱动程序设计。首先创建相应目录,接着将例程代码复制到新建目录中,并在drivers目录下建立mpu6050子目录,编写mpu6050.h和mpu6050.c文件,包含初始化函数、寄存器配置函数和读取函数。在main.c文件中调用初始化函数并读取传感器数据进行显示。
摘要由CSDN通过智能技术生成

本实验的源码工程在开发板光盘资料的:i.MX6UL终结者光盘资料\04_裸机例程源码\19_mpu6050目录下。我们在Ubuntu系统下使用命令“mkdir 19_mpu6050”建立“19_mpu6050”文件夹,如图 1所示:
在这里插入图片描述

图 1

然后使用“cd 19_mpu6050”命令进入到19_mpu6050文件夹,如图 2所示:
在这里插入图片描述

图 2

然后使用命令“cp -r …/18_touchscreen/* ./”将上一章例程中的所有内容拷贝到刚刚新建的“19_mpu6050”里面,如图 27.3.3所示:
在这里插入图片描述

图 3

然后在drivers目录下建立mpu6050文件夹,用来保存mpu6050的驱动文件,然后在“drivers/mpu6050”目录中新建mpu6050.h和mpu6050.c两个文件,然后在mpu6050.h文件输入下面的代码:

  1 #ifndef _BSP_MPU6050_H
  2 #define _BSP_MPU6050_H
  3 
  4 #include "imx6ul.h"
  5 
  6 #define MPU6050_ADDR            0X68    /* MPU6050器件地址 */
  7 
  8 /* MPU6050寄存器 */
  9 #define MPU_CFG_REG                  0X1A    /*配置寄存器*/
 10 #define MPU_PWR_MGMT1_REG          0x6B    /*电源管理寄存器1*/
 11 #define MPU_PWR_MGMT2_REG         0x6C    /*电源管理寄存器2*/
 12 #define MPU_GYRO_CFG_REG           0x1B    /*陀螺仪配置寄存器*/
 13 #define MPU_ACCEL_CFG_REG              0x1C    /*加速度配置寄存器*/
 14 #define MPU_SAMPLE_RATE_REG           0x19    /*采样频率分频器*/
 15 #define MPU_INT_EN_REG              0x38    /*中断使能寄存器*/
 16 #define MPU_USER_CTRL_REG              0x6A    /*用户控制寄存器*/
 17 #define MPU_FIFO_EN_REG              0x23    /*FIFO使能寄存器*/
 18 #define MPU_INTBP_CFG_REG              0x37    /*中断旁路设置寄存器*/
 19 
 20 #define ACCEL_XOUT_H     0x3B        /* 加速度值,X轴高8位寄存器 */
 21 #define ACCEL_YOUT_H     0x3D        /* 加速度值,Y轴高8位寄存器 */
 22 #define ACCEL_ZOUT_H      0x3F        /* 加速度值,Z轴高8位寄存器 */
 23 #define GYRO_XOUT_H      0x43        /* 陀螺仪值,X轴高8位寄存器 */
 24 #define GYRO_YOUT_H       0x45        /* 陀螺仪值,Y轴高8位寄存器 */
 25 #define GYRO_ZOUT_H      0x47        /* 陀螺仪值,Z轴高8位寄存器 */
 26 
 27 
 28 /* 函数声明 */
 29 void mpu6050_init(void);
 30 unsigned char mpu6050_readonebyte(unsigned char addr,unsigned char reg);
 31 unsigned char mpu6050_writeonebyte(unsigned char addr,
                                    unsigned char reg,
                                     unsigned char data);
 32 
 33 #endif

mpu6050.h文件里面主要定义了一些与mpu6050寄存器相关的宏,以及声明了一些函数。
然后我们打开mpu6050.c文件,在里面输入下面的代码:

  1 #include "mpu6050.h"
  2 #include "i2c.h"
  3 #include "delay.h"
  4 #include "cc.h"
  5 #include "stdio.h"
  6 
  7 /*
  8  * @description : 初始化MPU6050
  9  * @param       : 无
 10  * @return      : 无返回
 11  */
 12 void mpu6050_init(void)
 13 {
   
 14 
 15      /* 1、IO初始化,配置I2C IO属性  
 16      * I2C1_SCL -> UART4_TXD
 17      * I2C1_SDA -> UART4_RXD
 18      */
 19         IOMUXC_SetPinMux(IOMUXC_UART4_TX_DATA_I2C1_SCL, 1);
 20         IOMUXC_SetPinMux(IOMUXC_UART4_RX_DATA_I2C1_SDA, 1);
 21 
 22         /* 
 23          *bit 16:0 HYS关闭
 24          *bit [15:14]: 1 默认47K上拉
 25          *bit [13]: 1 pull功能
 26          *bit [12]: 1 pull/keeper使能 
 27          *bit [11]: 0 关闭开路输出
 28          *bit [7:6]: 10 速度100Mhz
 29          *bit [5:3]: 110 驱动能力为R0/6
 30          *bit [0]: 1 高转换率
 31          */
 32         IOMUXC_SetPinConfig(IOMUXC_UART4_TX_DATA_I2C1_SCL, 0x70B0);
 33         IOMUXC_SetPinConfig(IOMUXC_UART4_RX_DATA_I2C1_SDA, 0X70B0);
 34 
 35         i2c_init(I2C1);         /* 初始化I2C1 */
 36 
 37         /* 2、初始化MPU6050 */
 38         mpu6050_writeonebyte(MPU6050_ADDR, 
MPU_PWR_MGMT1_REG, 
0X80);    /* 复位MPU6050          */
 39         delayms(50);
 40         mpu6050_writeonebyte(MPU6050_ADDR, 
MPU_PWR_MGMT1_REG, 
0X00);   /* 唤醒MPU6050          */
 41         delayms(50)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值