【自学嵌入式:stm32单片机】MPU6050
MPU6050
MPU6050简介
- MPU6050是一个6轴姿态传感器,可以测量芯片自身X、Y、Z轴的加速度、角速度参数,通过数据融合,可进一步得到姿态角,常应用于平衡车、飞行器等需要检测自身姿态的场景
- 3轴加速度计(Accelerometer):测量X、Y、Z轴的加速度
- 3轴陀螺仪传感器(Gyroscope):测量X、Y、Z轴的角速度

MPU6050参数
- 
16位ADC采集传感器的模拟信号,量化范围:-32768~32767 
- 
加速度计满量程选择:±2、±4、±8、±16(g,重力加速度) 
- 
陀螺仪满量程选择: ±250、±500、±1000、±2000(°/sec,每秒旋转了多少度) 
- 
可配置的数字低通滤波器 
- 
可配置的时钟源 
- 
可配置的采样分频 
- 
I2C从机地址:1101000(AD0=0),1101001(AD0=1) 
硬件电路

| 引脚 | 功能 | 
|---|---|
| VCC、GND | 电源 | 
| SCL、SDA | I2C通信引脚 | 
| XCL、XDA | 主机I2C通信引脚 | 
| AD0 | 从机地址最低位 | 
| INT | 中断信号输出 | 
AD0引脚是从机地址的最低位
MPU6050框图
时钟和传感器

左上角是时钟系统,有时钟输入脚CLKIN和时钟输出脚CLKOUT,我们一般使用内部时钟,在刚才的硬件电路中,CLKIN直接接GND,CLKOUT没有引出,灰色的部分就是芯片内部的传感器,其中包括XYZ轴的加速度计,XYZ轴的陀螺仪,另外这个芯片还内置了一个温度传感器,这么多传感器,本质上相当于一个可变电阻,经过ADC模数转换,转换完成之后,这些传感器的数统一都放到数据寄存器中,我们读取数据寄存器就能得到传感器测量的值了,这个芯片内部的转换,都是全自动进行的,就类似我门之前学的AD连续转换+DMA转运,每个ADC输出,对应16位的数据寄存器,不存在数据覆盖的问题,我们配置好转换频率之后,每个数据就自动以我们设置的频率刷新到数据寄存器,我们需要数据的时候,直接来读就行了

传感器的自测单元
如上图,每个传感器都有自测单元,这部分是用来验证芯片好坏的,当启动自测后,芯片内部会模拟一个外力施加在传感器上,这个外力导致传感器数据会比平时大一些,如要自测,先使能自测,读出数据,再使能自测,读取数据,两个数据一相减,得到的数据叫自测相应,这个自测响应在芯片手册中给了一个范围,如果一个自测响应在这个范围内说明没问题,如果不在,就说明芯片可能坏了,使用的话就要小心点。

电荷泵
如上图,这个是电荷泵,或者叫充电泵,CPOUT引脚需要外接一个电容,电容在芯片手册中有说明,电荷泵是一种升压电路,OLED屏幕也是。

如上图,通过快速切换电源和电容的串并联(电容不断充放电),实现升压,然后再加一个电源滤波,就能进行平稳地升压,这就是电荷泵的升压原理。
在这里,由于陀螺仪内部是需要一个高电压支持的,所以设计了一个电荷泵进行升压,这个升压过程是自动的,不需要我们操作。

寄存器和通信接口
如上图,右边这一大部分就是寄存器和通信接口部分了,中断状态寄存器(Interrupt Status Register),可以控制内部的哪些事件到中断引脚的输出;
先入先出寄存器(FIFO),可以对数据流进行缓存。
配置寄存器(Config Registers),可以对内部的各个电路进行配置。
传感器寄存器(Sensor Register),也就是数据寄存器,存储了各个传感器的数据。
工厂校准(Factory Calibration),这个意思就是内部的传感器都进行了校准
数字运动处理器(Digital Motion Processor,简称DMP)是芯片内部自带的一个姿态解算的硬件算法,配合官方的DMP库,可以进行姿态解算
帧同步(FSYNC),暂时用不到。


如上图,上面是通信接口部分,就是从机的I2C和SPI通信接口,用于和STM32通信。

如上图,是主机的I2通信接口,用于和MPU6050扩展的设备进行通信。
Serial Interface Bypass Mux是接口旁路选择器,就是一个开关,如果拨到上面,辅助的I2C引脚就和正常的I2C引脚接到一起,这样两路总线就合在一起了,STM32在此时可以控制所有设备,STM32就是“大哥”,MPU6050和这个扩展设备都是STM32的“小弟”;如果拨到下面,辅助的I2C引脚就由MPU6050控制,两条I2C总线独立分开,这时STM32是MPU6050的“大哥”,MPU6050又是扩展设备的大哥。

如上图,这里是供电的部分
这个芯片的I2C频率最大可达400KHz,如果发射的I2C通信信号超过这个频率,那这个芯片可能因为跟不上信号而无法通信
常用寄存器

