Práca s elektronickým kompasom – 1. časť

Magnetické pole zeme, kompenzácia náklonu magnetometra, problematika kalibrácia osí, popis 3D magnetometra LSM303DLM

Magnetické pole zeme:
Vektor He vyjadruje celkovú intenzitu a smer mag. poľa zeme. Možno ho rozdeliť na horizontálnu zložku Heh, ktorá smeruje na magnetický severný pól, a vertikálnu zložku Hez, ktorá smeruje kolmo do zeme.
Azimut α – je uhol medzi smerom pohybu zariadenia Hex a horizontálnou zložkou mag. poľa Heh a je ho možné vypočítať ako:
α = atan(Hey/Hex), kde Hey je horizontálna zložka v ose Y a Hex je horizontálna zložka v ose X.

Pri zisťovaní vektora mag. poľa zeme sa stretávame s pojmami ako Inklinácia a Deklinácia. Deklinácia značí rozdiel v stupňoch medzi geografickým severným pólom a vektorom horizontálnej zložky mag. poľa. Inklinácia zas udáva pod akým uhlom vzhľadom na vodorovnú rovinu smeruje vektor mag. poľa do zeme. V oblasti rovníka je inklinácia blízka 0°, naopak na póloch smeruje takmer kolmo do zeme. V našich zemepisných šírkach je inklinácia okolo 60°.

mag_vector

Obr č.1 (Prevzatý z [1])

Intenzite mag. poľa zeme je v oblasti Slovenska na úrovni približne 47uT, najväčšia hodnota je v oblasti mag. pólov asi 62uT, najmenšia v oblasti rovníka asi 23uT.
Poloha magnetických pólov zeme sa neustále mení. Aktuálna vzdialenosť medzi geografickými a magnetickými pólmi zeme je približne 1600km. Taktiež sa neustále mení aj intenzita mag. poľa zeme v rozsahu desiatok až stoviek nT a je ovplyvňovaná hlavne aktivitou na slnku. Ako sprievodný jav je polárna žiara objavujúca sa v blízkosti pólov.

Kompenzácia náklonu magnetometra:

Keďže vektor mag. poľa má určitú inklináciu je možné správne vypočítať azimut len v prípade, keď je kompas na vodorovnom povrchu! Pri náklone vnášame chybu do merania tým, že sa k jednotlivým osiam pripočíta aj hodnota vertikálnej zložky mag. poľa zeme. Túto chybu možno korigovať pomocou akcelerometra, ktorý sa z tohto dôvodu integruje do jedného čipu spolu s magnetometrom.

Pri korekcií náklonu musíme najskôr z veľkosti jednotlivých osí akcelerometra vypočítať uhol zdvihu (Pitch) a Bočný náklon (Roll) (viď obrázok č.2), a vypočítať ich podľa nasledovného vzťahu:
pitch = atan (x / sqrt(y^2 + z^2))
roll = atan (y / sqrt(z^2 + z^2))

Pozn.: V programovacom jazyku C je výsledok funkcie atan v radiánoch.

 

Prevzatý z [1]

Obr. č.2 (Prevzatý z [1])

Potom pomocou nasledovných vzorcov vypočítame kompenzované horizontálne zložky Mx a My magnetometra:
Mx = m.x*cos(Pitch) + m.z*sin(Pitch)
My = m.x*sin(Roll)*sin(Pitch) + m.y*cos(Roll) – m.z*sin(Roll)*cos(Pitch)

Na záver z týchto kompenzovaných zložiek vypočítame azimut pomocou goniometrickej funkcie atan (Obr. č.3) vzťahom:
α = atan(My/Mx)

Pozn.: Pri výpočte azimutu v programovacom jazyku C buď rozdelíme kružnicu na 4. kvadranty a pomocou podmienok pripočítame uhly 90,180 alebo 270° ku výsledku v závislosti od znamienka, alebo využijeme funkciu atan2, ktorá počíta atan pre všetky kvadranty v rozsahu <-180 : 180>

Obr. č.3

Obr. č.3

Popis magnetometra LSM303DLM:

Tento modul vyrába firma ST a skrýva v sebe 3D magnetometer a 3D akcelerometer. Údaje z magnetometra a akcelerometra sa prenášajú digitálne pomocou I2C zbernice. Vyrába sa v puzdre LGA-28L. Vnútornú schému obvodu vidno na obr.č.4.

Pre viac info pozri datasheet.

Obr.č.4 (prevzaté s datasheetu obvodu)

Obr.č.4 (prevzaté s datasheetu obvodu)

