stm32cubemx配置mpu6050——10分鐘0基礎(chǔ)到靈活使用
10分鐘速通!你沒看錯(cuò),就是10min,從0基礎(chǔ)到靈活運(yùn)用mpu6050。
不信?往下看看就會(huì):嗷~原來如此
第一步
下載github開源代碼。
https://github.com/leech001/MPU6050
首先聲明,此代碼不是本人所寫,為某俄羅斯大佬提供。
如果你訪問不了github不用擔(dān)心,我在文章最后附上下載下來的文件
第二步
軟件
根據(jù)github開源項(xiàng)目的Readme內(nèi)容,進(jìn)行工程配置:
-
開啟i2c
-
將下載下來的.c和.h文件加入到工程內(nèi)。(有運(yùn)用mpu6050需求的同學(xué),應(yīng)該這部都會(huì)知道怎么做吧?
-
在需要調(diào)用mpu6050接口的地方,包含mpu6050.h就可以。此處和項(xiàng)目作者一樣,在“第三步”中以在main.c調(diào)用為例舉例說明。
硬件
接下來我將手摸手帶大家連接電路
單片機(jī)引腳 | 6050引腳 | |
---|---|---|
3.3V | VCC | 3.3V供電 |
GND | GND | 地 |
B10 | SCL | I2C時(shí)鐘 |
B11 | SDA | I2C數(shù)據(jù) |
GND | AD0 | AD0為6050地址控制引腳,接地就可以 |
第三步
代碼配置
包含mpu6050.h頭文件
/ * USER CODE BEGIN Includes * /
#include "mpu6050.h"
/ * USER CODE END Includes * /
定義mpu6050結(jié)構(gòu)體
/ * USER CODE BEGIN PV * /
MPU6050_t MPU6050;
/ * USER CODE END PV * /
在main函數(shù)開頭,初始化mpu6050
/ * USER CODE BEGIN 2 * /
while (MPU6050_Init(&hi2c1) == 1);
/ * USER CODE END 2 * /
調(diào)用MPU6050_Read_All函數(shù),讀取所有參數(shù)
/ * USER CODE BEGIN WHILE * /
while (1)
{
/ * USER CODE END WHILE * /
/ * USER CODE BEGIN 3 * /
MPU6050_Read_All(&hi2c1, &MPU6050);
HAL_Delay (100);
}
/ * USER CODE END 3 * /
那么問題來了,我如何訪問這些參數(shù)呢?比如讀取z軸加速度。
這就要看mpu6050.h里面的MPU6050_t結(jié)構(gòu)體了。
typedef struct
{
int16_t Accel_X_RAW; // 原始數(shù)值,忽略
int16_t Accel_Y_RAW;
int16_t Accel_Z_RAW;
double Ax; // x方向加速度,單位為重力加速度g (也就是9.8)
double Ay; // y方向加速度
double Az; // z方向加速度
int16_t Gyro_X_RAW;
int16_t Gyro_Y_RAW;
int16_t Gyro_Z_RAW;
double Gx; // x方向陀螺儀加速度
double Gy; // y方向陀螺儀加速度
double Gz; // z方向陀螺儀加速度
float Temperature; // 溫度
double KalmanAngleX; // 卡爾曼濾波過后的角度
double KalmanAngleY; // 卡爾曼濾波過后的角度
} MPU6050_t;
那么如何訪問z軸加速度呢?
a = MPU6050.Az;
除了一口氣讀取所有參數(shù)的MPU6050_Read_All函數(shù),作者還提供了其他的函數(shù),總有一款適合你。詳細(xì)請參見mpu6050.h
函數(shù)名 | 作用 |
---|---|
MPU6050_Read_All | 讀取所有參數(shù) |
MPU6050_Read_Accel | 讀取加速度參數(shù) |
MPU6050_Read_Gyro | 讀取陀螺儀數(shù)據(jù) |
MPU6050_Read_Temp | 讀取溫度 |
示例代碼
main函數(shù)前
#include "mpu6050.h"
MPU6050_t MPU6050;
main函數(shù)內(nèi)
while (MPU6050_Init(&hi2c2) == 1)
;
// 讀取所有參數(shù)
MPU6050_Read_All(&hi2c2, &MPU6050);
printf("加速度 x:%.2f \t y:%.2f \t z:%.2f\n",MPU6050.Ax,MPU6050.Ay,MPU6050.Az);
printf("陀螺儀 x:%.2f \t y:%.2f \t z:%.2f\n",MPU6050.Gx,MPU6050.Gy,MPU6050.Gz);
printf("溫度 %.2f\n",MPU6050.Temperature);
// 讀取加速度
MPU6050_Read_Accel(&hi2c2, &MPU6050);
printf("只更新加速度 x:%.2f \t y:%.2f \t z:%.2f\n",MPU6050.Ax,MPU6050.Ay,MPU6050.Az);
// 讀取陀螺儀
MPU6050_Read_Gyro(&hi2c2, &MPU6050);
printf("只更新陀螺儀 x:%.2f \t y:%.2f \t z:%.2f\n",MPU6050.Gx,MPU6050.Gy,MPU6050.Gz);
// 讀取溫度
MPU6050_Read_Temp(&hi2c2, &MPU6050);
printf("只更新溫度 %.2f\n",MPU6050.Temperature);
下面解讀加速度參數(shù)含義
加速度
:加速度計(jì)可以測量物體在三維空間中的加速度,單位通常是m/s2。MPU6050能夠在三個(gè)軸上分別測量出物體的加速度。當(dāng)物體處于靜止?fàn)顟B(tài)時(shí),加速度計(jì)會(huì)受到重力作用而顯示一個(gè)9.8m/s2的常數(shù)值。當(dāng)物體發(fā)生運(yùn)動(dòng)時(shí),加速度計(jì)會(huì)顯示物體在各軸上的加速度變化。
此處桌上平放著mpu6050,因此測出來xy方向加速度幾乎為0,z方有一個(gè)g的重力加速度,也就是9.8m/s2。(顯示1.12而不是1,是因?yàn)槲覜]有真正放水平)
什么還是不懂?好吧,真拿你沒辦法,我建立了一個(gè)簡單工程,以供參考使用。就在文末的文件里面。
未若頭發(fā)因風(fēng)起
此文旨在最快的使用出來mpu6050,極具功利性,說真的我并不喜歡這樣的速通,他剝奪了一步步征服mpu6050模塊所帶來的暢快和成就,以及通過閱讀數(shù)據(jù)手冊來掌握模塊的能力。
如果根據(jù)本博客順利調(diào)試出來mpu6050,筆者希望你能明白自己并沒有真正掌握mpu6050,它的通信時(shí)許、寄存器配置等對你來說,都是不明所以的,這些都要讀者根據(jù)數(shù)據(jù)手冊和他人的教程逐個(gè)攻破。戒驕戒躁!文章來源:http://www.zghlxwxcb.cn/news/detail-436282.html
配套資源,0積分免費(fèi)下載文章來源地址http://www.zghlxwxcb.cn/news/detail-436282.html
到了這里,關(guān)于stm32cubemx配置mpu6050——10分鐘0基礎(chǔ)到靈活使用的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!