www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Neigungskompensation Magnetsensor


Autor: Sven (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo.

Ich habe mit einem 3-achsigen Magnetfeldsensor einen elektronischen 
Kompass realisiert.
Dieser funktioniert schon ziemlich gut, allerdings nur,wenn ich ihn in 
horizontaler Lage halte.

Zusätzlich möchte aber nun noch eine Neigungskompensation mit Hilfe 
eines Beschleunigungssensors für den Kompass realisieren.
Im Internet habe ich schon mehrere Pdf´s gefunden,die größtenteils alle 
auf die selben Formeln zur Neigungskompensation zurückgreifen:

X' = X*cos(alpha) + Y*sin(alpha)*sin(beta) - Z*cos(beta)*sin(alpha)

Y' = Y*cos(beta) + Z*sin(beta)

azimuth = atan(Y'/X') / PI * 180

Diese Formel habe ich in meinen Controller programmiert. Wenn ich mir 
nun die azimuth-Werte z.B. bei einer X-Achsen-Neigung des 
Beschleunigungssensors um +/-20° ausgeben lassen,dann schwanken diese in 
einem Bereich von ca. 80°

(azimuth nei -20°:ca. 310°; azimuth bei Nulllage: 16°; azimuth bei +20°: 
30°)

Meine Frage nun: Was ist an der Formel falsch bzw. muss ich noch weitere 
Berechnungen ergänzen,damit ich bei Neigung des Kompasses die Richtung 
nahezu konstant bleibt?

Mfg,Sven

Autor: Sven (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hat keiner nen Tipp?

Irgendwie bezweifle ich,dass dies diese Formel korrekt ist!
Überprüfen kann ich dies eigentlich gut,da ich ein Eval-Board von dem 
HMC5843 hier habe mit mitgelieferter Simulationssoftware.Dabei wird die 
Neigung auch gut kompensiert und die ausgegebene Richtung bleibt 
konstant.

Wenn ich nämlich die Werte der einzelnen Achsen des Magnetsensors bzw. 
des Beschleunigungssensors in die Formeln wie in obigem Post 
einsetze,dann kommen bei Neigung des Magnetsensors völlig andere 
Richtungswerte raus.

MfG,Sven

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sven schrieb:
> Hat keiner nen Tipp?

Was ist X, Y und Z?
Wo kommen alpha und beta her?
Hast du auch nicht vergessen in Radianten und nicht in Grad einzusetzen?
Hast du dir die entsprechenden Werte angesehen?
Hast du schon versucht die Formel herzuleiten? (Auch wenn das ganze 3D 
ist, recht viel mehr als Phythagoras und sin/cos im rechtwinkeligen 
Dreieck brauchst du dazu nicht. Kugel aufmalen, Ausgangswerte 
einzeichnen, Endwerte einzeichnen, und festlegen um welche Achsen du in 
welcher Reihenfolge drehen musst um den 3D Vektor in die Äquatorebene 
zurückzubringen. Mit Rotationsmatrizen gehts einfacher, aber wenn du 
damit keine Erfahrung hast, gehts auch so.)

Autor: didadu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hätte in dem Formelsatz auf jeden Fall eine klare Symmetrie zwischen 
zwei von den drei Raumachsen erwartet.

Da muss also etwas falsch sein oder fehlen.

Autor: Sven (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
X,Y und Z sind die Werte der entsprechenden Magnetsensorachsen.
alpha ist der Winkel der X-Achse des Beschleunigungssensors (Pitch) und 
beta und demzufolge der Winkel der Y-Achse des Beschl.-Sensors (Roll).

Ja,ich rechne mit den Radienten.
Naja,herleiten selbst nicht direkt,aber ich habe genügend App-notes in 
denen dies gemacht wurde.Ich selbst kann die Herleitung auch 
nachvollziehen und wie schon bereits oben erwähnt, kommen am Ende in 
fast jeder App-Note die beiden Formeln für X' und Y' wie von mir bereits 
oben beschrieben raus.

Mal ein Beispiel der Achsenwerte vom Eval-Board,wobei alpha und beta die 
Werte sind,die wie folgt berechnet werden: ADC-Wert*Sensorauflösung:

 X    Y     Z    alpha    beta    Sensorneigung
18  -430  -360   0.002    0.007   keine Neigung
47  -292  -446   -0.32    0.004   Sensor um -20° entlang der X-Achse 
geneigt

Bei der -20°-Neigung sollte nun eigentlich der gleiche Richtungswert 
rauskommen,als wenn der Sensor nicht geneigt wird!

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
didadu schrieb:
> Ich hätte in dem Formelsatz auf jeden Fall eine klare Symmetrie zwischen
> zwei von den drei Raumachsen erwartet.
>
> Da muss also etwas falsch sein oder fehlen.

Nicht unbedingt.
Wenn man sich die allgmeine Rotationsmatrix (Drehung um alle 3 
Raumachsen) ansieht und algebraisch ausrechnet, dann sieht man, dass die 
Matrix nicht symetrisch bezüglich der Diagonalen ist, obwohl es die 
Ausgangsmatrizen sind. Das ist auch gut so, sonst könnte man eine Matrix 
nicht mehr in Eulerwinkel zerlegen :-)

Edit:
Eines ist allerdings wirklich seltsam: Im Ausdruck für Y' kommt alpha 
nicht vor.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> alpha ist der Winkel der X-Achse des Beschleunigungssensors (Pitch)
> und beta und demzufolge der Winkel der Y-Achse des Beschl.-Sensors
> (Roll).

>  X    Y     Z    alpha    beta    Sensorneigung
> 18  -430  -360   0.002    0.007   keine Neigung
> 47  -292  -446   -0.32    0.004   Sensor um -20° entlang der X-Achse
> geneigt

ich denke du hast da einen Hund in den Winkeln. Wenn alpha der Winkel 
der X-Achse ist, dann ist alpha eine Drehung um die Y-Achse (oder Z? 
hast du ein rechteHand-System bei dem Z nach oben schaut?). Bei einer 
Drehung um die Y-Achse ändern aber X und Z die Werte. Bei dir ändern 
sich aber Y und Z

Autor: Sven (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja das ist richtig.Wenn ich den Sensor um die Y-Achse rotiere,dann 
ändern sich die Werte für X und Z.So ist es auch bei mir.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.