Firefly开源社区

FireBLE 开发板 mpu-6050 裸驱发布

151

积分

0

威望

0

贡献

技术小白

积分
151
发表于 2015-6-3 16:01:28     
本帖最后由 FireBLE_blue 于 2015-6-3 16:47 编辑

最近不少购买FireBLE  的用户 提到为什么没有MPU-6050 的驱动,其实是有的,工程师忙,一直没有时间未整理。
在再三的追求下,整理出了一份,上传进了仓库,地址还是原来的地址:
  1. git clone https://bitbucket.org/T-Firefly/fireble.git
复制代码
如果电脑没有装git 工具 也可打包直接下载: https://bitbucket.org/T-Firefly/fireble/downloads
下载后在..\fireble\Driver\mpu6050 目录下即为MPU-6050 裸驱,主要code 为初始化MPU-6050 ,
  1. //初始化MPU6050
  2. //返回值:0,成功
  3. //    其他,错误代码
  4. uint8_t MPU_Init(void)
  5. {
  6.         uint8_t res;
  7.         IIC_Init();//初始化IIC总线
  8.         MPU_Write_Byte(MPU_PWR_MGMT1_REG,0X80);        //复位MPU6050
  9.         delay_ms(100);
  10.         MPU_Write_Byte(MPU_PWR_MGMT1_REG,0X00);        //唤醒MPU6050
  11.         MPU_Set_Gyro_Fsr(3);                                        //陀螺仪传感器,±2000dps
  12.         MPU_Set_Accel_Fsr(0);                                        //加速度传感器,±2g
  13.         MPU_Set_Rate(20);                                                //设置采样率20Hz
  14.         MPU_Write_Byte(MPU_INT_EN_REG,0X00);        //关闭所有中断
  15.         MPU_Write_Byte(MPU_USER_CTRL_REG,0X00);        //I2C主模式关闭
  16.         MPU_Write_Byte(MPU_FIFO_EN_REG,0X00);        //关闭FIFO
  17.         MPU_Write_Byte(MPU_INTBP_CFG_REG,0X80);        //INT引脚低电平有效
  18.         MPU_Write_Byte(MPU_INT_EN_REG,0X01);        //开启data ready 中断
  19.         res=MPU_Read_Byte(MPU_DEVICE_ID_REG);
  20.         if(res==MPU_ADDR)//器件ID正确
  21.         {
  22.                 MPU_Write_Byte(MPU_PWR_MGMT1_REG,0X01);        //设置CLKSEL,PLL X轴为参考
  23.                 MPU_Write_Byte(MPU_PWR_MGMT2_REG,0X00);        //加速度与陀螺仪都工作
  24.                 MPU_Set_Rate(20);                                                //设置采样率为20Hz
  25.          }else return 1;
  26.         return 0;
  27. }
复制代码

MPU-6050 的初始化主要配置 加速度、陀螺仪的量程,以及采样率。
初始化后即可读取采集的数据,读取数据比较简单,只是读取寄存器的值,然后拼接为数值,例如读取加速度值(陀螺仪类似);
  1. //得到加速度值(原始值)
  2. //ax,ay,az:陀螺仪x,y,z轴的原始读数(带符号)
  3. //返回值:0,成功
  4. //    其他,错误代码
  5. uint8_t MPU_Get_Accelerometer(short *ax,short *ay,short *az)
  6. {
  7.         uint8_t buf[6],res;  
  8.         res=MPU_Read_Len(MPU_ADDR,MPU_ACCEL_XOUTH_REG,6,buf);
  9.         if(res==0)
  10.         {
  11.                 *ax=((uint16_t)buf[0]<<8)|buf[1];  
  12.                 *ay=((uint16_t)buf[2]<<8)|buf[3];  
  13.                 *az=((uint16_t)buf[4]<<8)|buf[5];
  14.         }         
  15.     return res;
  16. }
复制代码