Špecifikácia:
 Rozsah napájacieho napätia – 2,5 až 3,3V
 Meranie magnetického pola a akcelerácie v troch osiach
 Nastaviteľný rozsah magnetometra (Full Scale) 1,3 až 8,1gauss (1gauss = 100uT)
 Nastaviteľný rozsah akcelerometra (Full Scale) ±2 g/±4 g/±8 g (1g = 9,81m/s2)
 I2C komunikačné rozhranie
 Programovateľné prerušenie pri detekcii pohybu alebo voľného pádu
 Maximálne rozlíšenie (LSB) 5mgauss (500nT)
 Rozmery 5mmx5mmx1mm

Kalibrácia osí magnetometra:

Kalibrácia magnetometra je najdôležitejšia vec pred jeho samotným používaním. Keďže výrobcovia pri výrobe modulu nakalibrovali iba jeho akcelerometer, tak s kalibráciou magnetometra si budeme musieť poradiť sami.
Chyba spočíva v tom, že jednotlivé osi magnetometra majú offset (posunutie nuly). Tento offset môžeme upraviť pričítaním (odčítaním) kalibračných konštánt, ktoré sa odlišujú pre každý vyrobený kus.
Možností kalibrácií je niekoľko. Ja sa budem snažiť popísať a vysvetliť asi tu najjednoduchšiu. [2]
Takže na začiatok, pre lepšiu predstavivosť som spravil experiment, kde som zo svojho magnetometra vyčítal niečo cez 4000 hodnôt (každej osi) cez sériovu linku do PC a tieto hodnoty som vyhodnotil v Exceli do grafov nasledovne.

Obr. č.5.: Závislosť osi X od Y:

Obr. č.5.: Závislosť osi X od Y

Z grafov vidno offset osi x a y. X-ová os je na tom najlepšie (u môjho magnetometra) jej offset a teda jeho kalibračná konštanta sa dá určiť nasledovne:

minimálna hodnota odčítaná z grafu (cca) pre os x: -220
maximálna hodnota odčítaná z grafu (cca) pre os x: 200
priemer (abs. hodnôt): 210,

čo je hodnota, ktorá pri správnej kalibrácii bude minimálna (-210) a maximálna (210). Aby sme toto dosiahli musíme teda k číslu -220 a 200 pričítať číslo 10 čo je vlastne offset osi x. Teda os je posunutá doľava o hodnotu 10. Číslo desať je teda aj naša kalibračná konštanta pre os x.

Podobne určíme kalibračnú konštantu aj pre os y:

minimálna hodnota odčítaná z grafu (cca) pre os y: -275
maximálna hodnota odčítaná z grafu (cca) pre os y: 150
priemer (abs. hodnôt): 213 (po zaokrúhlení)
kalibračná konštanta: -275 + 213 = -62; 213-150 = 63 => 63

po kalibrácií sa max. hodnota bude rovnať: 150+63 = 213 a minimálna hodnota -275+63 = -214 ; zaokrúhľovaním vzniká určitá chyba, ale tá nie je až taká hrozná :)

Obr. č.6: Závislosť osi X od Z

Obr. č.7: Závislosť osi Y od Z

Ako vidno z predchádzajúcich dvoch závislostí najhoršie je to u môjho magnetometra s osou Z-ovou. Tá ma najväčší ofset.

Výpočet kalibračnej konštanty pre os z:

minimálna hodnota odčítaná z grafu (cca) pre os z: -406
maximálna hodnota odčítaná z grafu (cca) pre os z: 2
priemer (abs. hodnôt): 204 (po zaokrúhlení)
kalibračná konštanta: -406 + 204 = -202; 204-2 = 202 => 202

Po dobrej kalibrácii by sa tieto grafy po preložení mali prekrývať.
Na ukážku uvádzam prekrytie grafov pri nekalibrovanom magnetometri:

Pri kalibrovanom magnetometri – kde som kalibračné konštanty pričítal k nekalibrovaným hodnotám:

cal1

Po kalibrácii v MCU:

cal2

Takáto metóda kalibrácie je však príliš zdĺhavá a preto som sa rozhodol spraviť program s GUI v Qt, kde si jednoducho takýto magnetometer môžeme nakalibrovať. O tom však až v budúcej časti. V nej si aj ukážeme praktickú realizáciu magnetometra s mikrokontrolérom Atmega16.

Použítá literatúra:

[1] – Diplomová práca – SNÍMAČE PRO URČOVÁNÍ NATOČENÍ V MOBILNÍ ROBOTICE

[2] – Kalibrácia magnetometra

Autori:
Ondrej Závodský alias zawin & Ľubomír Pasternák alias luboss17

Pridaj komentár

Vaša e-mailová adresa nebude zverejnená. Vyžadované polia sú označené *

Môžete použiť tieto HTML značky a atribúty: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>