采样频率分频器SMPLRT_DIV
配置寄存器CONFIG
陀螺仪配置寄存器GYRO_CONFIG
加速度计配置寄存器ACCEL_CONFIG
下面这一大块是数据寄存器

下面是加速度计XYZ轴的数据:

下面是温度传感器的数据:

下面是陀螺仪XYZ轴的数据:

上面这些寄存器,_L表示低8位,_H表示高8位
最后是:

电源管理寄存器PWR_MGMT_1,PWR_MGMT_2
器件ID号寄存器WHO_AM_I
采样频率分频器SMPRT_DIV

这个寄存器可以配置采样频率的分频系数,简单来说就是,分频越小,内部的AD转换就越快,数据寄存器刷新就越快,反之就越慢,采样频率公式:
Sample Rate = Gyroscope Output Rate / (1 + SMPLRT_DIV)
Sample Rate是采样频率,Gyroscope Output Rate是陀螺仪输出时钟频率(这里是以陀螺仪时钟为例子,也可以用外部时钟),SMPLRT_DIV是采样分频
不使用低通滤波器时,陀螺仪时钟为8KHz,使用滤波器,时钟就是1KHz
配置寄存器CONFIG

配置寄存器内部有两部分,EXT_SYNC_SET是外部同步设置,DLPF_CFG是低通滤波器配置。

上图表种是低通滤波器的参数,这个低通滤波器可以让输出数据更加平滑,配置滤波器参数越大,输出数据抖动就越小,0是不使用低通滤波器,陀螺仪时钟为8KHz,之后使用了低通滤波器,陀螺仪时钟就是1KHz,最后一行参数7是保留位,没有用到。
陀螺仪配置寄存器GYRO_CONFIG

该寄存器高3位XG-ST,YG_ST,ZG_ST是XYZ轴的自测使能位,中间2位FS_SEL是满量程选择位,后面3位没用到
自测公式:
Self-test response(自测响应) = Sensor output with self-test enabled(自测使能时的数据) – Sensor output without self test enabled(自测失能时的数据)
上电后先使能自测,读取数据,再失能自测,读取数据,两者相减,得到自测响应。
在另一个讲电气特性的手册里找到自测响应的范围

如果在这个范围里,芯片就通过了自检,之后正常使用即可。
然后是满量程选择FS_SEL,如下图中的表格:

量程越大,分辨率越小,量程越小,分辨率越高
加速度计配置寄存器ACCEL_CONFIG

高3位XA_ST,YA_ST,ZA_ST是自测使能位,中间2位AFS_SEL是满量程选择,低3位ACCEL_HPF是配置高通滤波器。
加速度计数据寄存器

这些寄存器只读,想要读取对应轴的加速度,就需要读取这些寄存器的值,其中:

这些是二进制的有符号数,以二进制补码的方式存储,我们读出高8位和低8位,高位左移8次,或上低位数据,最后再存在一个int16_t的变量里。
温度传感器

陀螺仪数据

温度传感器和陀螺仪数据寄存器都是只读的,都是用和上面读数据一样的方法读数据
电源管理寄存器1

高1位BIT7,DEVICE_RESET设备复位,这一位写1,所有寄存器都恢复到默认值
BIT6,SLEEP睡眠模式,这一位写1,芯片睡眠,芯片不工作,进入低功耗
BIT5,CYCLE,这一位写1,设备进入低功耗,过一段时间,启动一次,并且唤醒的频率由电源管理寄存器2的高2位LP_WAKE_CTRL决定,这个模式比较省电

BIT3,TEMP_DIS温度传感器失能,写1之后,禁用内部的温度传感器
最后3位CLKSEL,用来选择系统时钟来源,如下表:

这个图中的表分别是1是内部晶振,2-3是XYZ轴陀螺仪晶振,4和5是外部引脚的两个方波,一般我们选择内部晶振或者陀螺仪晶振,手册推荐选择陀螺仪晶振,因为陀螺仪的晶振更加精确。
电源管理寄存器2

BIT5-BIT0可以分别控制6个轴进入待机模式,如果只需要部分轴的数据,可以让其他轴待机,这一比较省电
ID号寄存器

此寄存器是只读寄存器,ID号不可修改,ID号中间这6位(BIT5-BIT1),固定为110100,实际上这个ID号就是I2C通信的地址,它的最高位和最低为,其实都是0,那读出这个寄存器,值就固定为0x68,AD0引脚的值,并不反映在这个寄存器上,这个I2C地址,可以通过AD0引脚进行配置,但是,这里的ID号的最低位,是不随AD0引脚变化而变化的,读出ID号,始终都是0x68,当然这个ID号也不是非要和I2C地址一样,只是它这样设计了而已。
【注】一般来说,所有的寄存器,上电默认值都是0x00,只有下面这两个寄存器上电后不是默认0x00:

117号寄存器就是ID号寄存器,默认0x68,107号寄存器是电源管理寄存器1,默认0x40,也就是次高位为1,次高位是SLEEP,所以这个芯片上电默认就是睡眠模式,在操作这个芯片之前,要先记得解除睡眠,否则操作其他寄存器是无效的。
 
                    
                 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号