Magnetometer Yamaha YAS529 resp. MS-3C

Hallo, ich bin's wieder mit meinen Magnetfeldern.

Ich habe jetzt den YAS529 in Betrieb genommen, habe aber ein Verständnisproblem mit der Interpretation der drei Achsen: X-Achse ist klar, aber über Y1 und Y2 stolpere ich noch.

Selbst mit den im Application Manual vorgeschlagenen Algorithmen komme ich nicht zu wirklich einleuchtenden Daten.

Leider gibt es Datenblätter nur gegen NDA, daher richtet sich meine Frage an die "Eingeweihten". Vielleicht kennen ja mehr als zwei Leser dieser NG diesen Sensor.

Falk

Reply to
Falk Willberg
Loading thread data ...

Allzuviel steht da nicht drin:

formatting link

--
Gruesse, Joerg

http://www.analogconsultants.com/
 Click to see the full signature
Reply to
Joerg

Vielleicht schickt dir Mark auch CD-MS3C-DRV-2111-20071120.zip, das sind die Quelltexte Eval-Kits. Hast du auch die Calibration-Register für die Koeffizienten der Matrix ausgelesen und die Matrix-Multiplikation durchgeführt, um den (x,y,z)-Vektor in den (hx,hy,hz)-Vektor zu transformieren? Im Quelltext kann man sehen, daß zuvor noch eine Konstante abgezogen wird, wahrscheinlich damit es gleichmäßig um +/- schwankt. Ich habe aber bisher noch keine Zeit gefunden, das auszuprobieren, aber die Demosoftware des Kits läuft zumindest.

Wobei ich aber noch einen Knoten im Gehirn bekomme ist, wenn ich mir versuche die Geometrie vorzustellen, die dazu führt, daß man z=y1+y2 und y=y2-y1 rechnen muß :-) Die Zeichnung auf Seite 13 vom Application Manual sagt mir nicht viel.

--
Frank Buss, fb@frank-buss.de
http://www.frank-buss.de, http://www.it4-systems.de
Reply to
Frank Buss

Habe ich schon bekommen, die füllen ganz schön die Lücken im Handbuch.

Habe ich, mir ist nur nicht klar, was das soll. Siehe unten...

Die -512? Damit wird anscheinend ein signed-Wert gebildet, also das, was Du vermutest.

Ich muß wohl doch mal einen I2C-Adapter bauen/besorgen und die Software ausprobieren....

Ja, das will mir auch nicht in den Kopf...

Ja, die verwirrt mehr, als daß sie erklärt. ("Only a sensor corresponding to an axis to measure the magnetic field operates." Häh?)

Aber vielleicht ist das alles auch einfach nur viel zu kompliziert beschrieben, ich habe jetzt nämlich ein interessantes Ergebnis:

Wenn ich SX und SY1 als X- und Y- Komponente ohne jede Kompensation verwende, den Sensor einmal um 360° drehe und aus den gemessenen Min/Max-Werten einen Offset ausrechne, wie man das mit einem gewöhnlichen Magnetometer machen würde, erhalte ich sinnvolle Daten.

Ab Mittwoch werde ich erste Vergleichsmessungen mit dem HMC1043 machen können. Der YAS529 ist einfach angenehmer zu handhaben, weil er Set/Reset-Coils, Verstärker etc. schon auf'm Chip hat. Dafür kann man den nicht gut im Usenet diskutieren, weil alle Docs per NDA vor - ja was eigentlich? - geschützt sind.

Falk P.S.: Ein wenig furchterregend finde ich den Satz "Device identification number, external input A/D characteristics and CAL register's specification of the sample for initial evaluation differ from those of the actual product. When evaluating the the sample, please verify the device identification number at hand and give the evaluation."

Reply to
Falk Willberg

...

...

Stimmt, das ist der Prospekt "Wir haben $sensor mit alles!!! Cool, digital, mit I2C, nix analog, kann blaue LED schalten und jeder kann den in sein Händie designen."

Das vertrauliche Datenblatt bietet mehr Informationen, ist aber (für mich) schwer verdaulich.

Falk P.S.: Warst Du nicht mal über die Frage gestolpert, ob ein I2C-device auf der steigenden oder der fallenden Flanke SDA übernimmt? WIMRE ist die Definition, daß "High auf SCK bedeutet, daß SDA gültig ist". Damit sind die Flanken raus und SDA eigentlich nicht zu samplen ;-)

Reply to
Falk Willberg

Vermutlich auch noch alles auf Japanisch.

Ich? Kann mich nicht dran erinnern. Ich benutze so gut wie immer SPI.

--
Gruesse, Joerg

http://www.analogconsultants.com/
 Click to see the full signature
Reply to
Joerg

Frank Buss schrieb:

Sie haben keine echte Z-Achse eingebaut (War auch schon etwas verwundert/beeindruckt wie das Chip-technisch bei den Die-Abmessungen geht), sondern zwei gekippte Y-Sensoren hergestellt. z=y1+y2 ist klar (Vektoraddition) und y=y2-y1, dafür müsste man sich mal die Absolutwerte von der a1...a9 Koeffizienten anzeigen lassen. Auf S.30 steht das Kochrezept dazu.

Gruss, Matthias

P.S.: Das was hier als Gehirnschmalz reingesteckt werden muss macht den Preisunterschied zur Konkurrenz aber mehr als wett.

Reply to
Matthias Heinrichs

Wenn man so drüber nachdenkt, ist es eigentlich ganz einfach: Von der Seite gesehen verläuft Vektor y1 von links unten nach rechts oben und Vektor y2 von rechts unten nach links oben. Nehmen wir für y waagerecht und für z senkrecht an. Die y-Komponente ist also immer entgegengesetzt, sodaß bei einer Addition die z-Komponente verdoppelt wird. Bei einer Subtraktion dagegen wird also der negative y1 Vektor addiert, also ein Vektor, der von rechts oben nach links unten verläuft, was also zur Auslöschung der z-Komponente und Verdopplung der y-Komponente führt. Die Sensitivität in z-Richtung wird geringer sein, da der Winkel der Vektoren relativ flach sein wird, wegen den Die-Abmessungen, aber ansonsten geniale Idee.

Immerhin gibt es fertigen Quelltext in C, den man im Prinzip nur in seine Programme einbinden braucht. Und hängt natürlich immer von der verkauften Stückzahl des Endprodukts ab.

--
Frank Buss, fb@frank-buss.de
http://www.frank-buss.de, http://www.it4-systems.de
Reply to
Frank Buss

Ja, ich glaube das ist eine gute Idee, nicht die vorgeschlagene Kompensation zu verwenden. Habe mal ein Programm geschrieben, was mir die x, y1 und y2 Werte anzeigt:

formatting link

Ist was schlecht wegen der Perspektive zu sehen: der erste Test ist von oben von der Platine gesehen, also z-Koordinate. Gut zu sehen ist, daß y1/y2 ungefähr gleich ausschlagen. Von der Seite schlägt es dann gegeneinander aus und beim letzten Versuch, von der anderen Seite, der x-Sensor.

Das sind die reinen Messwerte, ohne Calibration angewendet. Sieht außerdem so aus, als hätten y1 und y2 einen recht großen Offset, zumindest zum Erdmagnetfeld gesehen, der auch noch unterschiedlich ist, sodaß das einfache Verfahren mit der Addition und Subtraktion für Erdmagnetfeldmessungen nicht möglich ist, ohne vorher den gemeinsamen Mittelwert auszurechen (kann ich in meiner Testanwendung per Tastendruck nullen). Außerdem scheinen die auch minimal anders zu skalieren, bei gleichen äußerem Magnetfeld. Das alles kann natürlich nicht mit der Korrekturmatrix erst nach der Addition/Substraktion herausgerechnet werden.

Ich habe aber ansonsten einige Ideen des Quelltextes vom Eval-Kit erstmal übernommen, nur komme ich mit ca. 130 Zeilen statt tausenden aus :-) da ich das kompakter in C++ implementiert habe und nur die Teile, die für die Magnetfeldsensorabfrage notwendig sind (aber weitgehend ohne Fehlerüberprüfungen, erstmal zum testen). Gibt nur yas529Init und yas529Measure als zwei Funktionen, ohne Parameter, und als Ergebnis stehen drei globale integer-Variablen mit den Messwerten bereit.

Das Eval-Kit ist nicht so praktisch, da das nur mit einer PCMCIA-Karte geliefert wird und ich keine Lust habe, das alles am Laptop zu entwickeln. Daher habe ich also die Sensorplatine abgeschnitten und jetzt über einen Cypress I2C USB Adapter angeschlossen, den ich hier noch von einem anderen Projekt liegen habe und wofür ich letztens eine einfache USB-HID-Anbindung programmiert habe (habe da leider keinen Beispielcode von Cypress gefunden, aber zum Glück haben die zumindest das Datenformat der HID-Pakete dokumentiert).

Quellcode kann ich nicht veröffentlichen, da dort NDA-Teile von Yamaha enthalten sein könnten, aber ich kann ihn dir schicken, wenn du möchtest, da du die NDA ja auch unterschrieben hast.

Den USB2I2C Adapter gibt es hier:

formatting link
?name=428-1910-ND

Ist recht teuer, für das was es macht, aber läuft unproblematisch. Man kann

3,3V I2C und 5V I2C per Software umschalten, Speisespannung ein-/ausschalten für extern angeschlossene Geräte usw., und man kann auch eigene Software auf dem Adapter flashen (wenn man z.B. den Miniprog von Cypress hat, der recht preiswert ist), da der auch einen Programmierstecker hat.

Stört mich erstmal nicht, da man die Calibration wohl sowieso nicht brauchen kann und ich die AD-Wandler (zumindest die für die drei externen Signale) nicht verwende in meiner geplanten Anwendung.

--
Frank Buss, fb@frank-buss.de
http://www.frank-buss.de, http://www.it4-systems.de
Reply to
Frank Buss

Interessant. Um welchen Wert schwanken die Werte in Ruhe und beim Rotieren im Erdmagnetfeld?

Bei mir sind das in Ruhe etwa SX: +/-2, SY1 und SY2: +/- 3-4. Nach vollen Rotationen in allen drei Achsen: SX: -172...107, SY1:

-27...188 und SY2: 92...326...

Zum Vergleich ein parallel montierter HMC1043: HX:-284...287, HY:

-297...289 und HZ: -152...166. (Mit 100-facher

Diese rough offset compensation kommt mir ziemlich fragwürdig vor. Ich wüßte gerne, was die *genau* bewirkt.

Morgen werde ich mal ein paar Daten beim Fahren loggen.

Falk

Reply to
Falk Willberg

In Ruhe, jeweils min/max Werte:

x: -717 -477 y1: 301 525 y2: 469 741

Nach Drehungen um alle möglichen Achsen im Erdmagnetfeld:

x: 654 3977 y1: -1151 1178 y2: 419 2708

Sind das schon die korrgierten Werte? Merkwürdig, daß die soviel niedriger sind, aber die Verhältnisse scheinen ungefähr übereinzustimmen. Ich habe dir mal meinen Quelltext zum Vergleich geschickt.

Ich denke das ist so eine Art Vorspannung für den ADC. Daher kann es auch je nach äußerem Magnetfeld scheinbar woanders einrasten, wodurch die unterschiedlichen Bereiche bei meinen Messungen oben her stammen, da ich nur zu Programmstart die Rough-Offsets bestimme. Sollte ich vielleicht noch verbessern, sodaß die Auflösung höher wird und dann ggf. mit einrechnen in den gemessenen Fine-Offset Wert.

--
Frank Buss, fb@frank-buss.de
http://www.frank-buss.de, http://www.it4-systems.de
Reply to
Frank Buss

Huch, Yamaha sagt, daß alles über 1023 als Überlauf anzusehen ist...

Nein, das sind die Rohdaten - 512. Mehr als 10 bit dürfen die doch nicht haben...

Gucke ich mir nachher mal an. Kennst Du ms3c.tar? Findest Du bei groups.google.com, hat aber ein paar häßliche Bugs.

...

Das denke ich auch. Und die CAL-Register enthalten IMO die Korrekturmatrix, die bei einer Initialen Kalibrierung beim Hersteller gebrannt werden.

So soll es ja sein. Ruogh-Offset auslesen, 5 abziehen, fertig. Oder gehen die bei Dir noch in die Messwerte ein?

Gruß, Falk

Reply to
Falk Willberg

Huch, Yamaha sagt, daß alles über 1023 als Überlauf anzusehen ist...

Nein, das sind die Rohdaten - 512. Mehr als 10 bit dürfen die doch nicht haben...

Initialisierst Du die Coils nicht? Ich mache das gelegentlich. Dabei wundert mich die Reihenfolge. Laut Manual wird nämlich mit b10nnn Coil nnn eingeschaltet, dann schaltet 00001 coil-1 aus, dann mit 10001 Coil-1

*an*... Wenn ich annehme, daß 0=Ein und 1=Aus bedeutet, stimmt die Sequenz für alle coils, auße coil-0. Oder ich habe etwas übersehen.

Kennst Du ms3c.tar? Findest Du bei groups.google.com, hat aber ein paar häßliche Bugs.

...

Das denke ich auch. Und die CAL-Register enthalten IMO die Korrekturmatrix, die bei einer initialen Kalibrierung beim Hersteller gebrannt werden.

So soll es ja sein. Rough-Offset auslesen, 5 abziehen, fertig.

BTW: Welchen Wert zeigt bei Dir die Temperatur? Ich bekomme 224, was um

100°C entspräche ;-)

Gruß, Falk P.S.: Ich versuche mal, den Originalbeitrag zu überschreiben...

Reply to
Falk Willberg

Hatte noch den Initialisierst Du die Coils nicht? Ich mache das gelegentlich.

Aktuell nicht, da die maximal 1 ms eingeschaltet werden dürfen und ich nicht weiß, wie das exakte Timing der Cypress I2C-Bridge ist. Sollte aber nicht viel Auswirkung haben, außer einer Offsetverschiebung und vielleicht ein wenig anders skaliert.

Laut Application Manual Seite 20 schaltet ein 1 in Bit 4 die Spule an und ein 0 die Spule aus. Mit Bits 0 bis 2 wird die Spule selektiert, von denen es 8 Stück gibt. Dann steht da, man solle die Spulen ein/aus-schalten, indem man "1" und "0" in Bit 4 schreibt, während man die entsprechende Spule wählt. Die vorgeschlagene Sequenz ist dieselbe, wie in dem Beispielcode:

0x90, 0x81, 0x91, 0x82, 0x92, 0x83, 0x93, 0x84, 0x94, 0x85, 0x95, 0x86, 0x96, 0x87, 0x97, 0x80

Die macht überhaupt keinen Sinn, nach dem vorher gesagten :-) Es wird erst Spule 0 angeschaltet, dann Spule 1 ausgeschaltet, Spule 1 eingeschaltet, Spule 2 ausgeschaltet, Spule 2 eingeschaltet usw., bis am Ende Spule 0 wieder ausgeschaltet wird, wobei aber die Spulen 1 bis 7 alle an sind. Wäre vielleicht mal eine Frage an Willow wert.

Sieht ähnlich aus, wie der Beispielcode von Yamaha, nur daß der mit floats arbeitet, nicht gerade schön für Microcontroller.

