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.

float pozycja_stopnie = pozycja_rad * 180/M_PI;

Otrzymujemy wynik będący kątem wyrażonym w stopniach pomiędzy osią X zamontowanego na module sensora a magnetyczną północą. Wynik prawdopodobnie bardzo… niedokładny. W największym stopniu przyczyną błędu będzie asymetria wskazań sensorów osi X i osi Y. Tą przyczynę fałszowania wskazań dosyć łatwo jest wyeliminować przeprowadzając wstępną kalibrację przyrządu. Polega ona na obrocie płytki sensora dookoła osi w tej samej płaszczyźnie i zapamiętania dla osi X i Y skrajnych, minimalnych i maksymalnych odczytów. Następnie należy obliczyć ich średnią arytmetyczną a otrzymane wyniki zapamiętać i stosować do korekcji danych pomiarowych Xpomiar i Ypomiar użytych do obliczeń kąta.

ofsetX =(pomiarX_max + pomiarX_min) / 2 ;
ofsetY =(pomiarY_max + pomiarY_min) / 2 ;
//korekta kalibracyjna danych pomiarowych
Ypomiar =danaY - ofsetY;
Xpomiar =danaX - ofsetX;

Kolejną przyczyną fałszowania wskazań modułu jest konieczność utrzymywania podczas pomiaru pozycji równoległej do powierzchni ziemi. Przechyły modułu będą fałszować wskazania magnetometru. Podobnie jak obecność w pobliżu przedmiotów wykonanych z materiałów ferromagnetycznych. Jest to taki sam efekt jak w przypadku tradycyjnego kompasu, gdy wychylenie igły ulega zaburzeniu w pobliżu przedmiotu wykonanego z żelaza bądź stali. Z drugiej strony ta cecha magnetometru może być wykorzystana do śledzenia pozycji sensora względem obiektów wykonanych z materiałów ferromagnetycznych, zakłócających pole magnetyczne.

Oprogramowanie do testowania modułu

Do testowania magnetometru QMC5883L opracowano oprogramowanie dla płyty rozwojowej STM32F746G-DISCO. Oprogramowanie pozwala obserwować zachowanie sensora przy różnych wartościach parametrów pomiarowych. Moduł sensora połączony jest z płytą 4 przewodami (tabela 1).

Tabela 1. Sposób połączenia modułu sensora z płytą rozwojową
Moduł magnetometru Płyta STM32F746G-DISCO
SCL linia magistrali I2C CN7-10 PB8
SDA linia magistrali I2C CN7-9 PB9
VCC zasilanie 3,3 – 5 V CN7-8 AVDD 3,3 V
GND CN7-7 GND
DRDY wyprowadzenie sygnalizacyjne Nie podłączone

Na płytce modułu powinny być zamontowane oporniki podciągające linie magistrali I2C do poziomu napięcia zasilającego i w takim przypadku nie ma potrzeby dodawania jakichkolwiek zewnętrznych elementów. Długość przewodów łączących płytę z modułem nie powinna przekraczać 20 cm.

Program testowy składa się z 3 ekranów. Zaraz po włączeniu pojawia się ekran z polami do wyświetlania danych surowych z czujników w osiach X, Y, Z. Pomiary inicjuje ustawienie widocznego na ekranie przełącznika w pozycji ON. Jeżeli brak będzie prawidłowej komunikacji z czujnikiem, wyświetlony zostanie stosowny komunikat. Jeżeli sensor zostanie wykryty i komunikacja będzie prawidłowa, zostaną wyświetlone parametry ustawień sensora, a w polach danych pojawią się mierzone przez czujniki wartości natężenia pola (fotografia tytułowa).

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
Elektronika Praktyczna
kwiecień 2020

Elektronika Praktyczna Plus lipiec - grudzień 2012

Elektronika Praktyczna Plus

Monograficzne wydania specjalne

Elektronik marzec 2024

Elektronik

Magazyn elektroniki profesjonalnej

Raspberry Pi 2015

Raspberry Pi

Wykorzystaj wszystkie możliwości wyjątkowego minikomputera

Świat Radio marzec - kwiecień 2024

Świat Radio

Magazyn krótkofalowców i amatorów CB

Automatyka, Podzespoły, Aplikacje marzec 2024

Automatyka, Podzespoły, Aplikacje

Technika i rynek systemów automatyki

Elektronika Praktyczna marzec 2024

Elektronika Praktyczna

Międzynarodowy magazyn elektroników konstruktorów

Elektronika dla Wszystkich kwiecień 2024

Elektronika dla Wszystkich

Interesująca elektronika dla pasjonatów