Tutorial zum Lernen des Balance-Autos 2 (Software) – MPU6050-Daten zum Lesen des Euler-Winkels, Transplantieren von DMP zum Lesen von Rollwinkel, Nickwinkel und Gierwinkel

Vorwort

Im vorherigen Artikel habe ich die Hardwareressourcen des Balance-Autos und die untere Hardware des Autos vorgestellt.

Tutorial 1 zum Balancieren des Autolernens – Einführung in Hardwareressourcen und die zugrunde liegende Hardware des Autos

Das soll es dir beibringen如何快速的使用MPU6050自带的DMP库读取陀螺仪数据,读取翻滚角(Roll)、俯仰角(Pitch)、航向角(Yaw)这三个角的数据。

Und unser Balance-Auto 直立环ist es通过读取Roll角的数据

Entsprechend der Änderung des Rollwinkels werden durch den PID-Algorithmus der tatsächliche Wert und der erwartete Wert ermittelt, um den berechneten Wert zu erhalten und ihn an die PWM weiterzuleiten. Sorgen Sie dafür, dass der Transportwagen aufrecht steht.

So,Wie man den Mikrocontroller zum Auslesen der Daten des Gyroskops verwendet, ist ein sehr wichtiger Punkt

Tutorial zu diesem Artikel采用的是STM32单片机,读取这三个角


1. MPU6050 verstehen


1. Grundkenntnisse

MPU6050 ist im Allgemeinen das folgende kleine Modul. Im Allgemeinen ist es in 6-Pin und 8-Pin unterteilt , 6脚和8脚的区别das heißt, der 8-Pin verfügt über eine XDA- und eine XCL-Schnittstelle, und diese beiden Schnittstellen können an ein externes Magnetometer angeschlossen werden . Das Bild unten zeigt den 8-poligen MPU6050.
Fügen Sie hier eine Bildbeschreibung ein


2. Pin-Einführung

WeilMPU6050 ist IIC-KommunikationVerwenden Sie daher die IIC-Kommunikation, um die MPU6050 zu initialisieren und ihre internen Register zu lesen, um den Echtzeitstatus des Fahrzeugs zu erhalten.

Die beiden wichtigen Pins sind also SCL引脚和SDA引脚.

Auch,MPU6050还有一个中断引脚INT,可以配置寄存器,让其产生中断,读取陀螺仪数据可放在中断内部进行。

Stift Pin-Einführung
VCC 3,3V/5V Stromeingang
GND Erdung
SDA IIC-Kommunikationsdatenleitung
SCL IIC-Kommunikationsuhrleitung
XDA IIC externe Kommunikationsdatenleitung
XCL IIC externe Kommunikationsuhrleitung
AD0 IIC-Slave-Einstellstift ( 悬空或接GND时为0x68 / 接高电平为0x69)
INT MPU6050中断引脚

2. Transplantationsmethode

Auf das Prinzip der internen Register der MPU6050 gehe ich hier nicht näher ein, ich habe es hier eigentlich nicht verstanden.

Sie können zunächst mit der praktischen Bedienung beginnen und sich schnell mit der Anwendung vertraut machen. Tatsächlich macht es wenig Sinn, sich zu sehr mit den internen Prinzipien zu befassen, und es ist auch kein Problem, sie später eingehend zu studieren.

also hierIch werde Ihnen Schritt für Schritt zeigen, wie Sie die integrierte DMP-Bibliothek der MPU6050 schnell übertragen und wie Sie den integrierten digitalen Bewegungsprozessor (DMP-Bibliothek) verwenden, um die vollständigen 6-Achsen- oder 9-Achsen-Lagefusionsberechnungsdaten zu lesen .


1. Was ist DMP?

Wir können die internen Register der MPU6050 über IIC-Kommunikation lesen, um Beschleunigungssensordaten oder Winkelgeschwindigkeitssensordaten zu erhalten

Aber wenn wir ein Balance-Auto bauen, brauchen wir nicht diese sechs Daten, sondern die Euler-Winkel, also die drei Winkel Roll-, Nick- und Gierwinkel

Um den Euler-Winkel zu erhalten, ist es tatsächlich notwendig, die Fluglage zu berechnen. Es ist etwas schwierig, die Fluglage selbst zu berechnen., aber die Verwendung von DMP ist nicht dasselbe,Mit DMP können die Originaldaten direkt in eine Quaternion-Ausgabe umgewandelt werden. Nachdem das Quaternion erhalten wurde, kann der Euler-Winkel einfach berechnet werden, um die Roll-, Nick- und Gierwinkel zu erhalten.

2. Wie man DMP transplantiert


Laden Sie die Baidu-Netzwerkfestplattendaten von Atom herunter

Pünktlich Atom MPU6050 Daten herunterladen

  1. Klicken Sie zunächst auf den Link oben, klicken Sie hinein und laden Sie diese Informationen herunter
    Fügen Sie hier eine Bildbeschreibung ein

  2. Laden Sie es dann herunter und kopieren Sie die alten Daten –> Programmquellcode –> wählen Sie eine komprimierte Paketdatei zum Dekomprimieren aus

