Operácie

Krokomer s akcelerometrom MMA8491Q

Zo stránky SensorWiki

Autori: Michal Hlavatý, Michal Stromko
Študijný odbor: Aplikovaná mechatronika a elektromobilita 1. Ing. (2016)


Zadanie

Pomocou akcelerometra, ktorý sa nachádza na doske Xtrinsic Sensors board vytvorte aplikáciu/program, ktorý bude realizovať funkciu jednoduchého krokomeru.

Xtrinsic Sensors board

Zoznam senzorov:

  • MPL3115A2: High-precision Pressure Sensor (20 – 110 kPa)
  • MAG3110: Digital 3-axis Magnetometer
  • MMA8491Q 3-axis Low-g Accelerometer

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
    • Realizácia funkcionality krokomeru
  • V ľubovoľnom programovacom jazyku/prostredí vytvorte aplikáciu na vizualizáciu a demonštráciu predloženého riešenia
  • Dokumentáciu odovzdajte prostredníctvom tejto wiki stránky.


Literatúra:

Analýza

Použitý senzor

Na realizáciu funkcie krokometra využijeme už vyššie spomínaný senzor Xtrinsic MMA8491Q 3-Axis Multifunction Digital Accelerometer. Je to nízko napäťový, 3-osí "low-g" akcelerometer uložený v 3 mm x 3 mm QFN púzdre. Zariadenie poskytuje dve konfigurácie. Prvou z nich je 45° senzor naklonenia a druhou akcelerometer s digitálnym výstupom cez I2C zbernicu. Pre nás je zaujímavá funkcia akcelerometra kedy senzor poskytuje 14-bit ± 8g dáta, ktoré môžu byť prečítané s 1 mg/LSB rozlíšením.

Vlastnosti

  • Extrémne nízka spotreba 400 nA na Hz
  • Ultra rýchly čas prenosu, ~700 μs
  • Napájací rozsah od 1,95 do 3,6 V
  • 3 mm x 3 mm, 0,65 mm stúpanie s vizuálnou inšpekciou spájkovacích spojov
  • ± 8g rozsah
  • 14-bit digitálny výstup, 1 mg/LSB rozlíšenie
  • rýchlosť prenosu výstupných dát (ODR), v závislosti na implementácii od 1 Hz do 800 Hz
  • I2C digitálne rozhranie
  • výstup v troch osiach a 45° natočenie


Popis vývodov

C Pin Funkcia
1 Byp Pripojenie výstupného kondenzátora interného regulátora
2 V_DD Napájacie napätie
3 SDA I2C dátová linka
4 EN Povoľovací pin
5 SCL I2C hodinová linka
6 Gnd Zem
7 Gnd Zem
8 Zout Výstup detekcie naklonenia v osi Z
9 Yout Výstup detekcie naklonenia v osi Y
10 Xout Výstup detekcie naklonenia v osi X
11 NC Nepripojené
12 NC Nepripojené

Popis registrov

Akcelerometer obsahuje 6 dátových a jeden stavový register. Tieto registre budeme používať na čítanie dát o zrýchlení v jednotlivých osiach. Mapa registrov

  • Obsah registrov je zachovaný ak je EN pin po vzorkovaní nastavený na vysokú úroveň
  • Obsah registrov je vynulovaný keď je EN pin nastavený na nízku úroveň.

Stavový register

Register 0x00 obsahuje real-time stavové informácie o vzorkách X, Y a Z dát. Bity (ZYXDR, ZDR, YDR, XDR) sa nastavia keď sú nové nasnímané dáta pripravené na čítanie.

Pole Popis
ZYXDR ZYXDR signalizuje, že sú pripravené nové vzorky vo všetkých kanáloch. ZYXDR je vymazaný keď sú prečítané registre horných bitov vo všetkých kanáloch (OUT_X_MSB, OUT_Y_MSB, OUT_Z_MSB).

0: Nie je pripravený nový set dát 1: Nový set dát je pripravený

ZDR ZDR je nastavený kedykoľvek je generovaná nová vzorka pre os Z. ZDR je vymazaný keď je prečítaný register OUT_Z_MSB.

0: Nie sú pripravené nové dáta v osi Z 1: Nové dáta v osi Z sú pripravené

YDR YDR je nastavený kedykoľvek je generovaná nová vzorka pre os Y. YDR je vymazaný keď je prečítaný register OUT_Y_MSB.

0: Nie sú pripravené nové dáta v osi Y 1: Nové dáta v osi Y sú pripravené

XDR XDR je nastavený kedykoľvek je generovaná nová vzorka pre os X. XDR je vymazaný keď je prečítaný register OUT_X_MSB.

0: Nie sú pripravené nové dáta v osi X 1: Nové dáta v osi X sú pripravené

Dátové registre

Tieto registre obsahujú 14-bit výstupné dáta akcelerometra pre osi X, Y a Z vyjadrené v dvojkovom doplnku.

  • OUT_X_MSB, OUT_X_LSB, OUT_Y_MSB, OUT_Y_LSB, OUT_Z_MSB, a OUT_Z_LSB sú uložené na adresnom rozsahu 0x01 – 0x06 pre automatickú inkrementáciu.
  • LSB registre môžu byť prečítané len okamžite po prečítaní z korešpondujúceho MSB registra. "Random access" čítanie z LSB registrov nie je možné.
  • Čítanie MSB a LSB registrov v sekvencii zabezpečuje, že obidva bajty patria rovnakej vzorke, dokonca aj vtedy ak medzi čítaním z MSB a LSB prídu nové dáta.
  • Dátové registre by mali byť čítané len po tom ako stavový register potvrdil prítomnosť nových dát vo všetkých osiach.

I2C komunikácia

Hodnoty zrýchlenia v jednotlivých osiach sú dostupné cez I2C rozhranie čím sa senzor stáva vhodným pre priame pripojenie k mikropočítaču. Senzor poskytuje signály prerušenia, ktoré indikujú prítomnosť hodnôt natočenia na X, Y a Z osi. Hodnoty zrýchlenia je možné čítať cez I2C v rovnakom čase keď je dostupný prerušovací signál. I2C rozhranie sa zapína nastavením EN pinu na vysokú úroveň. Ak je EN alebo V_DD nastavené na nízkej úrovni potom dáta čítané z akcelerometra sú nesprávne. Odpojenie napájania z V_DD pinu nemá vplyv na I2C zbernicu.

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 0x55. Viac o I2C prenose je uvedené v dokumentácii.

Postup prenosu jedného bajtu

  • Master vyšle štartovaciu podmienku na adresu MMA8491Q s RW bitom nastaveným na nulu pre zápis, a MMA8491Q odošle potvrdenie.
  • Potom Master vyšle adresu registra, z ktorého chce čítať a MMA8491Q pošle potvrdenie.
  • Master vyšle opakovanú štartovaciu podmienku a potom adresuje MMA8491Q s RW bitom nastaveným na jednotku pre čítanie z predtým vybraného registra.
  • MMA8491Q 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.

V tejto časti popíšete ako idete daný problém riešiť. Uvediete sem aj všetky potrebné technické údaje, ktoré sú potrebné na úspešné vyriešenie projektu. Napríklad:

  • popis komunikačnej zbernice (i2c, 1-wire, RS-232 a pod.)
  • obrázok zapojenia vývodov použitej súčiastky
  • odkaz na katalógový list
  • priebehy dôležitých signálov
  • este jedna polozka

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.