stm32cubemx-Konfiguration mpu6050 – 10 Minuten 0 einfache bis flexible Nutzung

stm32cubemx-Konfiguration mpu6050 – 10 Minuten 0 einfache bis flexible Nutzung

10-Minuten-Speedpass! Sie haben richtig gelesen, es dauert 10 Minuten, von 0 Grundlagen bis zur flexiblen Nutzung von mpu6050.

Glaube nicht? Wenn du nach unten schaust, wirst du: Oh~ Das ist es also

erster Schritt

Laden Sie den Open-Source-Code von Github herunter.

https://github.com/leech001/MPU6050

Zunächst erkläre ich, dass dieser Code nicht von mir geschrieben wurde, sondern von einem bestimmten russischen Chef bereitgestellt wurde.

Machen Sie sich keine Sorgen, wenn Sie nicht auf Github zugreifen können. Ich hänge die heruntergeladene Datei am Ende des Artikels an

zweiter Schritt

Software

Führen Sie gemäß dem Readme-Inhalt des Github-Open-Source-Projekts die Projektkonfiguration durch:

  1. i2c aktivieren

  2. Fügen Sie die heruntergeladenen .c- und .h-Dateien zum Projekt hinzu. (Studenten, die mpu6050 verwenden müssen, sollten wissen, wie das geht, oder?

  3. Wo die mpu6050-Schnittstelle aufgerufen werden muss, fügen Sie einfach mpu6050.h ein. Hier rufen Sie wie der Projektautor im „dritten Schritt“ main.c als Beispiel zur Veranschaulichung auf.

Hardware

Als nächstes berühre ich meine Hände und führe Sie zum Anschließen des Stromkreises

MCU-Pin 6050 Stifte
3,3 V VCC 3,3V-Stromversorgung
GND GND Land
B10 SCL I2C-Uhr
B11 SDA I2C-Daten
GND AD0 AD0 ist der 6050-Adresssteuerpin, erden Sie ihn einfach

IMG_20230504_131803

dritter Schritt

Codekonfiguration

Fügen Sie die Header-Datei mpu6050.h ein

/ * USER CODE BEGIN Includes * /
#include "mpu6050.h"
/ * USER CODE END Includes * /

Definieren Sie die mpu6050-Struktur

/ * USER CODE BEGIN PV * /
MPU6050_t MPU6050;
/ * USER CODE END PV * /

Initialisieren Sie zu Beginn der Hauptfunktion den mpu6050

/ * USER CODE BEGIN 2 * /

while (MPU6050_Init(&hi2c1) == 1);

/ * USER CODE END 2 * /

Rufen Sie die Funktion MPU6050_Read_All auf, um alle Parameter zu lesen

/ * 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 * /

Die Frage ist also: Wie greife ich auf diese Parameter zu? Lesen Sie beispielsweise die Z-Achsen-Beschleunigung ab.

Dies hängt von der MPU6050_t-Struktur in mpu6050.h ab.

typedef struct
{
    
    

    int16_t Accel_X_RAW;	// 原始数值,忽略
    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;

Wie greifen Sie also auf die Z-Achsen-Beschleunigung zu?

a = MPU6050.Az;

Neben der Funktion MPU6050_Read_All, die alle Parameter auf einmal liest, stellt der Autor auch andere Funktionen zur Verfügung, es gibt immer eine, die zu Ihnen passt. Weitere Informationen finden Sie unter mpu6050.h

Funktionsname Wirkung
MPU6050_Read_All alle Parameter lesen
MPU6050_Read_Accel Beschleunigungsparameter lesen
MPU6050_Read_Gyro Gyroskopdaten lesen
MPU6050_Read_Temp Temperatur ablesen

Beispielcode

Vor der Hauptfunktion

#include "mpu6050.h"

MPU6050_t MPU6050;

innerhalb der Hauptfunktion

while (MPU6050_Init(&hi2c2) == 1)
    ;
// 读取所有参数
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);

Bild-20230504143901947

Die Bedeutung des Beschleunigungsparameters wird im Folgenden erläutert

加速度: Der Beschleunigungsmesser kann die Beschleunigung eines Objekts im dreidimensionalen Raum messen, die Einheit ist normalerweise m/s². MPU6050 kann die Beschleunigung des Objekts jeweils auf drei Achsen messen. Wenn das Objekt ruht, wird der Beschleunigungsmesser von der Schwerkraft beeinflusst und zeigt einen konstanten Wert von 9,8 m/s² an. Wenn sich ein Objekt bewegt, zeigt der Beschleunigungsmesser die Änderung der Beschleunigung des Objekts entlang jeder Achse an.

Die mpu6050 liegt hier flach auf dem Tisch, sodass die gemessene Beschleunigung in xy-Richtung nahezu 0 beträgt und in z-Richtung eine Erdbeschleunigung von g vorliegt, die bei 9,8m/s² liegt. (Es wird 1,12 statt 1 angezeigt, weil ich den Pegel nicht wirklich angegeben habe)

Was verstehst du noch nicht? Nun, ich kann Ihnen wirklich nicht helfen, ich habe ein einfaches Projekt als Referenz erstellt. Es befindet sich in der Datei am Ende des Artikels.

Wenn die Haare vom Wind verweht werden

Ziel dieses Artikels ist es, den mpu6050 so schnell wie möglich zu nutzen, was sehr nützlich ist. Ehrlich gesagt mag ich diese Art von Geschwindigkeitsüberschreitung nicht. Es nimmt mir die Freude und den Erfolg, das mpu6050-Modul Schritt für Schritt zu erobern und zu lesen Datenhandbuch Fähigkeit, Module zu beherrschen.

Wenn der mpu6050 gemäß diesem Blog erfolgreich debuggt wurde, hofft der Autor, dass Sie verstehen können, dass Sie den mpu6050 nicht wirklich beherrschen. Seine Kommunikationszeit, Registerkonfiguration usw. sind Ihnen alle unbekannt. Der Leser muss sich auf das Datenhandbuch beziehen andere. Das Tutorial wird einzeln aufgeschlüsselt. Hüten Sie sich vor Arroganz und Ungestüm!

Unterstützende Ressourcen, kostenloser Download mit 0 Punkten

Ich denke du magst

Origin blog.csdn.net/qq_34022877/article/details/130486840
Empfohlen
Rangfolge