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
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
Florian, Vielen Dank. Du hattest natürlich völlig recht. Daran hatte ich gar nicht gedacht. Jetzt läuft alles wunderbar. Tom
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
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ß
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
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.