Operácie

Tropjosí gyroskopický modul L3G4200D: Rozdiel medzi revíziami

Z SensorWiki

(Popis riešenia)
(Odstránený obsah stránky)
 
(47 medziľahlých úprav od jedného ďalšieho používateľa nie je zobrazených)
Riadok 1: Riadok 1:
{|
 
|Autori:      || '''Ján Benedek'''
 
|-     
 
|            || '''Martin Cintula'''
 
|-     
 
|            || '''Michal Gáher'''
 
|-
 
|Študijný odbor:  || '''Aplikovaná mechatronika'''
 
|-
 
|Ročník:      || '''2. Ing. ''' (2014)
 
|}
 
  
== Zadanie ==
 
 
Naším zadaním bolo implementovať senzor L3G4200D - trojosí gyroskopický modul s mikropočítačom a získať z neho užitočné údaje.
 
Gyroskop detekuje uhlovú rýchlosť natočenia vo všetkých troch osiach.
 
 
[[Súbor:Osi.jpg]]
 
 
Senzor podporuje komunikáciu cez SPI a takisto aj cez I2C zbernicu. Pre náš projekt sme použili jednoduchšiu I2C zbernicu.
 
 
Následne sme vyčítané dáta mali zobraziť na PC vo virtualizačnom programe. Na tento účel poslúžil maltab.
 
 
Senzor je namontovaný na doske a predáva sa to ako celok. Na doske sa nachádzajú nejake obvody a čipy. Výsledok je, že nám stačí priviesť napájanie a I2C komunikáciu s pull up rezistormi a celé to potom funguje.
 
 
[[Obrázok:Parallax_L3G4200D.jpg|350px]]
 
 
 
'''Literatúra:'''
 
