关键词不能为空

当前您在: 主页 > 英语 >

陀螺仪介绍及编程

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2021-02-01 18:21
tags:

-

2021年2月1日发(作者:大角星)


-


























































































--


最近,


被安排调试


MPU6050


模块,


之 前从没接触过相关


MEMS


传感器,


所 以感觉一头雾水。


幸好还有网络,


还有强大的兄弟团的支持。不 过,


很可惜,网上大部分资料只是简单教你如


何配置

< p>
MPU6050


并从数据寄存器读出测量值,而之后的数据处理很少涉及。 这使得像我一


样的菜鸟们十分抓狂。所以在此开辟专栏,希望大家集思广益,共同征服< /p>


MPU6050


。对于


那些还不知道


MPU6050


是啥玩意的童鞋们,百度文科会告诉你。由于对此传 感器的介绍铺


天盖地,所以此处就一笔带过,不再详细介绍。先上张图:





毫无疑问 ,无论是学习


MPU6050


,还是其他


ICs


,大家首先想到的是数据手册。没错,


MPU6050


有两个非常重要的数据手册,一个是


PS- MPU-6000A


,另一个是


RM-MPU-6000A



其他的都是原厂评估板的相关使用手册,对我们屌丝来说可以不用 拜读了。


PS-MPU-6000A


是产品说明书,主要介绍了 内部的结构、技术参数以及封装等内容;


RM-MPU-6000A


*


)是


寄存器映射和描述文档, 里面详细介绍了


MPU6050


内部各个寄存器的实现功能,对 我们用


户来说相当重要。


网上虽然有一些翻译的中文资料,


但自己还是硬着头皮仔细研读了一下两


个手册。

下面就把自己的心得和大家一起分享一下


(产品说明书网上已有中文版,

< p>
这里着重


讲一下第二个数据手册)




RM-MPU-6000A


列出了将近


100


个寄存器,


还有一部分寄存器没 有列出来,


估计是不对用


户开放的。


这 些寄存器大致上可分为如下几类:自检寄存器、


陀螺仪加速度配置寄存器、总

< p>
线配置相关寄存器、中断配置寄存器、数据寄存器、第三方传感器配置寄存器、

FIFO


相关


寄存器、


系统配置寄 存器。


第一次看到这么多寄存器时倒吸一口凉气,


相信很多网友 会跟我


有相同的感觉。


其实,仔细分析下来,真正需要你配置的 寄存器也就一半左右。由于我手中



MPU6050

< p>
模块并没有外接第三方传感器,所以需要配置的寄存器就更少了。下面我们就


一起来学习一下一些比较重要的寄存器。



系统配置寄存器



1



PWR_MGMT_1



该寄存器用来配置工作模式和时钟源。

此外,


还可以通过配置该寄存器复位整个器件以及禁


止使用 温度传感器。偶设置为


0x08


,处于正常工作模式,禁止使用 温度传感器,选用内部


8MHZ


的时钟源。


2



PWR_MGMT_2



该寄存器用来配置加速度计模式下的唤醒频率和待机模式。



3



USER_CTRL



该寄存器用来使能或禁止


FIFO


缓冲、


IIC


主模式、和


IIC


接口。



4



MOT_DETECT_CTRL







2014


年各行业工程师考试备考资 料及真题集锦




安全工程师




电气工程师




物业管理





注册资产评估师




注册化工工程师












该寄存器用来添加加速度计上电的延迟时间,默认是延时为


4ms< /p>




5


、< /p>


SIGNAL_PATH_RESET


-









































.






































-word


资料


-


-


























































































--



该寄存器用来复位各个传感器的信号通路。



陀螺仪加速度配置寄存器



1



SMPRT_DIV



该寄存器用来产生采样率



Sample Rate = Gyroscope Output Rate /



1 + SMPLRT_DIV


)< /p>




偶设置为


0 x07


,典型值。



2



CONFIG



该寄存器用来配置


FSYNC


管脚采样率和数字低通滤波器。



