- SVETELEKTRO - https://svetelektro.com -

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

Praktická realizácia s mikrokontrolérom ATmega8, popis obslužného programu 3D kompas, vývojová doska pre LSM303DLM

Popis zapojenia:


Na testovanie modulu LSM303DLM som vyrobil DPS, kde som umiestnil odporúčané súčiastky podľa datasheetu [1]. Doštička má rozmery 25x20mm a je vyrobená na jednostrannom plošnom spoji. Kedže modul LSM303DLM nemá centrovací pad, treba si dať extra záležať na správnom zaspájkovaní modulu.

Z dosky je vyvedených 5 pinov v poradí:
VCC,GND, SCL,SDA, DRDY_Y

Ďalšie 3 vyvedené piny sú výstupy prerušení na zvolenú akciu. Funkcie prerušenia som však zatiaľ netestoval.

Rozsah napájacieho napätia pre LSM303DLM môže byť v rozsahu 2,8-3,6V, pričom napájacie napätie mikrokontroléra musí byť rovnaké ako napätie modulu.

Testovacia DPS komunikuje s mikrokontrolérom Atmega8 cez I2C komunikačné rozhranie. Na prepojenie modulu s mikrokontrolérom využívam 4 vodiče, pin DRDY_M nevyužívam.

Adresy zariadení:
Závisia od toho či chceme do zariadenia zapisovať alebo z neho čítať. V prípade akcelerometra závisí ešte adresa aj od nastavenia jumpera SA0. Tento jumper využívame vtedy ak chceme použiť 2 akcelerometre na jednej I2C zbernici. Adresy sú uvedené v nasledovných tabuľkách.

Adresy akcelerometra v závislosti od pinu SA0:

[2]

Adresy magnetometra:

[2]

Schéma zapojenia:

[3]

DPS:

[4]

Vyrobená DPS:

[5]

Prepojenie s mikrokontrolérom:

[6]

Program pre mikrokontrolér ATmega8:


Popis programu:
Program najskôr inicializuje rozhrania I2C a UART a nastaví registre magnetometra a akcelerometra. Následne sa v nekonečnom cykle čítajú údaje z 3 osí akcelerometra a magnetometra a tieto surové dáta sa pošlú cez UART do PC kde sa v obslužnom programe 3D kompas spracujú. S týmito surovými dátami sa ďalej pracuje aj v mikrokontroléri, kde sa pomocou výpočtov uvedených v 1. časti seriálu [7] získa azimut s kompenzovaným náklonom a náklony Pitch a Roll. Údaje sa následne vypíšu na displej 2x16znakov.
Pre správne zobrazenie azimutu na LCD displeji treba však do programu zapísať kalibračné konštanty pre magnetometer, ktoré môžeme získať napr. z obslužneho programu 3D kompas.

Nastavenie registrov LSM303DLM:

Nastavenie jednotlivých registrov pre akcelerometer a magnetometer je uvedené v datasheete zariadenia [1]. Ja popíšem len tie, ktoré som využíval.

Akcelerometer:
Pri akcelerometri som nastavil register:
CTRL_REG1_A (20h) – nastavenie akcelerometra do „Normal Mode“, obnovovacia frekvencia na 50Hz a povolenie všetky 3 osi. Zapísal som teda 0x27h.

Magnetometer:
Tu som nastavil viacero registrov:
CRA_REG_M (00h) – nastavenie obnovovacej frekvencie na 7,5Hz – 0x80h.
Pozn: Nižšia obnovovacia frekvencia magnetometra zlepšuje jeho stabilitu.

CRB_REG_M (01h) – nastavenie citlivosti magnetometra na +-1,9gauss (0x40h)
Pozn.: Použil som najväčšiu možnú citlivosť, pri nastavení 1,3gauss už dáta z osí pretekajú.

Čítanie dát z registrov:
Čítanie dát prebieha hromadne tak, že zvolíme počiatočnú adresu registra kde sa nachádzajú dáta prvej osi a postupne prečítame všetky bity v ktorých sa nachádzajú dáta z osí.

Pozor! Pokiaľ chceme pri akcelerometri prečítať všetky registre naraz, musíme k počiatočnej adrese registra pripočítať hodnotu 0x80. Teda ak čítame dáta z akcelerometra štartovacia adresa bude 0xa8 a pre magnetometer 0x03.

Projekt magnetometra pre Atmega8 vytvorený v prostredí AVR studia si môžete stiahnuť z nasledovného odkazu: Magnetometer.zip

Youtube video: Výpis azimutu a náklonov na displej:

Youtube video: Práca v obslužnom programe:

Program 3D Magnetometer:

