|
FireBLE 开发板 mpu-6050 裸驱发布
发表于 2015-6-3 16:01:28
浏览:10446
|
回复:2
打印
只看该作者
[复制链接]
楼主
本帖最后由 FireBLE_blue 于 2015-6-3 16:47 编辑
最近不少购买FireBLE 的用户 提到为什么没有MPU-6050 的驱动,其实是有的,工程师忙,一直没有时间未整理。
在再三的追求下,整理出了一份,上传进了仓库,地址还是原来的地址:- 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 ,
- //初始化MPU6050
- //返回值:0,成功
- // 其他,错误代码
- uint8_t MPU_Init(void)
- {
- uint8_t res;
- IIC_Init();//初始化IIC总线
- MPU_Write_Byte(MPU_PWR_MGMT1_REG,0X80); //复位MPU6050
- delay_ms(100);
- MPU_Write_Byte(MPU_PWR_MGMT1_REG,0X00); //唤醒MPU6050
- MPU_Set_Gyro_Fsr(3); //陀螺仪传感器,±2000dps
- MPU_Set_Accel_Fsr(0); //加速度传感器,±2g
- MPU_Set_Rate(20); //设置采样率20Hz
- MPU_Write_Byte(MPU_INT_EN_REG,0X00); //关闭所有中断
- MPU_Write_Byte(MPU_USER_CTRL_REG,0X00); //I2C主模式关闭
- MPU_Write_Byte(MPU_FIFO_EN_REG,0X00); //关闭FIFO
- MPU_Write_Byte(MPU_INTBP_CFG_REG,0X80); //INT引脚低电平有效
- MPU_Write_Byte(MPU_INT_EN_REG,0X01); //开启data ready 中断
- res=MPU_Read_Byte(MPU_DEVICE_ID_REG);
- if(res==MPU_ADDR)//器件ID正确
- {
- MPU_Write_Byte(MPU_PWR_MGMT1_REG,0X01); //设置CLKSEL,PLL X轴为参考
- MPU_Write_Byte(MPU_PWR_MGMT2_REG,0X00); //加速度与陀螺仪都工作
- MPU_Set_Rate(20); //设置采样率为20Hz
- }else return 1;
- return 0;
- }
复制代码
MPU-6050 的初始化主要配置 加速度、陀螺仪的量程,以及采样率。
初始化后即可读取采集的数据,读取数据比较简单,只是读取寄存器的值,然后拼接为数值,例如读取加速度值(陀螺仪类似);
- //得到加速度值(原始值)
- //ax,ay,az:陀螺仪x,y,z轴的原始读数(带符号)
- //返回值:0,成功
- // 其他,错误代码
- uint8_t MPU_Get_Accelerometer(short *ax,short *ay,short *az)
- {
- uint8_t buf[6],res;
- res=MPU_Read_Len(MPU_ADDR,MPU_ACCEL_XOUTH_REG,6,buf);
- if(res==0)
- {
- *ax=((uint16_t)buf[0]<<8)|buf[1];
- *ay=((uint16_t)buf[2]<<8)|buf[3];
- *az=((uint16_t)buf[4]<<8)|buf[5];
- }
- return res;
- }
复制代码
主函数如下:
- /**
- * @brief mpu6050 excample
- */
- int main (void)
- {
- int16_t buf[6];
- SystemInit();
- //UART io configurate
- uart0_init();
- //MPU-6050 initialization
- MPU_Init();
- //MPU-6050 INT pin configurate
- mpu6050_int_init();
- printf("------Hello MPU6050!!!------\r\n");
- while (1)
- {
- //如果data raady 中断已产生,采集了新数据
- if(mpu_6050_int_flag == 1)
- {
- mpu_6050_int_flag = 0;
- //读取加速度值
- MPU_Get_Accelerometer(&buf[0],&buf[1],&buf[2]);
- //读取陀螺仪值
- MPU_Get_Gyroscope(&buf[3],&buf[4],&buf[5]);
- //打印采集的值
- 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]);
- }
- }
- }
复制代码
该裸驱,主要初始化了IIC后通过IIC初始化MPU-6050,之后就采集数据了,比较简单,用户可以在此代码的基础上开发出你们所想的更炫的功能。
编译即可通过jlink 下载进开发板,查看运行效果如下
- ------Hello MPU6050!!!------
- ax:428 ay:-92 az:16222 gx:-38 gy:5 gz:-39
- ax:450 ay:-78 az:16216 gx:-38 gy:4 gz:-38
- ax:456 ay:-90 az:16238 gx:-38 gy:4 gz:-38
- ax:442 ay:-98 az:16250 gx:-38 gy:4 gz:-38
- ax:458 ay:-82 az:16252 gx:-38 gy:4 gz:-38
- ax:458 ay:-90 az:16262 gx:-38 gy:4 gz:-38
- ax:466 ay:-56 az:16236 gx:-38 gy:4 gz:-38
- ax:426 ay:-82 az:16224 gx:-38 gy:4 gz:-39
- ax:458 ay:-74 az:16230 gx:-37 gy:4 gz:-38
- ax:450 ay:-66 az:16226 gx:-38 gy:4 gz:-38
- ax:454 ay:-86 az:16232 gx:-38 gy:5 gz:-38
- ax:454 ay:-86 az:16272 gx:-38 gy:4 gz:-38
- ax:446 ay:-62 az:16274 gx:-38 gy:4 gz:-38
- ax:450 ay:-80 az:16238 gx:-38 gy:4 gz:-38
- ax:468 ay:-84 az:16258 gx:-38 gy:4 gz:-38
- ax:464 ay:-86 az:16202 gx:-38 gy:4 gz:-38
- ax:462 ay:-90 az:16256 gx:-38 gy:4 gz:-38
- ax:478 ay:-84 az:16182 gx:-38 gy:4 gz:-39
- ax:452 ay:-84 az:16240 gx:-38 gy:4 gz:-38
- ax:468 ay:-70 az:16224 gx:-38 gy:4 gz:-38
- ax:430 ay:-80 az:16228 gx:-38 gy:4 gz:-38
- ax:448 ay:-70 az:16216 gx:-38 gy:4 gz:-38
- ax:466 ay:-80 az:16252 gx:-38 gy:5 gz:-38
- ax:468 ay:-82 az:16228 gx:-38 gy:4 gz:-39
- ax:450 ay:-82 az:16238 gx:-38 gy:4 gz:-38
- ax:452 ay:-84 az:16272 gx:-38 gy:4 gz:-38
- ax:448 ay:-66 az:16210 gx:-38 gy:4 gz:-38
- ax:442 ay:-78 az:16242 gx:-38 gy:4 gz:-38
复制代码
|
|