Forum: Mikrocontroller und Digitale Elektronik I2C + Honeywell HMC6343 3-Achs Sensor


von Paul K. (paulklee)


Angehängte Dateien:

Lesenswert?

Ich habe einen HMC6343 Tilt compensated compass von Sparkfun bezogen.
Die Kommunikation erfolgt über I2C.

Zum Empfangen der aktuellen Positionsdaten nutze ich folgenden 
Pseudocode:

I2C.beginTransmission(slaveAddress); // (Standard 0x32)
I2C.send(0x50); // Send a "Get Data" (0x50) command to the HMC6343
I2C.endTransmission();
I2C.requestFrom(slaveAddress, 6); // Request the 6 bytes of data (MSB 
comes first)
  i = 0;
  while(I2C.available() && i < 6)
  {
    headingData[i] = I2C.receive();
    i++;
  }

Das ganze funktioniert auch problemlos - nur möchte ich gern die interne 
Update Rate des Kompassmoduls von seinen Standart 5 Hz auf 10 Hz 
erhöhen.
Hierfür muss ein Wert im EEPROM Register des Sensors geändert werden.

Dem Datenblatt folgend müsste dies per folgender Befehlsstruktur 
funktionieren:

Command Byte, argument 1 (address), argument 2 (Byte to write)

I2C.beginTransmission(slaveAddress);
 I2C.send(0xF1); // Write to EEPROM Befehl
 I2C.send(0x05); // EEPROM Adress
 I2C.send(0x02); // Byte to write to EEPROM (für 10HZ: 00000010)
I2C.endTransmission();

Tatsächlich werden die Register scheinbar gesetzt. Aber die Update Rate 
ändert sich nicht.

Irgendetwas mache ich falsch und über Hinweise wäre ich wirklich 
dankbar.

Paul

von Florian (Gast)


Lesenswert?

Hallo Paul,

ich habe mal mit dem HMC6352 was gemacht. Dort gab es EEPROM und RAM. 
Wenn Du die Daten im EEPROM änderst passiert erst mal nichts. Das ist 
nur der Speicher. Du muss das im RAM ändern. Wenn Du es ins EEPROM 
schreibst muss Du auf jeden Fall einen Neustart machen. Die Einstellung 
wird beim Start vom EEPROM ins RAM übernommen.

Ich hoffe das Hilft Dir weiter.

Gruß
Florian

von Paul K. (paulklee)


Lesenswert?

Florian,

Vielen Dank. Du hattest natürlich völlig recht. Daran hatte ich gar 
nicht gedacht. Jetzt läuft alles wunderbar.

Tom

von Florian (Gast)


Lesenswert?

Hallo Paul (Tom),

freut mich!
Kann der 6343 eigentlich Neigungen kompensieren? Meiner war sehr 
empfindlich bei eine Abweichung von der Waagerechten. Da passten Die 
Werte überhaupt nicht mehr. Kann der Sensor auch bei 45° Neigung die 
Richtung noch ordentlich anzeigen?

Gruß
Florian

von Paul K. (paulklee)


Lesenswert?

Ja, der 6343 kompensiert die Neigungen automatisch. Das funktioniert 
auch ganz gut und war der Grund warum ich mich für das doch etwas teure 
Teil entschieden hab. Der Nachteil davon ist, daß er im Gegensatz zu 
anderen Kompasssensoren maximal 10 Hz Updaterate schafft. Ich werd 
später also sicher auf einen anderen Sensor zurückgreifen und die 
Kompensierung vom Mikrocontroller erledigen lassen.

besten Gruß

von Florian (Gast)


Lesenswert?

Hallo Paul,

wie willst Du die Neigung mit dem µC kompensieren? Ich habe dazu mal 
einen 2 Achsigen Neigungssensor an den µC angeschlossen. Das Ding ist 
aber auch nicht gerade günstig gewesen. Was kostet denn der 6343? Meinst 
Du das sich der Aufwand lohnt?

Gruß
Florian

von Paul K. (paulklee)


Lesenswert?

Florian,

Der 6343 kompensiert intern sicher auf die gleiche Art, wie auch ein µC 
dies tun kann: Er verfügt über 3 Magnetfeldsensoren die jeweils im 
Winkel von 90° zueinander (einmal gekippt und einmal geneigt) 
positioniert sind. Aus den 3 Daten lässt sich die Himmelsrichtung in 
einer Referenzebene bestimmen. Im Modellbau - Flugzeug und 
Helikopterbereich ist dies, soweit ich weiß, gängige Praxis.
Der Aufwand lohnt sich, wenn ich dafür entscheidend höhere Updateraten 
bekomme ( >30HZ ). Aber ich hab mich noch nicht nach möglichen Sensoren 
erkundigt.

Das gleiche macht übrigens 'Ocean Server Technologies' mt ihrem OS5000 
Kompass Modul. Auf der Platine sind ein 2-Achs Kompass + ein 1-Achs 
Kompass (plus Beschleunigungssensor). Mit integriertem µC wird daraus 
die Neigungskompensierte Himmelsrichtung bestimmt. Mit immerhin 40 Hz. 
Mir sind 250$ dann aber doch zuviel.

Besten Gruß

Paul

von Florian (Gast)


Lesenswert?

Hallo Paul,

habe mich mal nach dem Preis des 6343 erkundigt und bin hinten 
übergeschlagen! Du hast recht, es muss auch anders gehen! Es wurde mir 
ein HMC5843 empfohlen der auch 3 Achsen misst aber die Tilt-Compensation 
nicht selbst macht. Der kostet nur noch 1/4 dessen. Damit werde ich wohl 
auch mal mein Glück versuchen.
Viel Erfolg noch bei Deinem Projekt.

Gruß
Florian

von Wolfgang Horn (Gast)


Lesenswert?

Hi, Ihr Pioniere im unbekannten Land des HMC6343,

ich suche die undokumentierten Kommandos für die Hard-Iron Calibration 
in der XY-Ebene allein, in der horizontalen Ebene, um die vertikale 
Achse allein.
Notwendig, wenn der 3D-HMC6343 in ein Auto montiert ist und als 
2D-Kompass "missbraucht" wird.

Aus dem Datenblatt: "User Hard-Iron Calibration: The HMC6343 provides a 
user calibration routine with the 0x71 command permitting entry into the 
calibration mode and the 0x7E command to exit the calibration mode."

Funktioniert so gut oder schlecht, wie man von Hand das Gerät mit dem 
HMC darin um die Ost-West-Achse drehen kann und dann um die vertikale.

Nun will ich den HMC auch in ein richtiges Auto einbauen. Darin ist er 
zwar "überqualifiziert", aber seine Wiederverwendung wäre preiswerter 
als die Entwicklung eines Sensors mit einem anderen HMC.
Das Auto kann ich mit eingeschlagenem Lenkrad bequem um die vertikale 
Achse rotieren lassen, aber den Überschlag möchte ich gern vermeiden.
Weder um die Längsachse rollen noch den Überschlag kopfüber um die 
Querachse.

Ich habe dazu das "Hard-Iron Calibration Offset for the Z-axis" 
0x12..0x13 mal auf NULL gesetzt mit dem Erfolg: Ab diesem Schreibvorgang 
hat der HMC6343 dies Register nie wieder anders beschrieben, bei keiner 
Kalibrierung. Auch nicht nach Reset.
Wie ich Schlampigkeit in der Produktkonzeption und Dokumentation hasse!

Gibt es undokumentierte Kommandos für diesen Zweck?

Ciao
Wolfgang Horn

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.