stm32的陀螺仪芯片MPU6050的初始化寄存器配置
MPU6050读取数据步骤:
1,检查MCU(主机)与MPU6050(姿态传感器)是否通信成功
2,设置MPU6050为复位状态,并且100ms延时,确保复位完成
3,唤醒MPU6050,选择PLL为时钟源
4,配置6轴数据全部输出(3轴加速度与3轴陀螺仪)
5,禁止所有中断(避免传感器读取到一个数据就中断,而耽误系统进程)
6,设置MPU6050的内部采样频率以及低通滤波器(小的飞行器一一般设施在20~30Hz即可)
7,设置陀螺仪与加速度计的满量程范围
8,主处理芯片可以直接访问MPU6050辅助I2C
下面来一步一步配置:
1,检查MCU(主机)与MPU6050(姿态传感器)是否通信成功
我们选用的读取MPU6050储存ID的寄存器即0x75,如果读出来ID是默认值0x68,那么是不是可以证明通信成功了
2,设置MPU6050为复位状态,并且100ms延时,确保复位完成
看到电源管理寄存器1(0x6B)
我们只需要将第7位寄存器置1即可复位,别的寄存器不做配置,就都置0。
那么将0x6B配置为0x80即可
3,唤醒MPU6050,选择PLL为时钟源
还是对0x6B进行配置,看到[2:0]寄存器,这里我们配置为0x01。
自动选择最好的时钟源
4,配置6轴数据全部输出(3轴加速度与3轴陀螺仪)
看到电源管理2寄存器(0x6C)
我们看到[0:5]为加速度与陀螺仪是否待机的配置,[6:7]为低功耗模式的设置。
在这里我们不需要待机与低功耗,说话以直接每一位都置为0即可,0x6C置0x00
5,禁止所有中断(避免传感器读取到一个数据就中断,而耽误系统进程)
看控制中断使能的寄存器(0x38)
我们不让中断产生,所以还是将寄存器配置为0x00
6,设置MPU6050的内部采样频率以及低通滤波器
配置SMPLRT_DIV的值就可以进行分频,DLPF为数字低通滤波器,后面我们为了使数据更加稳定是要进行配置的,那么陀螺仪的输出频率=1kHz,这时候我们假设SMPLRT_DIV置1,那么陀螺仪的输出频率为500Hz,这时候要考虑飞机姿态结算的频率,假设高于500Hz,那么意味着可能两次姿态结算用的都是同一组陀螺仪数据。这样不利于提升精度。所以我们这里SMPLRT_DIV置0。保持1000Hz,即0x19置为0x00
0x1A寄存器是对DLPF(数字低通滤波)进行配置,一般将他们的DLPF都设为20Hz
即配置寄存器0x1A为0x04
7,设置陀螺仪与加速度计的满量程范围
我们不进行自检,所以只看[3:4]位,我们将角度设置大一些,2000度/s,
将寄存器0x1B配置为0x18
同样的,加速度计我们也不进行自检,所以所以只看[3:4]位,我们将角度配置为+-4g
将寄存器0x1C配置为0x08
8,主处理芯片可以直接访问MPU6050辅助I2C
看到最后Bit1的I2C_BYPASS_EN的配置说明:
辅助I2C可以用来外接磁力计或其他传感器。 有两种工作模式: I2C Master Mode, 此时 MPU-60X0作为主设备与外接传感器通信; Pass-Through Mode, 此时仅用作连接, 允许 MPU 和外接传感器同时和芯片通信
我们直接将寄存器0x37配置为0x02即可
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!