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

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Gość
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • 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.