Firefly开源社区
标题:
FireBLE 开发板 mpu-6050 裸驱发布
[打印本页]
作者:
FireBLE_blue
时间:
2015-6-3 16:01
标题:
FireBLE 开发板 mpu-6050 裸驱发布
本帖最后由 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
复制代码
作者:
暴走的阿Sai
时间:
2015-6-3 16:19
不错~
作者:
lovefirstly
时间:
2015-6-3 16:22
很好!收藏!
欢迎光临 Firefly开源社区 (https://dev.t-firefly.com/)
Powered by Discuz! X3.1