Skocz do zawartości

Czujnik HMC5883L Kompensacja przechyleń


Mateusz

Pomocna odpowiedź

Witam.

Czy ma ktoś pomysł jak mógłbym zrobić kompensację przechyleń w czujniku HMC5883L to co znalazłem na necie nie za bardzo działa.

Układ pochylany będzie tylko w jednej osi, czyli wokół osi y. Znany jest kąt przechylenia i wartości x,y,z z kompasu.

Nie za bardzo rozumiem pomiary z x, wg. mnie powinno być tak, że wartość x jest taka sama dla przechylenia +30 stopni i -30 stopni. Niestety tak nie jest.

W załączniku jest plik z pomiarami w excelu, pomiary były robione z płytką skierowaną cały czas w tą samą stronę tak więc kąt powinien być taki sam cały czas.

Ja przeliczałem to w ten sposób:

int getHeadingHMC_TiltComp(float pitch, float roll)
{
uint8_t raw_xh = 0;
uint8_t raw_xl = 0;

uint8_t raw_yh = 0;
uint8_t raw_yl = 0;

uint8_t raw_zh = 0;
uint8_t raw_zl = 0;
long x,y,z;

i2c();

i2c_rep();

x = raw_xl|(raw_xh<<8);
y = raw_yl|(raw_yh<<8);
z = raw_zl|(raw_zh<<8);

//float err = 0.5 * pitch;

double Xh = (double)x * cos(M_PI*pitch/180) + (double)z * sin(M_PI*pitch/180);
double Yh = (double)y;
int headingDegrees = (double)(atan2(Yh,Xh)* 57 + 180);

char buf[40];
sprintf(buf,"%4.i : %4.i : %4.i : %4.i\n",(int)x, (int)y, (int)z, (int)pitch);
USART_send_string(buf);

return headingDegrees;
}

Ale nie za bardzo się to sprawdziło.

Pomyślałem żeby zrobić kalibrację czujnika ale nie bardzo wiem jak ona działa. Mam taki kod:

void HMC5883L_ScaleFactorCalib(void)
{
int16_t raw_x = 0;
int16_t raw_y = 0;
int16_t raw_z = 0;

int err=i2c();

i2c();

i2c();


i2c();

i2c_rep();

char buf[40];
sprintf(buf,"Calib: %4.i : %4.i : %4.i\n",raw_x, raw_z, raw_y);
USART_send_string(buf);

return 0;
}	

Dostaję jakieś tam wyniki ale nie wiem co z nimi zrobić 🙂.

pomiary.xls

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.