* Zoznam použitej literatúry, vrátane katalógových údajov (datasheet), internetových odkazov a pod.
 
 
* [http://www.parallax.com/product/27911 Product page]
 
* [http://www.parallax.com/sites/default/files/downloads/27911-L3G4200D-Gyroscope-Manufacturer-Datasheet.pdf Datasheet L3G4200D]
 
* [http://www.parallax.com/sites/default/files/downloads/27911-Gyroscope-3-Axis-L3G4200D-Guide-v1.1.pdf Gyroscope-3-Axis-L3G4200D-Guide]
 
* [http://www.matlabarduino.org/gyroscopes.html Zdroj vizualizácie]
 
* [http://bildr.org/2011/06/l3g4200d-arduino Arduino kód]
 
 
 
__TOC__
 
 
== Zadanie ==
 
 
Senzor nám ponúka SPI a I2C zbernicu. Pre jednoduchosť sme použili I2C zbernicu. Chip podporuje protokol I2C, fast mode a takisto aj normal mode. Nemá žiadne špeciálne protokoli, preto je možné pre nás použiť I2C knižnicu od pána Flueriho.[http://homepage.hispeed.ch/peterfleury/avr-software.html I2C]
 
 
Casový diagram pre I2C:
 
 
[[Obrázok:timef.jpg|center]]
 
 
Parametre senzora:
 
* tri možnosti senzitivity
 
* I2C/SPI zbernice
 
* 16 bitový výstup dát
 
* 8 bitový výstup teploty
 
* Integrovaný dolno a horno priepustný filter
 
* Power down and sleep mode
 
 
Pre našu aplikáciu nám nebude potreba snímania teploty. Pracovisko má stabilnú teplotu. Takisto nebudeme používať žiaden filter a využijeme obyčajný operation mód. Senzitivita je nastaviteľná a bude možné ju meniť.
 
 
Senzor je už z výroby nakalibrovaný, avšak pre našu aplikáciu v matlabe budeme musieť urobiť našu vlastnú kalibráciu. Na určenie kalibračných konštánt potrebujeme systém ktorý nám umožní senzor natáčať vo všetkých troch osiach v rámci 180 stupňov. Jednoduchý servo motor nám bude stačiť. Tu využijeme PWM moduláciu na riadenie servo motora (parallax servo motor).
 
 
[[Obrázok:serv.jpg|center]]
 
 
Následne získane kalibračné hodnoty a uhlové rýchlosti nám pomožu na určenie natočenia/uhla.
 
Tu použijeme skript v matlabe ktorý nám bude integrovať v reálnom čase. Rovnice:
 
[[Obrázok:Integ.jpg|center]]
 
 
Piny na čipe:
 
 
[[Obrázok:pinys.jpg]]
 
 
My využijeme iba 5 z možných 8. Dva slúžia na napájanie, dva na I2C komunikáciu a posledný pin SD0 použijeme iba na zmenu adresy. Urobili sme to tak lebo sme to videli v iných projektoch, ale čip by fungoval aj tak, len by sme museli v kóde zmeniť adresu.
 
 
== Popis riešenia ==
 
 
Tento projekt rozložím do dvoch častí:
 
 
*Zapojenie na vývojovej doske ACROB
 
 
*Vizualizácia v matlabe
 
 
'''Zapojenie čipu k mirkoprocesoru.'''
 
 
[[Súbor:Schema12.jpg|450px]]
 
 
Ako som vyššie spomenul, pin SD0 je pripojený na Vcc, a to zmení adresu čipu. Čip funguje aj bez SD0 pripojenia na Vcc ale vtedy treba zmeniť adresu v kóde.
 
 
Na obrázku je jasne vidieť ako máme pripojené 2 periférie. Servo motor nám slúži iba na kalibráciu. Senzor komunikuje cez I2C zbernicu a je potrebné k SDA a SCL pripojiť pull up rezistory aby komunikácia fungovala správne.
 
 
Senzor je na začiatku potrebné nekonfigurovať. Nachádza sa tu 5 Control registerov, ktoré je potrebné nakonfigurovať podľa požiadaviek na čip.
 
* CTRL_REG1 nastavuje zapnutie osí, a celkove zapnutie čipu
 
* CTRL_REG2 nastavuje filtre v čipe (my nepoužívame)
 
* CTRL_REG3 nastavuje prerušenia (tiež nepoužívame)
 
* CTRL_REG4 nastavuje citlivosť/typ zápisu dát (endian)/SPI enable
 
* CTRL_REG5 nastavuje prerušenia/filtre (nepoužívame)
 
 
Po úvodnej konfigurácií nám čip priamo posiela údaje o uhlovej rýchlosti v jendotkách [dps]= degrees per second (stupeň za sekundu)
 
Ďalšie spracovanie dát nastáva už v matlabe. Dáta sú posielané po sériovej linke.
 
 
'''Vizualizácia'''
 
 
Celá vizualizácia sa deje v matlabe. Najprv sme museli nadviazať komunikáciu s vývojov doskou ACROB. Tak ako sme používali serial connection cez program Terminal, takisto použijeme tento typ spojenia pre matlab. Aby sme sa uistili, že komunikácia je nadviazaná správne, používame tzv. handshake. Je to zralizované tak, že ACROB posiela charakter 'a' po sériovej linke a je to v loope, takže pokým nenastane komunikácia s matlabom/iným sériovým kuminikátorom, kód sa nepohne ďalej. Keď matlab prečíta charakter 'a', pošle po sériovej linke späť charakter '2'. Týmto si sú obe zaraidenia isté, že komunikujú správne. Matlab k´d je tiež v loop pokým nepríjme charakter 'a'.
 
 
Rozhodol som sa, že uhlovú rýchlosť budem integrovať a ukazovať natočenie šípky. Šípka sa bude vlastne kopírovať pohyb celého senzora. Aby sme dostali skutočnú polohu/natočenie, potrebujeme zistiť kalibračné konštanty. Toto je spravené cez servo motor. Servo motor točí celý senzor od 0 stupňov až po 180 konštantnou rýchlosťou a počas tohoto pohybu neustále čítame dáta z čipu. Nakoľko je rýchlosť konštantná, dáta z čipu by mali dávať konštantnú uhlovú rýchlosť. Nakoľko vieme čas ako dlho trvá dosiahnutie 180 stupňnov, vieme aj o koľko stupňnov sa seznor otočil a vieme aj uhlovú rýchlosť, je jednoduché potom zistiť kalibračnú konštantu.
 
 
[[Súbor:Osii.jpg|850px]]
 
 
Tento proces sa deje pre všetky tri osi, a vrámci získania presných hodnôt, proces sa deje 5 krát a kalibračná konštanta je zpreimerovaná.
 
Po kalibráci sa spustí vizuálne okno kde je nakreslená šípka. šípka može byť reprezentovaná v 2D ale aj v 3D. 2D sa ukázala byť viac prehladné. Šípka sa nakláňa tak ako senzor v 'x' a 'y' osi a natáča sa tak ako senzor v 'z' osi.
 
 
Ak sa zmení citlivosť senzora, je potrebné urobiť kalibráciu znova. Po získaní kalibračných konštánt, opätovná kalibrácia nie je potrebná.
 
 
V kóde sa nachádzajú dve spracovania dát, ak matlab pošle charakter 'G', potom senzor posila dáta normaálne, ak však matlab pošle charakter 'C', to znamená kalibrácia a kód riadi servo pohon a pošle dáta 50 krát. Pri charakteri 'G', dáta sú poslané raz treba neustále posielať charakter 'G' aby sme čítali dáta.
 
 
=== 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'':
 
 
<source lang="c">
 
/* A nezabudnite zdroják hojne komentovať  */
 
 
int main(void) {
 
   
 
    printf("Hello, World!\n"); 
 
    return(0); 
 
}
 
</source>
 
 
Nezabudnite však nahrať aj kompletné zdrojové kódy vášho programu!
 
 
Zdrojový kód: [[Médiá:Serial.h|serial.h]] a [[Médiá:Pip.c|main.c]]
 
 
[[Médiá:MojProgram.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.
 
 
 
[[Category:AVR]] [[Category:DVPS]]
 

Aktuálna revízia z 10:34, 14. január 2015