Program neslúži len na kalibráciu, ale aj ako kompas, čiže magnetický sever ukazuje výchylkou strelky kompasu a takisto aj po stranách kompasu sú vodováhy, ktoré ukazujú náklon v smere osi x a y – teda uhly pitch a roll.

Hodnoty magnetometra sú prepočítavané na jednotky[uT] a hodnoty akcelerometra na jednotku tiažového zrýchlenia [m/s^2].

Program funguje nasledovne:
-> pri spustení skontroluje či v jeho adresári sa nachádza súbor cals.conf, ak áno zoberie kalibračné konštanty z tohto súboru a aplikuje ich v programe. Konštanty v tomto súbore sa zapisujú vo formáte: calx;caly;calz – oddelené bodkočiarkami

-> MCU Atmega8 posiela reťazec s NEKALIBROVANÝMI hodnotami magnetometra a akcelerometra v tvare: „mag.x;mag.y;mag.z;acc.x;acc.y;acc.z

-> z tohto reťazca si program vyparsuje do premenných jednotlivé hodnoty, skalibruje ich podľa vopred zadaných konštánt a vykoná potrebné výpočty pre zobrazenie azimutu a náklonov.

Program existuje žiaľ zatiaľ iba vo verzii pre Linux – konkrétne pre systémy založené na distribúcii Debian. Na verzii pre Windows sa pracuje a bude dodatočne doplnená do článku.

Zdrojové kódy a program si môžete stiahnúť tu: 3d_kompas_zdrojak.tar.bz2 [8], 3d_kompas.tar.bz2 [9]

Screen programu:

[10]

Kalibrácia v programe 3D kompas:
Po kliknutí Kalibrácia v menu Možnosti sa otvorí nové okno, ktoré slúži na kalibráciu. V ľavej dolnej časti sú zobrazené aktuálne nastavené kalibračné konštanty a hodnoty osí po kalibrovaní. V pravej dolnej časti si môžeme kalibračné konštanty zmeniť ich zadaním a potvrdením tlačidla (nezapíšu sa do súboru cals.conf).

V hornej časti sa nachádza časť pre kalibráciu. Naľavo sa vypisujú nekalibrované hodnoty, tlačidlami + a – sa zaklikne buď maximálna alebo minimálna hodnota (pri kalibrácii sa musia nastaviť obidve) a napravo sa vypíše vypočítaná kalibračná konštanta. Tlačidlom „Nastaviť nové“ sa kalibračné konštanty aktivujú. Neuložia sa do súboru cals.conf! Treba ich tam zadať ručne.

[11]

No a teraz konečne k samotnej kalibrácii. Ja kalibráciu vykonávam tak, že magnetometer dám do približne vodorovnej polohy na stôl (feromagnetické materiály vzdialené aspoň 20-30 cm od magnetometra – je na to strašne citlivý) a hľadám maximálnu hodnotu na x-ovej osi (ukazuje okno kalibrácia – os x), ktorá by mala byť približne na sever. Po jej nájdení zakliknem tlačidlo (+) pre os x. Túto polohu si označím, napr. perom potiahnem vedľa neho čiaru (samozrejme nie priamo na stôl nakresliť 🙂 na nejaký podklad, ktorý je zafixovaný so stolom – napr. papier). Pre lepšie pochopenie pozri obrázok.

[12]

Táto čiara sa využíva pri kalibrácii všetkých troch osí. Teraz otočíme magnetometer o 180° a priložíme k čiare. Plošný spoj na ktorom je magnetometer by mal mať kolmé strany. Ak nie tak sa nejak snažíme dodržať uhol. Po natočení treba stlačiť tlačidlo (–) pre os x a program vypočíta konštantu pre kalibráciu osi x.

Pre kalibráciu osi y otočím magnetometer o 90° takisto k čiare, ktorú máme vyznačenú -> stlačiť (+) pre os y -> otočiť o 180° -> stlačiť (-) pre os y a vypočíta sa konštanta pre kalibráciu osi y.

[13]

Z-tova os sa kalibruje o čosi ťažšie. Magnetometer necháme v polohe napr. ako pri osi y pre max. hodnotu, ale robíme náklon v smere osi x. Nájde sa maximálna hodnota -> stlačiť (+) -> otočiť o 180° to znamená ,že so stolom zviera cca ten istý uhol a je otočený opačnou stranou hore -> stlačiť (-) a urobí sa výpočet konštanty pre os z.

Konštanty, ktoré si takto určíme, môžeme potvrdiť tlačidlom „Nastaviť nové“, poprípade prepísať do konfiguračného súboru cals.conf.

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

Ako sa vám páčil tento článok?
  • Páči sa mi (0)
  • Súhlasím (0)
  • Zábavné (0)
  • Informatívne (0)