Svetelektro.com

Svetelektro.com

Meno:
Heslo:

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

Kategória: Mikroprocesory | 03.04.2012 | Autor: zawin & luboss17 

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. 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:


Adresy magnetometra:


Schéma zapojenia:


DPS:


Vyrobená DPS:


Prepojenie s mikrokontrolérom:


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 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. 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 , 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
 

19.11.2016

ČASOMÍRA HASIČI V.02

 3022   8  Hodnotenie: 5Hodnotenie: 5Hodnotenie: 5Hodnotenie: 5Hodnotenie: 5

23.05.2012

Hack domového telefónu

 12667   8  Hodnotenie: 4Hodnotenie: 4Hodnotenie: 4Hodnotenie: 4Hodnotenie: 4

18.03.2015

Program PID regulátoru mikropájky

 7121   2  Hodnotenie: 4.8333333333333Hodnotenie: 4.8333333333333Hodnotenie: 4.8333333333333Hodnotenie: 4.8333333333333Hodnotenie: 4.8333333333333

Priemerné hodnotenie: 5
Hlasov: 3

Vynikajúci

Zvoľte počet hviezdičiek:
Vynikajúci
Veľmi dobrý
Dobrý
Priemerný
Zlý



Za obsah komentárov je zodpovedný užívateľ, nie prevádzkovateľ týchto stránok.
Autor stránky je Ondrej Závodský(zawin), o graficky design sa stará Ľuboš Fabo(BUFU).

TOPlist

Powered by Copyright © UNITED-NUKE CMS. All Rights Reserved.
Čas potrebný k spracovaniu stránky 0.01 sekúnd