Operácie

Navigačná aplikácia s kompasom HMC5883L

Zo stránky SensorWiki

Autori: Peter Griger, Ivan Beliansky
Študijný odbor: Aplikovaná mechatronika a elektromobilita 1. Ing. (2016)

Zadanie

Pomocou troj osého magnetometra HMC5883L vytvorte aplikáciu ktorá bude slúžiť ako smerový navigačný systém.

HMC5883L PCB layout

Body zadania

  • K použitému senzoru nájdite datasheet a preštudujte jeho štruktúru, spôsob pripojenia, komunikácie, a čítania dát.
  • Na základe predošlých vedomostí navrhnite spôsob pripojenia k vhodnej riadiacej jednotke.
  • Napíšte program v prostredí Arduino zabezpečujúci:
    • Komunikáciu so snímačom
    • Načítanie a spracovanie potrebných dát
    • Vyhodnotenie a prezentácia údajov v reálnom čase
  • Dokumentáciu odovzdajte prostredníctvom tejto wiki stránky.

Literatúra

Analýza

Použitý senzor

HMC5883L Bloková schéma
HMC5883L Pinout

HMC5883L je senzor na snímanie slabých magnetických poli využívaný v magnetografii alebo ako kompas. Obsahuje trojicu magnetorezistívnych senzorov HMC118X, obvody pre spracovanie výsledkov a úpravu vlastností senzora, I2C rozhranie a 12 bitový analógovo-číselný prevodník ktorý zabezpečuje smerovú presnosť 1° až 2° pri rozsahu ±8Gs.Využíva jav anizotropickej magnetorezistivity čo zabezpečuje linearitu a vysokú citlivosť pre každú os. HMC5883L je vyrábaný firmou Honeywell v púzdre LPCC-16 s rozmermi 3,0mm x 3,0mm x 0,9mm.

Pinout

C Pin Funkcia
1 SCL Hodinový signál I2C zbernice
2 VDD Napájacie napätie
3 NC Nepripojené
4 S1 Napätie IO obvodov
5 NC Nepripojené
6 NC Nepripojené
7 NC Nepripojené
8 SETP Set/Reset
9 GND Pripojenie na zem
10 C1 Stabilizačný kondenzátor
11 GND Pripojenie na zem
12 SETC Set/Reset kondenzátor
13 VDDIO Napätie 1.71V IO obvodov
14 NC Nepripojené
15 DRDY Pin prerušenia
16 SDA Dátová linka I2C zbernice

Mapa registrov

Adresa Názov Prístup
0h00 Konfiguračný register A Read/Write
0h01 Konfiguračný register B Read/Write
0h02 Register nastavenia módu merania Read/Write
0h03 Dáta osi X MSB Read
0h04 Dáta osi X LSB Read
0h05 Dáta osi Z MSB Read
0h06 Dáta osi Z LSB Read
0h07 Dáta osi Y MSB Read
0h08 Dáta osi Y LSB Read
0h09 Status register Read
0h10 Identifikačný register A Read
0h11 Identifikačný register B Read
0h12 Identifikačný register C Read

I2C/TWI zbernica

Hodnoty magnetickej indukcie v jednotlivých osiach sú dostupné cez I2C rozhranie čím sa senzor stáva vhodným pre priame pripojenie k mikropočítaču. Hodnoty magnetickej indukcie je možné čítať cez I2C s pravidelnou frekvenciou alebo pri vyvolanom prerušení, podľa nastaveného módu merania.

Pri I2C komunikácii sa používajú dva signály "Serial Clock Line (SCL)" a "Serial Data Line (SDA)". SDA je obojsmerná linka používaná na posielanie a príjem dát z/na rozhranie. Pri prenose sa počíta z externými "pull-up" registrami na SDA a SCL linke. Keď je linka voľná obidva signály sú na vysokej úrovni. Slave adresa akcelerometra je 0x1E. Viac o I2C prenose je uvedené v I2C zbernica.


Postup prenosu jedného bajtu

  • Master vyšle štartovaciu podmienku na adresu HMC5883L (0x1E) s RW bitom nastaveným na nulu pre zápis, a MMA8491Q odošle potvrdenie (ACK bit).
  • Potom Master vyšle adresu registra, z ktorého chce čítať a HMC5883L pošle potvrdenie (ACK bit).
  • Master vyšle opakovanú štartovaciu podmienku a potom adresuje HMC5883L s RW bitom nastaveným na jednotku pre čítanie z predtým vybraného registra.
  • HMC5883L potom potvrdí a pošle dáta z požadovaného registra.
  • Master nepotvrdzuje príjem, ale vyšle stop podmienku a ukončí prenos dát.

Módy operácie senzora

Senzor pracuje v štyroch základných módoch.

Aktívny mód

Subsystém akcelerometra je zapnutý nábežnou hranou na EN pine a získa jednu vzorku pre každú z troch osí. EN pin by nemal byť nastavený skôr ako V_DD dosiahne 1,95 V. Vzorky sú získané, konvertované a kompenzované na "zero-g" ofset a chyby zosilnenia a potom porovnané z internou hranicou 0,688g a následne uložené. Prečítaním registra 0x00 v tomto móde zistíme či sú dáta pripravené na čítanie.

Standby mód

Zariadenie prejde automaticky do STANDBY módu po nameraní dát v ACTIVE móde. Výstupný systém poskytuje validné dáta, ktoré môžu byť prečítané cez I2C zbernicu. Tieto hodnoty sú podržané kým sa nezmení mód sezora. Pre zníženie spotreby je dobré vynulovať EN pin okamžite po prečítaní dát. Nové dáta je možné získať až keď privedieme senzor naspäť do aktívneho módu nastavením EN ja log. 1.

Popis riešenia

Sem opíšete ako konkrétne ste problém vyriešili. Začnite popisom pripojenia k procesoru (nezabudnite na schému zapojenia!) a zdôraznite ktoré jeho periférie ste pritom využili.

Schéma zapojenia snímača

Súbor:Example.jpg

Pozn.: Názov obrázku musí byť jedinečný, uvedomte si, že Obr1.jpg už pred vami skúsilo nahrať už aspoň 10 študentov.

Algoritmus a program

Uveďte stručný popis algoritmu, v akom jazyku a verzii vývojového prostredia ste ho vytvorili. Je vhodné nakresliť aspoň hrubú štruktúru programu napríklad vo forme vývojového diagramu. Rozsiahly program pre lepšiu prehľadnosť rozdeľte do viacerých súborov.

Vyberte podstatné časti zdrojového kódu, použite na to prostredie source:

/* A nezabudnite zdroják hojne komentovať  */

int main(void) {
    
    printf("Hello, World!\n");  
    return(0);  
}

Nezabudnite však nahrať aj kompletné zdrojové kódy vášho programu!

Zdrojový kód: serial.h a main.c

program.c



Overenie

Nezabudnite napísať čosi ako užívateľský návod. Z neho by malo byť jasné čo program robí, ako sa prejavuje a aké má užívateľské rozhranie (čo treba stlačiť, čo sa kde zobrazuje). Ak ste namerali nejaké signály, sem s nimi. Ak je výsledkom nejaký údaj na displeji, odfotografujte ho.

Kľúčové slová 'Category', ktoré sú na konci stránky nemeňte.