关键词不能为空

当前您在: 主页 > 英语 >

陀螺仪介绍及编程

作者:高考题库网
来源: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

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

  • 爱心与尊严的高中作文题库

    1.关于爱心和尊严的作文八百字 我们不必怀疑富翁的捐助,毕竟普施爱心,善莫大焉,它是一 种美;我们也不必指责苛求受捐者的冷漠的拒绝,因为人总是有尊 严的,这也是一种美。

    小学作文
  • 爱心与尊严高中作文题库

    1.关于爱心和尊严的作文八百字 我们不必怀疑富翁的捐助,毕竟普施爱心,善莫大焉,它是一 种美;我们也不必指责苛求受捐者的冷漠的拒绝,因为人总是有尊 严的,这也是一种美。

    小学作文
  • 爱心与尊重的作文题库

    1.作文关爱与尊重议论文 如果说没有爱就没有教育的话,那么离开了尊重同样也谈不上教育。 因为每一位孩子都渴望得到他人的尊重,尤其是教师的尊重。可是在现实生活中,不时会有

    小学作文
  • 爱心责任100字作文题库

    1.有关爱心,坚持,责任的作文题库各三个 一则150字左右 (要事例) “胜不骄,败不馁”这句话我常听外婆说起。 这句名言的意思是说胜利了抄不骄傲,失败了不气馁。我真正体会到它

    小学作文
  • 爱心责任心的作文题库

    1.有关爱心,坚持,责任的作文题库各三个 一则150字左右 (要事例) “胜不骄,败不馁”这句话我常听外婆说起。 这句名言的意思是说胜利了抄不骄傲,失败了不气馁。我真正体会到它

    小学作文
  • 爱心责任作文题库

    1.有关爱心,坚持,责任的作文题库各三个 一则150字左右 (要事例) “胜不骄,败不馁”这句话我常听外婆说起。 这句名言的意思是说胜利了抄不骄傲,失败了不气馁。我真正体会到它

    小学作文