Magnetometr QMC5883 jako kompas elektroniczny

Magnetometr QMC5883 jako kompas elektroniczny

Moduł z QMC5883L potrafi mierzyć słabe, stałe pola magnetyczne w trójwymiarowym układzie odniesienia. Dzięki wysokiej czułości jest w stanie reagować na ziemskie pole magnetyczne. Takie właściwości pozwalają zastosować moduł magnetometru do lokalizacji przestrzennej, jako kompas czy rejestrator zmian wywoływanych w jego pobliżu przez ruch obiektów zawierających materiały ferromagnetyczne.

QMC5883L to funkcjonalny odpowiednik układu HMC5883L firmy Honeywell. Po zaprzestaniu produkcji przez Honeywell-a licencję kupiła firma QST i zaczęła produkcję swojej wersji QMC5883L. Wywołało to pewne zamieszanie wśród użytkowników, ponieważ układy choć podobne różnią się jednak w szczegółach obsługi. W dodatku podzespoły montowane na płytkach modułów oznaczone są jako DB5883 (lub DA5883) co dodatkowo zwiększa zamieszanie.

Korzystając z karty katalogowej układu QMC5883L można ustalić, że jego parametry są następujące:

  • całkowity zakres pomiarowy sensora: ±8 Gauss,
  • zakres precyzyjnego pomiaru: ±2 Gauss,
  • ilość pomiarów na sekundę: do wyboru 10/50/100/200,
  • ilość próbek używanych do uśredniania wyniku: do wyboru 64/128/256/512,
  • komunikacja: magistrala I2C,
  • zasilanie: 2,16...3,6 V,
  • pobór prądu: zależnie od ustawionej ilości pomiarów na sekundę od 100 do 850 mA.
  • niektóre rodzaje modułów mają także zamontowane dodatkowe układy dopasowujące poziomy sygnałów. W takim przypadku możliwa jest praca z zasilaniem i sygnałami magistrali w zakresie od 3,3 do 5 V.

Sposób działania i sterowanie magnetometrem

Na rysunku 1 pokazana została wewnętrzna budowa układu QMC5883L. Rolę elementów pomiarowych pełnią 3 wewnętrzne czujniki magneto-rezystywne. Napięcie z czujników proporcjonalne do natężenia pola magnetycznego, jest sekwencyjnie podawane na wejście przetwornika analogowo-cyfrowego. Wynik przetwarzania zostaje zapisywany w rejestrach dla każdego czujnika oddzielnie. Zawartość rejestrów można odczytać poprzez magistralę I2C. Wbudowany sensor temperatury zależnie od jej poziomu koryguje wynik pomiarów.

Rysunek 1. Budowa sensora QMC5883L

Pracę magnetometru synchronizuje sygnał zegarowy wytwarzany przez wewnętrzny generator. O zakończeniu cyklu pomiarów i uaktualnieniu danych informuje ustawienie flag w dostępnym do odczytu rejestrze stanu sensora. Czujniki magneto-rezystywne rozmieszczone są w obudowie tak, aby umożliwić pomiar pola w 3 płaszczyznach X, Y, Z. Na rysunku 2 zaznaczono osie pomiarów względem obudowy.

Rysunek 2. Osie pomiarów sensora

Po włączeniu zasilania układ magnetometru znajduje się w stanie wstrzymania pobierając minimalny prąd rzędu 3 mA. W tym trybie oczekuje na transmisję magistralą I2C, która zmieni ustawienia rejestrów i zainicjuje pomiary. Dołączony do magistrali jako slave, czujnik reaguje na adres 0x0D (zapis 7 bitowy). W trybie zapisu każda transmisja rozpoczyna się sekwencją Start, adresem slave z wyzerowanym 8 bitem jako dopełnieniem adresu, wysyłany jest bajt z numerem rejestru i bajt danych zakończony sekwencją Stop. W trybie odczytu po sekwencji Start, wysłaniu adresu slave z wyzerowanym 8 bitem i bajtu z numerem rejestru do odczytu, master ponownie wysyła sekwencję Start i adres slave tym razem z ustawionym 8 bitem. Czujnik rozpoczyna przesyłanie zawartości rejestru.

