如何利用小熊派获取MPU6050六轴原始数据
摘要:使用小熊派开发板,通过硬件IIC与MPU6050六轴传感器模块通信,完成相应寄存器配置,成功获取陀螺仪、加速度计数据。
本问主要讲述使用小熊派开发板+MPU6050六轴传感器,获取加速度计以及陀螺仪信息。
一、实验准备
1.实验环境
- 一块stm32开发板(推荐使用小熊派),以及数据线
- 已经安装STM32CubeMX
- 已经安装KeilMDK,并导入stm32开发板对应的芯片包(小熊派使用的是STM32L431RCT6)
- 一个MPU6050模块(IIC接口)以及杜邦线
2.目标效果
- 通过CubeMX创建工程并配置参数
- IIC方式通信,配置MPU6050寄存器
- 小熊派通过IIC,获取陀螺仪、加速度计数据
- 串口1重定向输出编码器转动的角度、角速度
二、通过CubeMX生产MDK工程
A.芯片选择
- 打开CubeMX,进入芯片选择:
- 选择自己的stm32芯片(即STM32L431RCT6):
B.时钟源RCC设置
- 更改系统时钟源
系统时钟默认使用内部的高速时钟(HSI),选择使用HSE,时钟更精确
- 设置外部时钟对应的端口
- 配置时钟树
STM32L431RCT6系统时钟最大可以为80MHz,我们配置到最大即可
C.参数配置(对应端口设置)
1)配置USART1
使用USART,模式为异步,波特率为115200,无硬件流控制
2)硬件IIC配置
IIC(Inter-Integrated Circuit)其实是IICBus简称,所以中文应该叫集成电路总线,它是一种串行通信总线,使用多主从架构
我们使用小熊派的I2C1,小熊派引出的引脚为PB7->I2C1_SDA,PB6->I2C1_SCL
其他选项我们保持默认即可
3)MPU6050模块
当然,我们还需要了解MPU6050模块的电路,更好的进行配置。当然我们也可以自主制作模块
如果AD0脚(9脚)接地,IIC地址为0X68(不包含最低位);如果AD0脚接V3.3,则IIC地址为0X69(不包含最低位).
可以看到,AD0引脚已经被拉低,所有默认IIC地址为0x68.
最后,生成代码就OK了
D.工程设置
一些基础的设置,包括工程名、存储位置、工程环境、工程中各个文件的组成
E.生成代码
三、编写相应代码
1. 串口1输出重定向
我们知道printf是打印函数,原理是根据传入的字符串参数格式化打印输出到stdout中。我们需要让printf打印到串口之中,只需要在usart.c文件中模仿printf写一个输出函数即可
- 在添加头文件
/* USER CODE BEGIN 0 */#include <stdarg.h>#include <string.h>#include <stdio.h>/* USER CODE END 0 */
- 写输出函数
/* USER CODE BEGIN 1 */void UsartPrintf(UART_HandleTypeDef *huart, char *fmt,...){unsigned char UsartPrintfBuf[296];va_list ap;unsigned char *pStr = UsartPrintfBuf;va_start(ap, fmt);vsprintf((char *)UsartPrintfBuf, fmt, ap); //格式化va_end(ap);while(*pStr != 0){USART1->TDR = *pStr++;while((USART1->ISR & 0x40) == 0);}}//注意:在usart.h中添加void UsartPrintf(UART_HandleTypeDef *huart, char *fmt,...);//使用方法:UsartPrintf(&huart1;,"hello world\r\n");/* USER CODE END 1 */
注意:自己添加的代码,需要在begin和end之间
2.写MPU6050驱动
我们创建两个文件,分别是mpu6050.h和mpu6050.c
a).首先我们在mpu6050.h中宏定义相应的寄存器,方便后续使用。
在main函数中,我们首先设置计数器初值为10000,然后打开编码器,每1S获取一次计数器的更新值,判断编码器信息
因为寄存器实在太多,就没有一一列出,可以在附件中查看哦~
b).配置各个寄存器
主要的函数为:IIC读写、初始化MPU6050、设置陀螺仪和加速度计满量程、设置采样率、读取数据
代码附件中有,不一一讲解。
初始化函数
uint8_t MPUInit(void){uint8_t res;extern I2C_HandleTypeDef hi2c1;HAL_I2C_Init(&hi2c1;); //初始化IIC/*上电后最好有一定延时,保证数据准确*/HAL_Delay(500);MPU_Write_Byte(MPU_PWR_MGMT1_REG,0x80); //复位MPU6050,写入1000 0000MPU_Write_Byte(MPU_PWR_MGMT1_REG,0x00);//sleep写入0,保持唤醒状态MPU_Set_Gyro_Fsr(3); //陀螺仪满量程±2000MPU_Set_Accel_Fsr(0); //加速度计满量程±2gMPU_Set_Rate(50); //设置采样率=50HzMPU_Write_Byte(MPU_INT_EN_REG,0x00);//关闭所有中断MPU_Write_Byte(MPU_USER_CTRL_REG,0x00); //关闭从iicMPU_Write_Byte(MPU_FIFO_EN_REG,0x00); //关闭FIFOMPU_Write_Byte(MPU_INTBP_CFG_REG,0x80); //INT引脚低电平有效res = MPU_Read_Byte(MPU_DEVICE_ID_REG); //读取地址UsartPrintf(&huart1;,"\r\nMPU6050:0x%2x\r\n",res);UsartPrintf(&huart1;,"\r\nMPU6050:0x%2x\r\n",MPU_ADDR);if(res == MPU_ADDR) //判断地址是否正确{MPU_Write_Byte(MPU_PWR_MGMT1_REG,0x01); //001,pll,x轴为参考系统时钟源MPU_Write_Byte(MPU_PWR_MGMT2_REG,0x00); //都不使用待机模式MPU_Set_Rate(50);}else return 1;return 0;}
需要注意到,mpu6050上电后需要有一定延时,保证数据的稳定。重启mpu6050会有睡眠模式,写入关闭睡眠。最后检测并判断IIC地址是否正确
3.main函数
/* USER CODE BEGIN PV */short x;short y;short z;/* USER CODE END PV */
/* USER CODE BEGIN 2 */MPUInit();/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE */while(MPU_Get_Gyroscope(&x,&y,&z) !=0);HAL_Delay(1000);printf("\r\n陀螺仪:x=-,y=-,z=-\r\n",x,y,z);while(MPU_Get_Accelerometer(&x,&y,&z) != 0);HAL_Delay(1000);printf("\r\n加速度计:x=-,y=-,z=-\r\n",x,y,z);/* USER CODE BEGIN 3 */}
四、编译+下载
点击编译后,0 error,0 warning
小熊派连接在电脑上,代码下载到开发板
五、连接硬件
1.将小熊派串口1和电脑相连,即拨到 AT-MUC,按下复位键
2.连接MPU6050
我们只需要使用mpu6050的SDA\SCL\GND\VCC。
即:
- SDA-->PB7
- SCL-->PB6
- GND-->GND
- VCC-->5V
3.效果
打开串口调试助手,我们手动转动开发板(包括模块),看见陀螺仪和加速度数据不断变化,当静止时数据保持稳定 。
至此,我们已经可以通过小熊派以IIC获取六轴传感器原始数据信息
本文分享自华为云社区《小熊派实践——获取MPU6050六轴原始数据》,原文作者:ttking 。
点击关注,第一时间了解华为云新鲜技术~
如何利用小熊派获取MPU6050六轴原始数据相关推荐
- Micro Python———MPU6050六轴传感器
目录 1.什么是MPU6050? MPU6050介绍: MPU6050寄存器介绍: 2.例程 1.平台 2.目的 3.讲解 1.查阅原理图 2.流程分析 3.代码讲解 3.结果 1.什么是MPU605 ...
- 基于战舰V3的MPU6050六轴陀螺仪实验
基于战舰V3的MPU6050六轴陀螺仪实验 陀螺仪的分类 3轴传感器指的是3轴的加速度,根据这个加速度我们解算出XY两轴的角度. 6轴传感器指的是3轴的加速度和3轴角速度,根据这两个数据我们解算出XY ...
- mpu6050六轴传感器msp430驱动程序
玩智能车的可以参考 #include <msp430g2553.h> #include"mpu6050.h" #include "USCI_A0.h" ...
- mpu6050原理图_STM32控制 MPU6050 六轴陀螺仪资料汇总
一般使用MPU6050的步骤是先驱动I2C总线,然后初始化MPU6050,从MPU6050读取数据,最后是数据的处理.本文档详细介绍有关MPU6050 三维角度传感器电子陀螺仪使用说明.附件内容提供该 ...
- 读取24位ad的值_实践案例丨利用小熊派开发板获取土壤湿度传感器的ADC值
摘要:一文带你用小熊派开发板动手做土壤湿度传感器. 一.实验准备 1.实验环境 一块stm32开发板(推荐使用小熊派),以及数据线 已经安装STM32CubeMX 已经安装KeilMDK,并导入stm ...
- 实践案例丨利用小熊派开发板获取土壤湿度传感器的ADC值
摘要:一文带你用小熊派开发板动手做土壤湿度传感器. 一.实验准备 1.实验环境 一块stm32开发板(推荐使用小熊派),以及数据线 已经安装STM32CubeMX 已经安装KeilMDK,并导入stm ...
- STM32学习值传感器篇——MPU6050六轴加速度传感器
这个传感器整体来说不难只要将模拟iic的时序写对基本问题不大 剩下的驱动文件 按照我介绍的加进去就可以实现了,还是有官方算法的好啊,直接用就完事了,很方便,节省了不少代码开发时间, 注意mpu6050 ...
- 使用QMI8658六轴原始数据融合输出欧拉角笔记
关于四元素和三维旋转的知识,推荐看一下https://github.com/Krasjet/quaternion. qmi8658六轴姿态传感器的原始数据读取函数如下.需要注意的是,陀螺仪数据的格式. ...
- 《手把手教你学STM32》—MPU6050六轴传感器实验
预备知识(基于STM32开发板(正点原子)) 1.MPU6050简介 1.1.MPU6050简介-什么是MPU6050? MPU6050是InvenSense公司推出的全球首款整合性6轴运动处理组件, ...
最新文章
- [转载] 故宫第三集 礼仪天下(下)
- iptables规则的查看、添加、删除和修改
- linux下find(文件查找)命令的用法总结
- C#工业物联网和集成系统解决方案的技术路线
- [Redux/Mobx] Redux怎样设置初始状态?
- 【转】JMeter学习(二十八)内存溢出解决方法
- php中ci框架分页,Codeigniter(CI)框架分页函数及相关知识
- DDR2与DDR的区别
- 拥2180亿美元收入 苹果成全球最大IT企业
- Java中使用正则表达式
- mac 输入法/键盘 锁定
- HTML kind属性怎么用?
- android屏幕录制
- Hbuilder开发APP(一)——底部导航条简单实现
- 计算机桌面出现临时文件,如何删除电脑中的临时文件 电脑屏幕一键放大方法分享...
- 发票专用驱动sjz_收藏!增值税发票(发票勾选)选择确认平台使用手册
- psql -d temp 时候的txid_current!
- 计算机毕设(附源码)JAVA-SSM基于Internet快递柜管理系统
- 『迷你教程』识别人类活动的一维卷积神经网络模型,附完整代码
- EasySearcher搜索不到EasyNVR硬件的IP地址,如何解决?
热门文章
- 下载Bootstrap3源码版本
- es6 Class 的静态方法
- heap c语言数组实现,垃圾回收算法实现之 - 分代回收(完整可运行C语言代码)...
- MySQL空闲会话_使用Oracle PROFILE控制会话空闲时间
- pythonargmaxaxis1_np.argmax(input,axis)和tf.argmax(input,axis)使用
- 传染病控制为什么不能用贪心(反例)
- [USACO09OCT]热浪Heat Wave
- 【Win】使用L2TP出现809错误
- 三、gridView增删改查
- penpyxl basic function demo code