主函数如下:
  1. /**
  2. * @brief mpu6050 excample
  3. */
  4. int main (void)
  5. {
  6.     int16_t buf[6];
  7.     SystemInit();

  8.     //UART io configurate
  9.     uart0_init();
  10.     //MPU-6050 initialization
  11.     MPU_Init();
  12.     //MPU-6050 INT pin configurate
  13.     mpu6050_int_init();

  14.     printf("------Hello MPU6050!!!------\r\n");

  15.     while (1)
  16.     {
  17.                 //如果data raady 中断已产生,采集了新数据
  18.                 if(mpu_6050_int_flag == 1)
  19.                 {
  20.                         mpu_6050_int_flag = 0;
  21.                         //读取加速度值
  22.                         MPU_Get_Accelerometer(&buf[0],&buf[1],&buf[2]);
  23.                         //读取陀螺仪值
  24.                         MPU_Get_Gyroscope(&buf[3],&buf[4],&buf[5]);
  25.                         //打印采集的值
  26.                         printf("ax:%d ay:%d az:%d gx:%d gy:%d gz:%d \r\n",buf[0],buf[1],buf[2],buf[3],buf[4],buf[5]);
  27.                 }
  28.     }
  29. }
复制代码

该裸驱,主要初始化了IIC后通过IIC初始化MPU-6050,之后就采集数据了,比较简单,用户可以在此代码的基础上开发出你们所想的更炫的功能。

编译即可通过jlink 下载进开发板,查看运行效果如下
  1. ------Hello MPU6050!!!------
  2. ax:428 ay:-92 az:16222 gx:-38 gy:5 gz:-39
  3. ax:450 ay:-78 az:16216 gx:-38 gy:4 gz:-38
  4. ax:456 ay:-90 az:16238 gx:-38 gy:4 gz:-38
  5. ax:442 ay:-98 az:16250 gx:-38 gy:4 gz:-38
  6. ax:458 ay:-82 az:16252 gx:-38 gy:4 gz:-38
  7. ax:458 ay:-90 az:16262 gx:-38 gy:4 gz:-38
  8. ax:466 ay:-56 az:16236 gx:-38 gy:4 gz:-38
  9. ax:426 ay:-82 az:16224 gx:-38 gy:4 gz:-39
  10. ax:458 ay:-74 az:16230 gx:-37 gy:4 gz:-38
  11. ax:450 ay:-66 az:16226 gx:-38 gy:4 gz:-38
  12. ax:454 ay:-86 az:16232 gx:-38 gy:5 gz:-38
  13. ax:454 ay:-86 az:16272 gx:-38 gy:4 gz:-38
  14. ax:446 ay:-62 az:16274 gx:-38 gy:4 gz:-38
  15. ax:450 ay:-80 az:16238 gx:-38 gy:4 gz:-38
  16. ax:468 ay:-84 az:16258 gx:-38 gy:4 gz:-38
  17. ax:464 ay:-86 az:16202 gx:-38 gy:4 gz:-38
  18. ax:462 ay:-90 az:16256 gx:-38 gy:4 gz:-38
  19. ax:478 ay:-84 az:16182 gx:-38 gy:4 gz:-39
  20. ax:452 ay:-84 az:16240 gx:-38 gy:4 gz:-38
  21. ax:468 ay:-70 az:16224 gx:-38 gy:4 gz:-38
  22. ax:430 ay:-80 az:16228 gx:-38 gy:4 gz:-38
  23. ax:448 ay:-70 az:16216 gx:-38 gy:4 gz:-38
  24. ax:466 ay:-80 az:16252 gx:-38 gy:5 gz:-38
  25. ax:468 ay:-82 az:16228 gx:-38 gy:4 gz:-39
  26. ax:450 ay:-82 az:16238 gx:-38 gy:4 gz:-38
  27. ax:452 ay:-84 az:16272 gx:-38 gy:4 gz:-38
  28. ax:448 ay:-66 az:16210 gx:-38 gy:4 gz:-38
  29. ax:442 ay:-78 az:16242 gx:-38 gy:4 gz:-38
复制代码



回复

使用道具 举报

发表于 2015-6-3 16:19:40     
不错~
暴走的创客!
回复

使用道具 举报

179

积分

0

威望

0

贡献

技术小白

积分
179
发表于 2015-6-3 16:22:23     
很好!收藏!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

友情链接 : 爱板网 电子发烧友论坛 云汉电子社区 粤ICP备14022046号-2
快速回复 返回顶部 返回列表