Rejestry magnetometru

Czujnik reaguje na adresy rejestrów od 00H do 0DH (heksadecymalnie).

  • 00H – 05H rejestry danych pomiarowych z czujników magneto-rezystywnych. Dane z każdego czujnika zajmują 2 rejestry, w kolejności: XYZ. Rejestr o młodszym adresie zawiera bity b.7 – b.0, w kolejnym rejestrze są bity b.15 – b.8. Dane są zapisane w kodzie uzupełnienia do 2, b.15 ustawiony oznacza wartość ujemną. Rejestry danych są tylko do odczytu. Możliwy jest odczyt grupowy wszystkich 6 rejestrów.
  • 06H rejestr flag statusu, rejestr tylko do odczytu,
    • b.0 (DRDY) flaga sygnalizuje umieszczenie nowych danych w rejestrach. Flaga jest automatycznie kasowana po odczycie rejestrów danych 00H – 05H,
    • b.1 (OVL) gdy flaga jest ustawiona sygnalizuje, że dane w rejestrach mogą być błędne. Automatycznie kasowana gdy w rejestrach danych czujnik umieści nowe dane bez błędu,
    • b.2 (DOR) flaga sygnalizuje utracenie nie odczytanych danych przez nadpisanie nowymi wynikami pomiarów. Flaga jest automatycznie kasowana po odczycie rejestrów danych pomiarowych.
  • 07H – 08H rejestry wewnętrznego czujnika temperatury. Młodszy i starszy bajt temperatury w kodzie uzupełnienia do 2, rejestry tylko do odczytu,
  • 09H rejestr sterujący 1, rejestr do zapisu i odczytu,
    • b.1-0 (MODE) bity sterujące trybem pracy: 00 – tryb wstrzymania z obniżonym poborem mocy, 01 – tryb normalnych pomiarów,
    • b.3-2 (ODR) bity wyboru częstotliwości pomiarów: 00 – 10 Hz, 01 – 50 Hz, 10 – 100 Hz, 11 – 200 Hz,
    • b.5-4 (RNG) bity wyboru zakresu pomiarowego: 00 – 2G (Gauss), 01 – 8G,
    • b.7-6 (OSR) wybór ilości kolejnych pomiarów do uśrednienia wyniku: 00 – 512, 01 – 256, 10 – 128, 11 – 64.
  • 0AH rejestr sterujący 2, rejestr do zapisu i odczytu,
    • b.0 (INT_ENB) gdy bit wyzerowany, wyjście DRDY czujnika będzie sygnalizowało nowe dane do odczytu (odpowiednik flagi DRDY). Wyjście pozostaje w stanie wysokim dopóki nowe dane nie zostaną odczytane.
    • b.6 (ROL_PNT) gdy bit ustawiony włączony tryb automatycznego przewijania adresu rejestru do odczytu w zakresie 00H – 06.
    • b.7 (SOFT_RST) programowy reset wpisujący do rejestrów wartości predefiniowane.
  • 0BH rejestr Period, rejestr do zapisu i odczytu, typowa wartość to 1.
  • 0DH rejestr identyfikacji układu, rejestr tylko do odczytu, odczytywana wartość to FFH.

Przykładowa sekwencja uruchomienia pomiarów po podłączeniu czujnika do zasilania z ustawieniami: OSR=512, RNG=8G, ODR=200 będzie wyglądała tak: zapis do rejestru 0BH wartości 0x01, zapis do rejestru 09H wartości 0x1D. Czujnik rozpocznie pomiary i umieszczanie w rejestrach danych wyników pomiarów.

Użycie magnetometru jako kompasu

