【STM32平衡小车】一篇快速上手MPU6050

发布者:RadiantSoul最新更新时间:2021-09-22 来源: eefocus关键字:STM32  平衡小车  MPU6050 手机看文章 扫描二维码
随时随地手机看文章

一、MPU6050基础知识储备

六轴=三轴陀螺仪+三轴加速度计


而我们通常说的九轴的含义是在主I2C接口,接上磁力传感器,即是九轴数据。


我们直接得到的是加速度计(测出加速度)和陀螺仪(测出角速度),我们实际使用的是姿态角,分别为俯仰角(pitch)、偏航角(yaw)和横滚角(roll)。这之间需要借助MPU6050的DMP模块把原始数据转换为四元数,然后四元数可以直接通过公式转化为姿态角。

在这里插入图片描述

俯仰(pitch) - x轴

在这里插入图片描述

翻滚(roll) - y轴

在这里插入图片描述

偏航(yaw) - z轴

在这里插入图片描述

二、引脚接线图

在这里插入图片描述

三、需要注意的AD0

MPU6050作为一个IIC从机设备的时候,有8位地址,高7位的地址是固定的,就是WHOAMI寄存器的默认——0x68,最低的一位是由AD0的连线决定的。


AD0接GND时候,高8位的最后一位是0 所以整个iic从几地址就是0x68

AD0接VCC时候,高8位的最后一位是1 所以整个iic从几地址就是0x69


四、程序里需要知道的

程序都设置了INT平时为高电平,同时INT引脚为PB5,低电平触发中断。


MPU6050.C中的#define DEFAULT_MPU_HZ (200)


200Hz表示这个是fifo更新速率,而INT中断就是fifo更新的时候触发中断,即5ms来一次中断(1/200=0.005)。


其实正点原子的和平衡车之家的程序都设置了INT平时为高电平,平衡车之家没有关闭中断,并且设置了INT引脚为B5 低电平触发中断。而正点原子的直接在mpu6050初始化的时候就关闭了中断。


其他备忘

航向角需要磁力计进行校准。否则会有很大误差。【在静止的情况下,Yaw会自增或者自减】

一般来说每一个6050都是不一样的,在水平静止状态下,重力加速度的值,与角速度的值,都不是零,所以,要对水平静止状态下的数值进行采样,然后作为零偏校准数据, 再在进行计算时,需要把采样到的数值减去零偏数值才能作为正常的数值使用。

关键字:STM32  平衡小车  MPU6050 引用地址:【STM32平衡小车】一篇快速上手MPU6050

上一篇:【STM32平衡小车】APP调试协议及代码分析
下一篇:【STM32平衡小车】通过ADC获取电池电压

推荐阅读最新更新时间:2024-11-06 11:49

stm32驱动超声波模块源码
  下面是关于stm32驱动超声波模块的一段代码,有需要的朋友可以复制参考,希望对大家能够有所帮助和启发。   #define HCSR04_PORT GPIOB   #define HCSR04_CLK RCC_APB2Periph_GPIOB   #define HCSR04_TRIG GPIO_Pin_8   #define HCSR04_ECHO GPIO_Pin_9   #define TRIG_Send(n) do{   if(n == 0)   GPIO_ResetBits(HCSR04_PORT,HCSR04_TRIG);   else if(n == 1)   GPIO_SetBits(HCSR04_PORT
[单片机]
STM32 CRC寄存器
1、CRC计算公式 所有的STM32芯片都内置了一个硬件的CRC计算模块,可应用到通信程序中,这个CRC计算模块使用常见的、在以太网中使用的计算多项式: X32 + X26 + X23 + X22 + X16 + X12 + X11 + X10 +X8 + X7 + X5 + X4 + X2 + X + 1 写成16进制就是:0x04C11DB7 2、使用这个内置CRC模块操作步骤: 复位CRC模块(设置CRC_CR=0x01),这个操作把CRC计算的余数初始化为0xFFFFFFFF 把要计算的数据按每32位分割为一组数据字,并逐个地把这组数据字写入CRC_DR寄存器(既下图中的绿色框) 写完所有的数据字后
[单片机]
STM32 485通信 自我学习总结
准备总结一下学习过程中的485通信知识!---------------------------------------------------- 先描述一下学习STM32与485通信的时候想实现的功能-------- 首先是完成双机通信中的双向通信----这里定义A为主机发送指令给从机B,从机B在接收到主机A的指令后,判断有效位的正确性,如果正确将这个指令通过RS232串口显示到串口助手里,观察整个指令是否接收正确-----同时在从机B接收到主机A指令后,向主机A发送指定数据----主机A在接收到从机B数据后判断有效位的正确性,如果正确则通过RS232打印到串口助手,然后观察完整数据。--------这里的判断比较简单----
[单片机]
<font color='red'>STM32</font> 485通信 自我学习总结
STM32单片机特性解析
STM32单片机 由ST厂商推出的STM32系列单片机,行业的朋友都知道,这是一款性价比超高的系列单片机,应该没有之一,功能及其强大。其基于专为要求高性能、 低成本、低功耗的嵌入式应用专门设计的ARM Cortex-M内核,同时具有一流的外设:1μs的双12位ADC,4兆位/秒的UART,18兆位/秒的SPI等等,在功耗和集成度方面也有不俗的表现,当然和MSP430的功耗比起来是稍微逊色的一些,但这并不影响工程师们对它的热捧程度,由于其简单的结构和易用的工具再配合其强大的功能在行业中赫赫有名。其强大的功能主要表现在: 特性 1、内核:ARM32位Cortex-M3CPU,最高工作频率72MHz,1.25DMIPS/MHz,单周
[单片机]
STM32之ADC学习
配置ADC 1、 系统时钟定义: RCC_Configuration(); 包涵: RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMAx, ENABLE); // Enable DMA clock RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADCx , ENABLE); // Enable ADC1 and GPIOC clock 2、 中断源配置: NVIC_Configuration(); 举例: { NVIC_InitTypeDef NVIC_InitStructure; NVIC_PriorityGroupConfig(NVIC_Pri
[单片机]
STM32启动代码概述
一般嵌入式开发流程就是先建立一个工程,再编写源文件,然后进行编译,把所有的 *.s文件和 *.c文件编译成一个 *.o文件,再对目标文件进行链接和定位,编译成功后会生成一个 *.hex文件和调试文件,接下来要进行调试,如果成功的话,就可以将它固化到 flash 里面去。 启动代码是用来初始化电路以及用来为高级语言写的软件作好运行前准备的一小段汇编语言,是任何处理器上电复位时的程序运行入口点。 比如,刚上电的过程中,PC机会对系统的一个运行频率进行锁定在一个固定的值,这个设计频率的过程就是在汇编源代码中进行的,也就是在启动代码中进行的。与此同时,设置完后,程序开始运行,注意,程序是在内存中运行的。这个时候,就需要把一些源文件
[单片机]
<font color='red'>STM32</font>启动代码概述
STM32中断优先级void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct)
void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct) { u32 tmppriority = 0x00, tmpreg = 0x00, tmpmask = 0x00; u32 tmppre = 0, tmpsub = 0x0F; /* Check the parameters */ assert(IS_FUNCTIONAL_STATE(NVIC_InitStruct- NVIC_IRQChannelCmd)); assert(IS_NVIC_IRQ_CHANNEL(NVIC_InitStruct- NVIC_IRQChannel)); assert(IS_NVIC_PREE
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved