Forum: Mikrocontroller und Digitale Elektronik neuer Miniatur-Kompassensor von Alps


von Christoph db1uq K. (christoph_kessler)


Lesenswert?

http://www3.alps.co.jp/npv_product/1003_HSCD/HSCD_E.PDF
Ein 3D-Sensor für das Erdmagnetfeld mit nur 2,5*2,5*0,7mm
und I2C-Bus-Interface, +/-0,6mT 0,2mA

von Reinhard R. (reinhardr)


Lesenswert?

Muss man den direkt bei Alps bestellen, oder haben die auch 
Distributoren (habe keine auf deren HP gefunden)?
Abgesehen von der Lötbarkeit wäre das Ding sehr interessant für mich.

Gruß
Reinhard

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

Scheint noch sehr neu zu sein. Mich wundert, dass es nicht als Kompass 
sondern als "Azimuth"- Sensor beworben wird. Gibts da einen Haken? Auch 
zum I2C-Protokoll und der max. Auslesegeschwindigkeit / Messrate gibts 
anscheinend noch nichts.

von Lothar (Gast)


Lesenswert?

Das sieht ja eher aus, wie eine Projektstudie. Sehr spärliche Angaben, 
keine Pinbelegung. Das Gehäuse wäre für mich das KO-Kriterium. Geht das 
ohne Ofen?? Interessant ist das Teil schon.
Ich habe allerdings gerade Probleme mit einem 
3-Achs-Beschleunigungssensor, rauscht wie die Nordsee bei Sturm.

Grüsse
Lothar

von Reinhard R. (reinhardr)


Lesenswert?

Das Ding wird wahrscheinlich nur die drei Komponenten das Magnetfelds 
messen und sonst nichts. Für einen (3D) Kompass muss man noch wissen wie 
der Sensor ausgerichtet ist (z.B. mit Neigungssensoren) da das 
Erdmagnetfeld auch eine vertikale Komponente besitzt. In unseren Breiten 
ist die vertikale Komponente sogar größer als die Horizontale (Neigung 
ca. 70°).

Reinhard

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

Da steht doch, dass es vertikale Neigung bis +/- 90Grad ausgleichen 
kann. Anscheinend kommt nur ein Messwert für die hor. Komponente raus, 
das andere wird schon intern weggerechnet. Es soll ja gerade teure 
Neigungssensoren vermeiden.

von Reinhard R. (reinhardr)


Lesenswert?

Ganz Allgemein kann das, ohne zusätzliche Informationen, nicht 
funktionieren, das ist mathematisch ein Ding der Unmöglichkeit 
(Rotationssymmetrie des Feldvektors). Allerdings wird es wohl möglich 
sein mit einem schlauen Algorithmus der gewisse Annahmen trifft ein 
brauchbares Ergebnis bei den meisten Situationen zu erzielen. Ich denke 
mal dass die Art und Weise wie Menschen Geräte in der Hand halten und 
bewegen da gewisse Rückschlüsse zulässt.

Gruß
Reinhard

von Mike (Gast)


Lesenswert?

Hallo.
Nach langem Warten ist nun der ALPS Sensor auch endlich bei mir 
angekommen.Hat irgendjemand hier im Forum schon Erfahrungen damit 
gemacht?

Ich versuch ihn gerade auszulesen.Allerdings ist die Beschreibung der 
Slave-Adresse recht spärlich.

Ich habe versucht,ihn mit 0x18 zu beschreiben und 0x19 auszulesen.Meine 
SCL-Leitung zeigt auch auf dem OSZI sauber die 100KHz default.Leider 
sehe ich nichts auf der Datenleitung.

Hat jemand nen Tipp?

Gruß,Mike

von gast (Gast)


Lesenswert?

death link...

von Frank (Gast)


Lesenswert?


von Mike (Gast)


Lesenswert?

Stimmt,hatte vergessen paar Info´s anzuhängen.Danke Frank.
Hat jetzt jemand eine Idee und kann mir weiterhelfen?

von Reinhard R. (reinhardr)


Lesenswert?

Ich kann auf der Seite nichts entdecken was einem detailliertem 
Datenblatt nahe kommt. So lässt sich nicht viel sagen, außer dass der 
Sensor wohl nicht trivial zu löten ist...

Reinhard

von Mike (Gast)


Lesenswert?

@ Reinhard:
Mit dem Löten hast du recht.Bei uns musste dies auch unser Lötexperte 
erledigen.Ist schon nicht einfach für ihn gewesen! ;-)

Klar,Infos sind rar.Ich hab zwar das Datenblatt vor mir liegen (Stand 
Mai 2009) aber da steht "ALPS Confidential" drauf,d.h. wird wohl nicht 
für die Allgemeinheit gedacht sein!Sorry

Dachte halt,dass evtl. hier auch jemand im Forum ist,der mit dem Sensor 
testet und dazu die nötogen Unterlagen besitzt.

Gruß,Mike

von Mike (Gast)


Angehängte Dateien:

Lesenswert?

Wie berechnet sich der Heading-Wert des Sensors,wenn die Neigung schon 
intern kompensiert wird?

Als Beispiel ist im Datenblatt des Sensors nur ein Diagramm (siehe 
Anhang) aufgelistet.

Geht dies hier auch über heading = arctan(y/x) ?

von Hauke R. (lafkaschar) Benutzerseite


Lesenswert?

Wo habt ihr denn die kleinen Dinger herbekommen? Genau so etwas könnte 
ich gut gebrauchen !

von Mike (Gast)


Lesenswert?

schau mal hier: www.avnet-abacus.eu

von Hauke R. (lafkaschar) Benutzerseite


Lesenswert?

Bevor ich mich jetzt da sinnlos registriere: Kann mir noch jemand sagen 
was das schmucke Ding kostet?

von Mike (Gast)


Lesenswert?

Also ich hab 3 Stück zum testen.Kosten glaub ich um die 30Euro/Stk.Einer 
ist leider schon aufgrund der geringen Abmessungen beim Löten 
draufgegangen. :(

von Reinhard R. (reinhardr)


Lesenswert?

Ansonsten gibt es noch den ähnlichen HMC5843 bei Digikey, kostet ca. die 
Hälfte.

Was den Heading Wert betrifft, arctan(x/y) ist die richtige Formel. Ich 
frage mich aber wie das Ding die Neigungskompensation intern erledigt. 
Rein magnetisch geht das ja bestenfalls näherungsweise.

Reinhard

von Mike (Gast)


Lesenswert?

Reinhard R. wrote:

>Was den Heading Wert betrifft, arctan(x/y) ist die richtige Formel.

Hmm,ob die Formel richtig ist,kann ich nicht ganz nachvollziehen.Sollte 
man denn für x und y die Count-Werte einsetzen?Die können ja dann bei 
12Bit Auflösung bis 4095 gehen (bei starker magnetischer 
Beeinflussung).Ich hatte eigentlich von arctan(y/x) geschrieben und 
nicht wie du andersrum.
Wenn die ganze Sache neigungskompensiert ist und die Z-Achse außer acht 
gelassen würde,dann sollte ja allein mit dem X- und Y-Wert die 
Ermittlung erfolgen oder?


>wie das Ding die Neigungskompensation intern erledigt.

entweder über intere Berechnungen oder mit Hilfe von look-up Tabellen 
denke ich.

von Reinhard R. (reinhardr)


Lesenswert?

Wenn du es genauso wie in der Skizze haben willst, nimmst du 
arctan(x/y), aber auch arctan(y/x) ergibt sinnvolle Werte. Man 
vertauscht ja nur Achsen (und damit auch die Drehrichtung). Was du 
letztendlich willst hängt von deinem gewünschten Bezugssystem ab.

Ob deine Werte von -1.0 bis 1.0 gehen, oder von -2048 bis 2047 ist egal, 
da du ja sowieso ein Verhältnis berechnest. Wichtig ist nur dass du 
einen allenfalls vorhandenen Offset abziehst.
Eine simple Integerdivision mit den Rohwerten solltest du übrigens nicht 
machen, sonst werden zwei 90° große Sektoren in eine Richtung gerundet.

Eine richtige Neigungskompensation, die in allen möglichen Ausrichtugen 
funktioniert, kann man weder mit einer Berechnung oder einer Look-Up 
Tabelle erledigen. Dazu braucht man noch zusätzliche Messungen, z.B. von 
einem 3 achsigen Akzelerometer (in einem unbeschleunigten System). Für 
viele Anwendungen dürfte es aber reichen wenn man annimmt dass sich die 
Neigung in Grenzen hält.

Reinhard

von Simon K. (simon) Benutzerseite


Lesenswert?

Die Berechnung mit ArcTan hängt natürlich auch vom Quadranten ab.

von Mike (Gast)


Lesenswert?

Ich weiss nicht ob meine Achsenregister defekt sind,aber irgendwie 
stimmen die High-Byte Werte der X-/Y-/Z-Achsen nicht.Entweder liegen sie 
in einem Bereich von ca. 0....7 Counts oder nahe des Maximalwertes von 
255 (d.h. mal 255Counts,mal 248Counts),aber nie in der Spanne 
dazwischen.Ich glaube nicht,dass dies am Programmcode liegt.

Hat jemand ähnliche Erfahrungen gemacht?

Gruß,Mike

von Reinhard R. (reinhardr)


Lesenswert?

Hi,

das ist so schon in Ordnung, du hast einfach eine vorzeichenbehaftete 
12bit Zahl in einem 16bit Register. Die kannst du, wenn du es richtig 
machst genauso weiterverwenden.
Das müsste in etwa so gehen:
1
int X_Val = (X_High<<8) + X_Low;

Sieh dir mal an wie negative Zahlen in der Computertechnik repräsentiert 
werden. Betrachten wir mal nur ein einzelnes Byte mit Vorzeichen:
1
//Hex == Dezimal
2
0x00 == 0
3
0x01 == 1
4
...
5
0x7F == 127
6
0x80 == -128
7
0x81 == -127
8
...
9
0xFF == -1

Da du im Highbyte nur 4bit benutzt werden hast du nur die möglichen 
Werte 0x00 bis 0x07 und 0xF8 bis 0xFF, dezimal entsprechend -8 bis 7.

Gruß
Reinhard

PS: Habe das jetzt nicht nachkontrolliert (bzw. überhaupt richtig im 
Gedächtnis), kleinere Ungenauigkeiten bitte zu entschuldigen. ;)

von Mike (Gast)


Lesenswert?

Reinhard R. wrote:

>int X_Val = (X_High<<8) + X_Low;

anstatt dem "+" ein "ODER" dann ist das richtig so.

Ansonsten klingt deine erklärung plausibel.
Nur: wenn ich nun nach der Formel

kompasskurs = arctan(x_wert/y_wert) rechne wie du oben bereits 
beschrieben hast,kommen auch unabhängig von der späteren 
Berücksichtigung der 4 Quadranten komische Werte raus.

Wenn ich den Sensor nicht bewege,dann gibt er mit etwa folgende Werte 
zurück:

x_wert   y_wert    kompasskurs
 15        20         37,87°
 7         28         14,04°
 8         25         17,74°
 8         28         15,95°
 10        21         25,46°

Das ist schon recht ungenau,findest du nicht auch?

von Reinhard R. (reinhardr)


Lesenswert?

Der Betrag des Feldes in der XY-Ebene scheint etwas niedrig, und 
instabil zu sein. Laut Wikipedia hat das Erdmagnetfeld eine horizontale 
Komponente von ca. 20µT.
1
x_wert  y_wert  Betrag  Feld
2
[LSB]   [LSB]   [LSB]   [µT]
3
15      20      25,0    12,5
4
7       28      28,9    14,4
5
8       25      26,2    13,1
6
8       28      29,1    14,6
7
10      21      23,3    11,6

Kannst du mal die Werte der Z Achse posten?

Meiner Erfahrung nach reagieren die Sensoren halt sehr empfindlich auf 
Felder in der Umgebung. Ich hatte mal zum Testen einen magnetischen 
Neigungsschalter mit einem KMZ51 gebaut, der nichts anderes tat als ein 
oder zwei LEDs (a 20mA) zu schalten. Das zusätzliche Feld durch den 
Strom der LEDs reichte für eine negative Rückkopplung, so dass die 
Schaltung in einem gewissen Neigungsbereich zu Oszillieren begann.

Reinhard

von eProfi (Gast)


Lesenswert?

Verwende statt arctan(x/y)  die atan2(x,y) , dann gibt es auch kein 
Problem, wenn y 0 wird.
Ergebnisbereich ist -pi .. +pi.

von Mike (Gast)


Lesenswert?

hier die Werte mit Z-Achse.Hab neue Werte aufgenommen:

x_wert y_wert z_wert
-11      -8    -5
-17      -6    -8
-15      -11   -4
-12      -12   -8
-17      -8    -6
-19      -11   -9
-14      -10   -7

von Reinhard R. (reinhardr)


Lesenswert?

Das hat mich leider auch nicht schlauer gemacht, eher im Gegenteil.
1
x_wert  y_wert  z_wert  Betrag  Feld   Azimuth  Elevation
2
[LSB]   [LSB]   [LSB]   [LSB]   [µT]   [°]      [°]
3
-11     -8      -5      14,5    7,2    54,0     20,2
4
-17     -6      -8      19,7    9,9    70,6     23,9
5
-15     -11     -4      19,0    9,5    53,7     12,1
6
-12     -12     -8      18,8    9,4    45,0     25,2
7
-17     -8      -6      19,7    9,9    64,8     17,7
8
-19     -11     -9      23,7    11,9   59,9     22,3
9
-14     -10     -7      18,6    9,3    54,5     22,1

Sowohl das Feld als auch die Elevation sind schon mal weit von dem 
entfernt was man erwarten würde (48µT, 60°).

Wie sieht es in der Umgebung des Sensors aus? Gibt es etwas dass hier 
stören kann (Magneten, Ferromagnetische Materialien, hohe Ströme,...)? 
Hast du mal längere Messungen gemacht (Drift vs. kurzzeitige Störung?). 
Ist ein Lötschaden ausgeschlossen? Hat der Sensor eine Möglichkeit zum 
"Reset" (wie z.B. eine KMZ51)? Wenn ja, wird die regelmäßig genutzt?
Ich muss gestehen, ich fische hier gerade ziemlich im Trüben.

Gruß
Reinhard

von Mike (Gast)


Lesenswert?

@Reinhard R.:
Danke erstmal für deine bisherigen Antworten.Auf dem Gebiet scheinst du 
dich auszukennen.

>Wie sieht es in der Umgebung des Sensors aus?

Das ist mein normaler Arbeitsplatz.Der Sensor hängt an einem 
Eval-Board.Sonst halt (wie wahrscheinlich bei jedem ;-) ) PC daneben und 
ein Oszi (ausgeschaltet).Ferromagnetische Materialien eher weniger.

>Hast du mal längere Messungen gemacht (Drift vs. kurzzeitige Störung?)

Bisher noch nicht so.

>Ist ein Lötschaden ausgeschlossen?

Würde ich jetzt mal ausschließen.Zwar ist der Sensor schwer zu löten 
gewesen,aber der Kollege der das gemacht hat,hat das gut hinbekommen 
denke ich.Mit der Lupe erkenne ich zumindest keinen Fehler.Die 3 Pads 
für die Sensorachsen sehen sauber aus.Ich weiss aber nicht inwieweit die 
Löttemperatur das "Innenleben" des IC´s beeinflusst hat.

>Hat der Sensor eine Möglichkeit zum "Reset" (wie z.B. eine KMZ51)?

Wenn du so einen "flip coil" meinst beim KMZ51,dann hat der HSCD so 
etwas intern nicht.Reset kommt nur vom Controller.

>was man erwarten würde (48µT, 60°)

Woher nimmst du die 60°? Gelten die auch für Mitteleuropa so wie die 
48µT?

MfG,Mike

von Mike (Gast)


Lesenswert?

@ Reinhard R. :

Langsam glaube ich,dass mein Sensor trotzdem einen weg hat!
Wenn ich ihm um die Z-Achse rotiere,dann sollten ja die Werte für x-bzw. 
Y-Achse wo oben im Bild zu sehen,einem sin-bzw. cos-Verlauf folgen.

Komischerweise gehen aber nur die Y-Achsenwerte auch in den negativen 
Bereich.
Die X-Achsenwerte sind ständig positiv.Das ist schon merkwürdig???!

von Mike (Gast)


Lesenswert?

Hallo ich bin´s nochmal.

Wollt nochmal paar Meinungen einfangen.

Ich hab den HSCD-Sensor nun einmal an einem Fujitsu-Board dran und 
ausgelesen und auch einmal am STK500 mit einem ATmega16L dran und 
ausgelesen.
Bei beiden sind die "Self-Test"-,"Who I am"- und "More-Info"-Register 
mit den Werten wie sie im Datenblatt stehen beschrieben.

Das "Self-Test"-Register an sich wurde auch erfolgreich getestet.Und 
dieses ist ja dazu da,um den Sensor auf fehlerfreie Funktionalität zu 
testen.

TROTZDEM erhalte ich trotz (fast) identischem Programmcode 
unterschiedliche Werte in den 3 Datenregistern DATAX,DATAY und DATAZ.

Lese ich den Sensor über das Fujitsu-Board aus,erhalte ich bei 
horizontaler Drehung des Sensors z.B. nur pos. Werte für die X-Achse,die 
aber eigentlich bei 360° Drehung auch mal neg. werden sollten.Y-und 
Z-Achse gehen auch in den neg. Bereich.

Beim Auslesen mit dem ATmega16L liegen alle drei Achsen im neg. Bereich 
um die -1000 Counts. Dabei ist die Y-Achse meist permanent bei -2048.

Bei beiden Boards ändert sich auch der Wert des Temperatursensors 
nicht,selbst wenn ich ihn etwa anhauche.

Kann es dann sein,dass der Sensor oder zumindest seine Sensorpins die 
den analogen Magnetwert einlesen kaputt sind,trotz der Tatsache,dass der 
"Self-Test" funktioniert??

Antworten wären hilfreich.Danke,Mike

von Reinhard R. (reinhardr)


Lesenswert?

Zuerst einmal sorry, habe es übersehen auf deine letzte Frage zu 
antworten.
Die oben erwähnten Werte hatte ich aus der Wikipedia.

Ist der Fujitsu Controller auch ein 8bitter, oder etwas anderes. Stimmen 
die Variablentypen überein? Hast du mal von beiden Controllern dir 
typische Werte in Binärdarstellung angesehen. Das ist jetzt ziemlich 
spekulativ, aber eine besserer Ansatz fällt mir dazu leider mal nicht 
ein um das Problem einzugrenzen.
Man kann auch mit dem Speicheroszi bzw. Logicanalysator direkt auf den 
Datenleitungen nachsehen um die Kommunikation zu überprüfen.

Hast du die Möglichkeit einen anderen Sensor zu testen?

Gruß
Reinhard

von Mike (Gast)


Lesenswert?

Hallo Reinhard R.!

Danke erstmal für deine Antworten.Der Fujitsu-Controller ist der 
MB96340.Er ist ein 16-bitter.
Die Variablentypen stimmen soweit ich das sehen kann überein.
Einziger Unterschied zwischen beiden Controllern ist halt,dass der 
ATmega16L mit 5V betrieben wird und der Fujitsu mit 3,3V.Die 5V des 
ATmega regle ich dann mittels Spannungsteiler auf 3V runter um den 
Sensor zu betreiben.

Die Werte sehe ich mir bei beiden Controllern ständig mit dem 
Speicheroszi an.Die ACK´s erfolgen wie es erwartet und wie schon oben 
erwähnt ist der Inhalt der Self-Test und anderer "Info"-Register genau 
wie im Datenblatt beschrieben.

Ich habe noch einen anderen Sensor den ich testen kann,was ich heute 
auch tun werde.bisher hatte ich Ihn nur am Fujitsu-Board dran.Aber ich 
schau mal was sich am ATmega tut.

MfG,Mike

von gastlich (Gast)


Lesenswert?

Big-Endian vs Little-Endian Problem ???

gruss Claudio

von Mike (Gast)


Lesenswert?

>Big-Endian vs Little-Endian Problem ???

Nein,da gibt es kein Problem diesbezüglich.

von Mike (Gast)


Lesenswert?

Ich habe jetzt einen anderen Sensor (ebenfalls ein Magnetsensor) jeweils 
mit dem Fujitsu-Controller und dem ATmega16L ausgelesen.
-> Die Werte der 3 Magnetachsen werden entsprechend der beiden 
Controller fast identisch ausgegeben.

Das festigt jetzt meine Annahme,dass der HSCD einen weg hat!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.