Dzięki wysokiej czułości i możliwości dokonywania pomiarów w 3 płaszczyznach można moduł magnetometru zastosować do detekcji północnego bieguna magnetycznego czyli po prostu jako kompas. W dobie powszechnej dostępności GPS-u i darmowych aplikacji symulujących kompas w komórce nie brzmi ekscytująco. Ale niewielkie rozmiary modułu: 15×13 mm, niskie zużycie energii i względna prostota obliczeń pozwalają go wykorzystać w urządzeniach i automatach do lokalizacji i określania kierunku ruchu.

Do obliczeń wykorzystuje się pomiary pola w płaszczyźnie X i Y. Podstawiając zmierzone wartości do wzoru:

float kierunek_rad = atan2((float)Ypomiar, (float)Xpomiar);

Otrzymujemy odchylenie osi X sensora od linii pola magnetycznego wskazujących północ. Otrzymany kąt jest wyrażony w radianach. Jeżeli chcemy na końcu obliczeń otrzymać wynik w stopniach kątowych z przedziału 0...360° należy skorygować wynik w radianach tak, aby mieścił się w zakresie 0p – 2p (Podstawiony do obliczeń symbol M_PI oznacza w języku programowania C nieśmiertelną stałą p czyli 3,14… z odpowiednią dokładnością po przecinku).

if (kierunek_rad < 0){
kierunek_rad += 2 * M_PI;
}
if (kierunek_rad > 2 * M_PI){
kierunek_rad -= 2 * M_PI;
}

Na koniec zamieniamy otrzymany wynik z radianów na bardziej czytelne stopnie kąta pełnego.

Drugi ekran służy do zmiany ustawień parametrów sensora (fotografia 1). Na listach przewijanych można wybrać ustawienia: częstotliwości pomiarów, ilości pomiarów używanych do uśrednienia wyniku i zakresu pomiarowego. Zmienione ustawienia przesyłane są do sensora natychmiast po wyborze.

Fotografia 1. Ekran nastaw parametrów

Trzeci ekran nazwany testem pozycjonera (fotografia 2), wykorzystuje odczyty z sensora do lokalizacji pozycji modułu względem północnego bieguna magnetycznego Ziemi. Ten prosty kompas działa przy ustawionym zakresie pomiarowym 2Gs. Dla poprawienia dokładności wskazań, przed pomiarami konieczna jest kalibracja.

Fotografia 2. Ekran kompasu-pozycjonera

Po ustawieniu przełącznika kalibracji w pozycję ON, należy moduł obrócić dookoła osi o 360° lub w lewo i prawo o 180°. W czasie kalibracji moduł powinien być cały czas ustawiony równolegle do powierzchni ziemi. Kalibrację kończy ustawienie przełącznika w pozycji OFF. Z prawej strony wyświetlone zostaną uzyskane wyniki kalibracji: wartości minimalne i maksymalne pomiarów czujników X, Y, Z. Wyniki przeprowadzonej kalibracji używane są do korekcji bieżących odczytów i obliczana kąta pomiędzy biegunem północnym a zaznaczoną na płytce modułu osią X.

Ryszard Szymaniak
biuro@ars.info.pl

Artykuł ukazał się w
Kwiecień 2020
Zobacz też
Elektronika Praktyczna Plus lipiec - grudzień 2012

Elektronika Praktyczna Plus

Monograficzne wydania specjalne

Elektronik lipiec 2020

Elektronik

Magazyn elektroniki profesjonalnej

Raspberry Pi 2015

Raspberry Pi

Wykorzystaj wszystkie możliwości wyjątkowego minikomputera

Świat Radio lipiec 2020

Świat Radio

Magazyn użytkowników eteru

APA - Automatyka Podzespoły Aplikacje lipiec 2020

APA - Automatyka Podzespoły Aplikacje

Technika i rynek systemów automatyki

Elektronika Praktyczna lipiec 2020

Elektronika Praktyczna

Międzynarodowy magazyn elektroników konstruktorów

Praktyczny Kurs Elektroniki 2018

Praktyczny Kurs Elektroniki

24 pasjonujące projekty elektroniczne

Elektronika dla Wszystkich czerwiec 2020

Elektronika dla Wszystkich

Interesująca elektronika dla pasjonatów