Ich habe hier 250, ist also 108° warm hier. Wäre auch für Fahrenheit ein wenig zu warm, aber laut Datenblatt soll es °C sein. Wird zumindest höher, wenn ich den Finger dranhalte. Kommt aber auch nicht hin, wenn man den minimalen Wert von -40 abziehen würde. Vielleicht mal eine Liste mit Fragen an Yamaha zusammenstellen :-)

--
Frank Buss, fb@frank-buss.de
http://www.frank-buss.de, http://www.it4-systems.de
Reply to
Frank Buss

...

Das scheint eine der Stärken des HMC zu sein. Ich nutze die SET/RESET-Coils zur Offset-Kompensation. Damit wird auch die Auflösung brauchbar...

Die Antwort würde mich interessieren. Mir scheint, daß Mark nicht so ganz der Spezialist für Magnetfelder ist. Aber ich bin sicher, daß sich reale Chips und Handbuch signifikant unterscheiden.

Ja, das hat ein Webdesigner geschrieben ;-)

Interessant wäre die Frage, ob man mit dem Apparat einen genau anzeigenden Kompass bauen kann und, wenn ja, wie. Ich glaube aber eher, daß der YAS529 nur einen prima Händie-Kompass darstellt.

Ich bin heute einmal ums Eck gefahren und habe die Ausgabe beider Sensoren geloggt. Der Plot sieht so aus:

formatting link
die Strecke ist
formatting link
Die Zahlen an den "Pömpeln" entsprechen der X-Achse (Sekunden) im Plot. Die Hängebank hat im südlichen Drittel ca. 25% Gefälle.

Kannst Du auch das starke Schwanken der Werte in Ruhe beobachten?

Mit dem HMC1043 und GPS-Daten kann ich sogar zeigen, daß die vom GPS berechnete Richtung zwischen einer und fünf Sekunden nacheilt.

Gruß, Falk

Reply to
Falk Willberg

Sollte man einiges durch ein wenig rechnen herausholen können.

Sieht ja schonmal so aus, als ob zumindest ein wenig Korrelation zwischen dem Honeywell und dem Yamaha Sensor bestünde :-)

Ich habe die Skalierung mal rausgenommen, das sind also jetzt wirklich die Rohwerte, wenn der Sensor ruhig auf dem Tisch liegt:

x: 461 466 y1: 573 579 y2: 492 498

Wenn ich einmal um die x-Achse drehe:

x: 397 508

Ist also ein Rauschen um bis zu 6 Werte und bei 360° Lageänderung im Erdmagnetfeldänderung um 111. Somit kann man ca. 18 verschiedene Werte unterscheiden (111/6), müsste man also ca. 20° mit auflösen können (360°/18). Nicht besonders genau. Mit einem Tiefpassfilter, der weniger als

1 Sekunde Trägheit verursacht, bekomme ich das schonmal doppelt so genau berechnet. Wenn ich über mehrere Sekunden integriere (bei ca. 20 Hz Abtastrate), dann komme ich an die theoretische Maximalgenauigkeit von 3° (360°/111) heran. Hängt also von der Anwendung ab, ob das brauchbar ist.

Vielleicht kann man auch noch ein wenig machen, wenn man es mit den Daten eines genauen Graviationssensors in Beziehung setzt.

--
Frank Buss, fb@frank-buss.de
http://www.frank-buss.de, http://www.it4-systems.de
Reply to
Frank Buss

...

...

Anders wäre es ja auch noch schlechter...

...

Bei 0.6uT/count und 20uT horizontaler Komponente[0] kommt das annähernd hin. (In Tokio sind es übrigens 30uT.)

....

Zum Vergleich: Mit dem HMC1043 habe ich 300 Werte bei +/- 1/2Bit Rauschen gemessen. Die Abtastrate ist ca. 50Hz, gemittelt wird über 200ms.

Der hilft auch nur, die Neigung zu kompensieren.

