Magnetické pole zeme, kompenzácia náklonu magnetometra, problematika kalibrácia osí, popis 3D magnetometra LSM303DLM
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°.
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.
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.
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>
Pre viac info pozri datasheet.
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
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.
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á 🙂
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:
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.
[2] – Kalibrácia magnetometra
Autori:
Ondrej Závodský alias zawin & Ľubomír Pasternák alias luboss17
Prepáčte, ale pred zanechaním komentára sa musíte prihlásiť.
Pekná práca 🙂