3



GYRO_CONFIG



该寄存器用来启动陀螺仪自检和设置陀螺仪测量范围


(用户可根据自己的要求进行设置)




4



ACCEL_CONFIG



该寄存器用来启动加速度计自检和设置加速度计测量范围( 用户可根据自己的要求进行设


置)


。手册上说也能配置高通滤波 器,但剩余的低三位没用到,不知如何设置?



I2C


配置相关寄存器




INT_PIN_CFG


寄存器< /p>


I2C_BYPASS_EN


位置


1



USER_CTRL


寄存器


I2C_MST_EN



0


,使得


主控制器的


I2



MPU6050



AUXI2C


直通。



中断配置寄存器



1



INT_PIN_CFG



该寄存器用来配置


INT


管脚的中断行为。偶设置为


0x30


,推挽输出 ,高电平有效,发生中


断时


INT


管脚 被拉高,任何读操作都会清除中断。



2



INT_ENABLE



该寄存器用来使能各种中断源。偶设置为

< br>0x01


,使能数据准备好中断。当此中断产生时,


可以 读取传感器的数据寄存器来获取测量值


(手册上说当完成写操作时会触发此中断,


不知


道是怎么回事,偶这样设置也能正常工作)












3



INT_STATUS



中断状态寄存器,可以通过读取相应中断标志位来清除中断。





上面所介绍的寄存器主 要是初始化


MPU6050


时大概用到的寄存器,


按如上配置,


MPU6050


可正常工作。对于手册 上的一些内容依然迷茫,望解答。




-









































.






































-word


资料


-


-


























































































--




*************************************** ****************************************


//


陀螺仪



MPU6050 IIC


测试程序


< /p>


**************************************** ***************************************/



#include


#include







//Keil library





GPIO_InitTypeDef GPIO_InitStructure;


ErrorStatus HSEStartUpStatus;



#define




uchar unsigned char


#define




uint unsigned int




//


定义


MPU6050


内部地址



//*** *************************************


#define


SMPLRT_DIV



0x19


//

陀螺仪采样率,典型值:


0x07(125Hz)


#define


CONFIG




0x1A


//

低通滤波频率,典型值:


0x06(5Hz)


#define


GYRO_CONFIG



0x1B


//

陀螺仪自检及测量范围,


典型值:


0x18(


不自检,


2000deg/s)


#define


ACCEL_CONFIG


0x1C


0x01(


不自检,


2G



5Hz)


//


加速计自检、测量范围及高通滤 波频率,典型值:


#define


ACCEL_XOUT_H


0x3B


#define


ACCEL_XOUT_L


0x3C


#define


ACCEL_YOUT_H


0x3D


#define


ACCEL_YOUT_L


0x3E


#define


ACCEL_ZOUT_H


0x3F


#define


ACCEL_ZOUT_L


0x40


//#define


TEMP_OUT_H



0x41


//#define


TEMP_OUT_L



0x42


//


#define


GYRO_XOUT_H



0x43


#define


GYRO_XOUT_L



0x44


#define


GYRO_YOUT_H



0x45


#define


GYRO_YOUT_L



0x46


#define


GYRO_ZOUT_H



0x47


#define


GYRO_ZOUT_L



0x48



#define


PWR_MGMT_1



0x6B


//#define


WHO_AM_I



0x75


/****************************



#define


MPU6050_Addr




0xD0



//

电源管理,典型值:


0x00(


正常启用

< br>)


//IIC


地址寄存器


(< /p>


默认数值


0x68


,只读


)




//






IIC



线






,




AL T



-









































.






































-word


资料


-


-


























































































--


ADDRESS


地址引脚不同修改




unsigned char TX_DATA[4];





//


显示据缓存区



unsigned char BUF[10];








//


接收数据缓存区



char



test=0;







//IIC


用到



short T_X,T_Y


,T_Z,T_T;




//X,Y


,Z


轴,温度




//************************************


/*


模拟


IIC


端口输出输入定义


*/


