Praktická realizácia s mikrokontrolérom ATmega8, popis obslužného programu 3D kompas, vývojová doska pre LSM303DLM
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:
Prepojenie s mikrokontrolérom:
Nastavenie registrov LSM303DLM:
Nastavenie jednotlivých registrov pre akcelerometer a magnetometer je uvedené v datasheete zariadenia. 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 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 , 3d_kompas.tar.bz2
Screen programu:
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.
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.
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.
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
Pridaj komentár
Prepáčte, ale pred zanechaním komentára sa musíte prihlásiť.