Schade, der Yamaha-Sensor hätte mir gut gefallen. Gäbe es einen "KMZ53" mit drei Achsen, wäre das vielleicht eine Alternative zum HMC1043, die auch preislich passen würde.

Falk [0]Laut dem von

formatting link
bereitgestellten Programm auf 51°N/7°E

Reply to
Falk Willberg
[YAS529 vs. Manual vs. Realität]

Ich werde das wohl Mitte Januar mal machen. Die Randbedingungen haben sich hier so geändert, daß 12 Monate[0] mehr Zeit sind und der HMC1043 nicht mehr so glänzt, wie er könnte[1].

Wenn Du Fragen für Yamaha hast, gerne hier oder per Mail an mich.

Gruß, Falk [0]Ja, die Uhren gehen dort wirklich so langsam :-) [1]Bei 3,3V schaffen BSS138/BSR316P, die als Alternative zum FDC6420 vorgeschlagen wurden, niemals 1A an 3 Ohm.

Reply to
Falk Willberg

Da immer mal wieder vereinzelt eMail-Anfragen bei mir eintreffen wegen diesem Newsgroup Posting (Magnetfeldsensoren scheinen beliebt zu sein, oder es gibt zu wenig andere Quellen), hier der aktuelle Stand der Dinge:

Falk hat einen besseren Chip gefunden, weil leichter anzusteuern und wohl auch rauschärmer, aber liegt ungefähr im gleichen Preisbereich, also 5 Euro bei größeren Stückzahlen. Es handelt sich um den HMC5843, Muster gibt es bei insed.de. Vielleicht kann Falk was dazu sagen, wie die Performance von dem Chip ist.

Für meine Anwendung wird ein Magnetfeldsensor wahrscheinlich nicht möglich sein, da innerhalb von Gebäuden das Erdmagnetfeld (was ich damit Zwecks

6-Achsen Lagebestimmung im Raum, messen wollte) zu stark abgeschirmt sein kann und auch in dem geplanten Einsatzbereich zu starke Störfelder auftreten können, daher habe ich das erstmal nicht mehr weiter verfolgt.

Soll bald wohl auch preiswertere Gyros geben (ein Distributor hatte das zumindest versprochen), was besser für meinen Anwendungsfall geeignet sein wird.

--
Frank Buss, fb@frank-buss.de
http://www.frank-buss.de, http://www.it4-systems.de
Reply to
Frank Buss

Wer mich kontaktieren möchte, mag das "weglassen" weglassen. (If you want to contact me, leave "weglassen" out).

So ist es: Rauschärmer, X,Y,Z statt X+3/4Y und 3/4-Y, I2C, Flip-Coils automatisch bedient, minimale Beschaltung mit 2 Cs(?), Werte werden normiert ausgegeben.

Laut Datenblatt bis 1620 LSBs/milligauss (Erdmagnetfeld ~ 500mG). Das kann aber nicht sein, 1620 LSBs/Gauss entspricht meinen Messungen.

Ich glaube, Besseres bekommt man in dieser Größe und zu diesem Preis derzeit nicht.

Abgeschirmt glaube ich nicht ;-)

Ja, Störfelder und Eisen sind ein großes Problem. In meinem Fall ist das Eisen fest an den Sensor montiert (bzw. umgekehrt) und ich habe meistens genug GPS-Daten, um deren Effekt herauszurechnen (klassische Deviationstabelle, kennt jeder Segler). Gegen örtlich oder zeitlich variable Störungen ist aber kein Kraut gewachsen[0][1].

Davon erzählte der Kunde mir auch mal, aber die hatten nur eine Achse und der Einzelpreis * 3 war denn doch zu hoch. Außerdem messen die ja nur die *Drehrate*, WIMRE. Im Vergleich zu einer *unverfälschten* Messung des Magnetfeldes wäre das aufwändiger.

Falk [0]Was passiert bei 400-420?

formatting link
[1]Die Straßenbahn fährt los:
formatting link

--
http://willberg.homelinux.org/
Reply to
Falk Willberg

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.