#define SCL_H










GPIOB->BSRR = GPIO_Pin_6


#define SCL_L










GPIOB->BRR



= GPIO_Pin_6







#define SDA_H










GPIOB->BSRR = GPIO_Pin_7


#define SDA_L










GPIOB->BRR



= GPIO_Pin_7



#define SCL_read







GPIOB->IDR



& GPIO_Pin_6


#define SDA_read







GPIOB->IDR



& GPIO_Pin_7



/*


函数申明


-----------------------------------------------* /


void RCC_Configuration(void);


void GPIO_Configuration(void);


void NVIC_Configuration(void);


void USART1_Configuration(void);


void WWDG_Configuration(void);


void Delay(u32 nTime);


void Delayms(vu32 m);




/*


变量定义


----------------------------------------------*/





/*******************************/


void DATA_printf(uchar *s,short temp_data)


{



if(temp_data<0){



temp_data=-temp_data;






*s='-';



}


else *s=' ';






*++s =temp_data/100+0x30;






temp_data=temp_data%100;






//


取余运算







*++s =temp_data/10+0x30;






temp_data=temp_data%10;







//


取余运算







*++s =temp_data+0x30;




}



/* ************************************************** ****************************


-









































.




































-word


资料


-




-


























































































--


* Function Name



: I2C_GPIO_Config


* Description





: Configration Simulation IIC GPIO


* Input











: None



* Output










: None


* Return










: None

< br>*********************************************** ******************************* */


void I2C_GPIO_Config(void)


{




GPIO_InitTypeDef



GPIO_InitStructure;







GPIO__Pin =



GPIO_Pin_6;




GPIO__Speed = GPIO_Speed_50MHz;




GPIO__Mode = GPIO_Mode_Out_OD;






GPIO_Init(GPIOB, &GPIO_InitStructure);





GPIO__Pin =



GPIO_Pin_7;




GPIO__Speed = GPIO_Speed_50MHz;




GPIO__Mode = GPIO_Mode_Out_OD;




GPIO_Init(GPIOB, &GPIO_InitStructure);


}



/************* ************************************************** ****************


* Function Name



: I2C_delay


* Description





: Simulation IIC Timing series delay


* Input











: None


* Output










: None


* Return










: None


void I2C_delay(void)


{








u8 i=30; //


这里可以优化速度



,经测试最低 到


5


还能写入






while(i)






{








i--;






}




}



void delay5ms(void)


{








int i=5000;







while(i)






{








i--;



-









































.




































-word


资料


-




-


























































































--





}




}


/* ************************************************** ****************************


* Function Name



: I2C_Start


* Description





: Master Start Simulation IIC Communication


* Input











: None


* Output










: None


* Return










: Wheather



Start


********** ************************************************** ****************** */


bool I2C_Start(void)


{



SDA_H;



SCL_H;



I2C_delay();



if(!SDA_read)return FALSE;


/


/SDA


线为低电平则总线忙


,


退出




SDA_L;



I2C_delay();



if(SDA_read) return FALSE;


/


/SDA


线为高电平则总线出错


,


退出




SDA_L;



I2C_delay();



return TRUE;


}


/* ************************************************** ****************************


* Function Name



: I2C_Stop


* Description





: Master Stop Simulation IIC Communication


* Input











: None


* Output










: None


* Return










: None

< br>*********************************************** ******************************* */


void I2C_Stop(void)


{



SCL_L;



I2C_delay();



SDA_L;



I2C_delay();



SCL_H;



I2C_delay();



SDA_H;



I2C_delay();


}


< /p>


/*************************************** ****************************************


* Function Name



: I2C_Ack


* Description





: Master Send Acknowledge Single


* Input











: None


-









































.




































-word


资料


-




-


























































































--


* Output










: None


* Return










: None

< br>*********************************************** ******************************* */


void I2C_Ack(void)


{




SCL_L;



I2C_delay();



SDA_L;



I2C_delay();



SCL_H;



I2C_delay();



SCL_L;



I2C_delay()


}