Ich wähle hier(库函数版本,适合MiniSTM32开发板)扩展实验16 ATK-MPU6050六轴传感器实验


Transplantieren Sie entsprechende Dateien und fügen Sie sie unserem eigenen Projekt hinzu

  1. In diesem Projekt brauchen wir das, was wir brauchen, und das, was wir brauchen, ist das Einzige, was wir brauchen

Sechs-Achsen-Sensormodul ATK-MPU6050-Daten (alte Daten)\2, Programmquellcode\Transplantation\ (Bibliotheksfunktionsversion, geeignet für MiniSTM32-Entwicklungsplatine) Erweitertes Experiment 16 ATK-MPU6050 Sechs-Achsen-Sensorexperiment\HARDWARE

Der MPU6050-Ordner in diesem Ordner
Fügen Sie hier eine Bildbeschreibung ein

  1. Kopieren Sie diese gesamte Datei in Ihren eigenen Projektordner und fügen Sie dann die entsprechende Datei in Keil hinzu. Ich werde nicht mehr darüber sagen, wie Sie die entsprechende Datei in Keil hinzufügen.

Wie Sie sehen können, sind die endgültigen Dateien, die wir benötigen mpuiic.c, , mpu6050.c, inv_mpu.c, inv_mpu_dmp_motion_driver.cund diese vier Dateien werden der Treiberdatei in Keil hinzugefügt, und der endgültige Effekt ist wie in der folgenden Abbildung dargestellt

  1. Klemmen und modifizieren Sie dann die entsprechenden Pins Ihrer eigenen Platine oder verwenden Sie Dupont-Drähte, um eine Verbindung zum 6050 herzustellen
  2. Dann sind die Projektdateien in Keil in der folgenden Abbildung dargestellt,
    Fügen Sie hier eine Bildbeschreibung ein
    das sind die vier Dateien, und was wir brauchen, sind diese vier Dateien

3. Hinweise zur Transplantation

1, mpuiic.cundmpuiic.h


Das erste, worauf Sie achten müssen, ist die Änderung des Initialisierungs-Pins

auftauchen

	void MPU_IIC_Init(void)

Es ist ersichtlich, dass dies der Initialisierungspin von SCL und SDA ist, der MPU6050 entspricht. MPU6050 verwendet IIC-Kommunikation, um den Euler-Winkel zu erhalten

Also müssen wir dieses IO ändern

下方是源文件中的初始化

Fügen Sie hier eine Bildbeschreibung ein

Wir modifizieren es entsprechend dem von der Platine gezogenen GPIO, da unser Onboard-Pin ist

Stift Entspricht GPIO
AD0 GND
INT PB5
SCL PB4
SDA PB3

Fügen Sie hier eine Bildbeschreibung ein

Nehmen Sie die folgenden Änderungen vor

// 初始化IIC  SCL PB4	SDA PB3
void MPU_IIC_Init(void)
{
    
    
	GPIO_InitTypeDef GPIO_InitStructure;

	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); // 先使能外设IO PORTC时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);  // 使能AFIO 复用时钟
	
	GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); // 失能JTAG调试端口  这样PB3 pB4 就是作为一个普通的IO口使用

	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4; // 端口配置
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;	   // 推挽输出
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;	   // IO口速度为50MHz
	GPIO_Init(GPIOB, &GPIO_InitStructure);				   // 根据设定参数初始化GPIO

	GPIO_SetBits(GPIOB, GPIO_Pin_3 | GPIO_Pin_4); // PB3 PB4 输出高
}

Warum ist JTAG während der Initialisierung deaktiviert?
Fügen Sie hier eine Bildbeschreibung ein
Sie können die entsprechenden Funktionen der Pins sehen. PB3 und PB4 sind JTAG-Testports. Wir müssen die JTAG-Ports deaktivieren, um diese beiden IOs als GPIOs zu verwenden.


Das zweite, worauf Sie achten sollten, ist die Änderung der Makrodefinitionen von SCL und SDA

mpuiic.hDatei öffnen

Sie können sehen, dass hier viele Makrodefinitionen definiert sind. Dies ist das Quellprogramm
Fügen Sie hier eine Bildbeschreibung ein
第一个IO设置是啥意思呢?
Wir wissen, dass SDA in der IIC-Kommunikation eine Datenleitung ist, die über Ein- und Ausgänge verfügen mussDie E/A-Richtungseinstellung dient hier dazu, den Eingabemodus und den Ausgabemodus von SDA festzulegen. Sie können sich auf das Funktionshandbuch der Bibliothek beziehen, wie in der folgenden Abbildung dargestellt. Dies ist das Register des Ports, das der um acht Bit höheren Pin-Nummer entspricht .Lassen Sie es uns zunächst anhand des Quellprogramms analysieren 端口配置高寄存器(GPIOx_CRH) (x=A..E)
Fügen Sie hier eine Bildbeschreibung ein
Fügen Sie hier eine Bildbeschreibung ein
. Zunächst verwendet er
SCL-->PC12
SDA-->PC11
die E/A-Richtung, die darin besteht, das Register des Ports zu bedienen