/************** ************************************************** ***************


* Function Name



: I2C_NoAck


* Description





: Master Send No Acknowledge Single


* Input











: None


* Output










: None


* Return










: None

< br>*********************************************** ******************************* */


void I2C_NoAck(void)


{




SCL_L;



I2C_delay();



SDA_H;



I2C_delay();



SCL_H;



I2C_delay();



SCL_L;



I2C_delay();


}


< /p>


/*************************************** ****************************************


* Function Name



: I2C_WaitAck


* Description





: Master Reserive Slave Acknowledge Single


* Input











: None


* Output










: None


* Return










: Wheather



Reserive Slave Acknowledge Single


******************************** ********************************************** */


bool I2C_WaitAck(void)




//


返回为


:=1



ACK,=0



ACK


{



SCL_L;



I2C_delay();



SDA_H;





-









































.




































-word


资料


-




-


























































































--



I2C_delay();



SCL_H;



I2C_delay();



if(SDA_read)



{








SCL_L;


I2C_delay();








return FALSE;



}



SCL_L;



I2C_delay();



return TRUE;


}


/* ************************************************** ****************************


* Function Name



: I2C_SendByte


* Description





: Master Send a Byte to Slave


* Input











: Will Send Date


* Output










: None


* Return










: None

< br>*********************************************** ******************************* */


void I2C_SendByte(u8 SendByte) //


数据从高位到低位


//


{






u8 i=8;






while(i--)






{










SCL_L;










I2C_delay();








if(SendByte&0x80)










SDA_H;










else











SDA_L;













SendByte<<=1;










I2C_delay();




SCL_H;










I2C_delay();






}






SCL_L;


}




/************** ************************************************** ***************


* Function Name



: I2C_RadeByte


* Description





: Master Reserive a Byte From Slave


* Input











: None


* Output










: None


* Return










: Date From Slave



-









































.




































-word


资料


-



-


-


-


-


-


-


-


-



本文更新与2021-02-01 18:21,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/594380.html

陀螺仪介绍及编程的相关文章

  • 余华爱情经典语录,余华爱情句子

    余华的经典语录——余华《第七天》40、我不怕死,一点都不怕,只怕再也不能看见你——余华《第七天》4可是我再也没遇到一个像福贵这样令我难忘的人了,对自己的经历如此清楚,

    语文
  • 心情低落的图片压抑,心情低落的图片发朋友圈

    心情压抑的图片(心太累没人理解的说说带图片)1、有时候很想找个人倾诉一下,却又不知从何说起,最终是什么也不说,只想快点睡过去,告诉自己,明天就好了。有时候,突然会觉得

    语文
  • 经典古训100句图片大全,古训名言警句

    古代经典励志名言100句译:好的药物味苦但对治病有利;忠言劝诫的话听起来不顺耳却对人的行为有利。3良言一句三冬暖,恶语伤人六月寒。喷泉的高度不会超过它的源头;一个人的事

    语文
  • 关于青春奋斗的名人名言鲁迅,关于青年奋斗的名言鲁迅

    鲁迅名言名句大全励志1、世上本没有路,走的人多了自然便成了路。下面是我整理的鲁迅先生的名言名句大全,希望对你有所帮助!当生存时,还是将遭践踏,将遭删刈,直至于死亡而

    语文
  • 三国群英单机版手游礼包码,三国群英手机单机版攻略

    三国群英传7五神兽洞有什么用那是多一个武将技能。青龙飞升召唤出东方的守护兽,神兽之一的青龙。玄武怒流召唤出北方的守护兽,神兽之一的玄武。白虎傲啸召唤出西方的守护兽,

    语文
  • 不收费的情感挽回专家电话,情感挽回免费咨询

    免费的情感挽回机构(揭秘情感挽回机构骗局)1、牛牛(化名)向上海市公安局金山分局报案,称自己为了挽回与女友的感情,被一家名为“实花教育咨询”的情感咨询机构诈骗4万余元。

    语文