#define MPU_SDA_IN()  {
      
      GPIOC->CRH&=0XFFFF0FFF;GPIOC->CRH|=8<<12;}

Der Anfang dieses Satzes besteht darin, das Portmodusbit von PC11 zurückzusetzen und dann das 15.-12. Bit des Portregisters von PC11 auf 1000 zu setzen
Fügen Sie hier eine Bildbeschreibung ein
Dieses Bild ist leicht zu verstehen und die Fähigkeit, es zusammenzufassen, ist perfekt

Wir nehmen folgende Änderungen vor

#define MPU_SDA_IN()              \
    {
      
                                   \
        GPIOB->CRL &= 0XFFFF0FFF; \
        GPIOB->CRL |= 8 << 12;    \
    }
#define MPU_SDA_OUT()             \
    {
      
                                   \
        GPIOB->CRL &= 0XFFFF0FFF; \
        GPIOB->CRL |= 3 << 12;    \
    }

// IO操作函数
#define MPU_IIC_SCL PBout(4) // SCL
#define MPU_IIC_SDA PBout(3) // SDA
#define MPU_READ_SDA PBin(3) // 输入SDA

2. Überprüfen Sie, ob der von Ihnen selbst transplantierte pünktliche Atomcode den INT-Pin verwendet

Wenn der INT-Pin verwendet wird, wird er im Allgemeinen unterbrochen, um den Euler-Winkel zu lesen, und der IO muss initialisiert werden. Entfernen Sie diesen Teil. Wir haben den INT-Pin () nicht verwendet 使用的是主程序中循环读取.

Sein initialisiertes IO kann Programmfehler verursachen

Kommentieren Sie es daher bitte aus, um die Richtigkeit nachfolgender Vorgänge sicherzustellen


4. Initialisieren Sie die MPU6050 im Hauptprogramm

1. Initialisieren Sie MPU6050 im Hauptprogramm

    delay_ms(500); // 延时0.5s 使MPU6050初始化稳定
	MPU_Init();    // 初始化MPU6050
	mpu_dmp_init();

2. Erhalten Sie kontinuierlich die von DMP im Hauptprogramm verarbeiteten Daten

  while( mpu_dmp_get_data(&pitch, &roll, &yaw)!=0 ){
    
    }//返回值:0,正常	//    其他,失败1
  u1_printf("\n\r pitch=%0.2f roll=%0.2f yaw=%0.2f \n\r", pitch, roll, yaw);

3. Schließen Sie den seriellen Anschluss an, um die Winkeländerung anzuzeigen

Normalerweise dauert es einige Sekunden, bis die MPU6050 erfolgreich initialisiert wurde!

Verwenden Sie dann die serielle Schnittstelle, um die Daten anzuzeigen

Es ist ersichtlich, dass die gelesenen Daten erfolgreich sind und alle drei Ecken erfolgreich gelesen wurden und unser Ziel erreicht ist
Fügen Sie hier eine Bildbeschreibung ein


4. Die Unterscheidung zwischen Roll-, Nick- und Gierwinkeln

1. Drehen Sie den MPU6050 manuell, um ihn zu unterscheiden

Dazu können Sie anhand des angezeigten Winkels unterscheiden, die MPU6050 drehen und die Änderung des Winkels überprüfen

Links und rechts ist der Gierwinkel (entlang der X-Achse),
oben und unten ist der Nickwinkel (entlang der Z-Achse),
links und rechts ist der Rollwinkel (entlang der Y-Achse)

Sie können zu den Großen gehen, um darüber zu reden, es gibt viele Informationen im Internet

2. Verwenden Sie die vofa+-Steuerung zur Unterscheidung (nicht implementiert).

Ich wollte ursprünglich vofa+ verwenden, um die Transformation des Winkels visuell anzuzeigen, aber ich habe es nicht herausbekommen. Ich weiß nicht, wie ich dieses Steuerelement spielen soll. Wenn ich es herausbekomme, werde ich es nachholen.
Fügen Sie hier eine Bildbeschreibung ein


V. Zusammenfassung

Bei diesem Artikel handelt es sich hauptsächlich um einen Softwareartikel, in dem Sie lernen, wie Sie die Daten des MPU6050 verpflanzen und lesen. Schließlich basieren alle Ausgleichswagen auf dem Winkel, um eine aufrechte Position zu erreichen. Dies ist der erste Schritt im Softwareartikel.

Nachdem Sie dies gelernt haben, können Sie schnell offizielle Dokumente übertragen, um die gewünschten Funktionen zu erhalten

Es gibt immer noch viele Dinge, die in dem Artikel nicht klar erklärt werden. Ich habe auch die Transplantationsschritte grob an alle weitergegeben. Einige Prinzipien sind immer noch nicht tief genug.

希望大家,还是要先了解原理,再深入,再做项目,在项目中二次深入理解

Nun, der nächste Abschnitt wird Sie bringen
Die Software des unteren Fahrers des Autos – der untere Fahrer des Autos (Motor, Encoder)

Alle können sich wieder darauf freuen, hey, komm schon, komm schon!

Ich denke du magst

Origin blog.csdn.net/cyaya6/article/details/131438928
Empfohlen
Rangfolge