Individální projekty MPOA

Mikroprocesory s architekturou ARM

Uživatelské nástroje

Nástroje pro tento web


playground:playground

Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

Obě strany předchozí revize Předchozí verze
Následující verze
Předchozí verze
playground:playground [2016/01/17 17:02]
Jan Dvořák
playground:playground [2017/12/29 13:59] (aktuální)
Petr Skryja
Řádek 1: Řádek 1:
-====== Interciální snímače na kitu STM32F3DISCOVERY ====== 
  
-==== Zadání ​projektu ​====+====== Zadání ​======
  
-Pomocí kitu STM32F3DISCOVERY s integrovaným akcelerometrem (LSM303DLHC) a gyroskopem (L3GD20) vytvořte software pro obsluhu těchto dvou inerciálních snímačů. Dále implementujte kód obsluhující ukládání naměřených veličin na SD kartu s příslušným souborovým systémem. 
  
-==== Teoretický úvod ==== 
  
-== MEMS technologie == +Sestavte zvukové rozhraní pro počítač pomocí procesoru STM32. Použijte knihovny pro třídu „USB Device Class for Audio Devices“Implementujte zvukový výstup z PC vč. ovládání hlasitosti na vývojové desce STM32F4DISCOVERY. Doplňte o vstup z integrovaného MEMS mikrofonuProjekt ve spolupráci ​Audified 
-{{ :​playground:​x2_mikrorezonator.jpg?​direct&​300|}} +----
-Zkratka MEMS (Micro-Electro-Mechanical Systems) s sebou nese současně označení technologie výroby a současně označení produktů touto technologií vytvořenýchJedná se poměrně o novou technologii,​ kterou ​dnešní době podpořila úroveň miniaturizace,​ úroveň technologických postupů a znalost materiálůJejí vývoj se ovšem zdaleka neblíží konci. Tato technologie je implementací mechanických struktur do jediného pouzdra společně ​elektronikou. Tato elektronika většinou slouží k digitalizaci naměřené analogové veličiny, filtraci, případně dalšímu zpracování.+
  
-Typické příklady využití jsou:  +====== Úvod ======
-Tlakové senzory, senzory proudění, inerciální snímače (snímání polohy), rezonátory. ​+
  
 +Cílem tohoto projektu je vytvořit software a jednoduchý hardware pro zvolenou vývojovou desku, aby po připojení USB konektou k počítači,​ bylo toto zařízení identifikováno jako Audio Device a bylo přiřazeno jako zařízení pro audio vstup i výstup. Dále bude možné pomocí hardwarového tlačítka na desce možné zvolit funkci Mute pro úplné zeslabení výstupní hlasitosti odposlechu. Pomocí potenciometru bude možné měnit hlasitost odposlechu. Z pinu číslo 21 na desce bude odebíráno referenční napětí, které bude předřadným odporem omezeno na maximální bezpečné napětí pro AD převodníky desky a otáčením potenciometru bude regulováno napetí přivedené na vstup AD převodníku. ​
 +----
  
-== Konstrukce MEMS akcelerometru== +====== Vývojový hardware ======
-{{ :​playground:​2_princip_akcelerometru.png?​direct&​250|}} +
-Základem akcelerometru je seismická hmotnost (setrvačný prvek) o hmotnosti m, dále pružina (příp. pružná lamelka), na které je seismická hmotnost připevněna.  +
-Výchylka seismické hmotnosti je poté vůči základně akcelerometru vyhodnocována. Snímání (měření) přesné polohy je poté prováděno pomocí měření kapacity struktury tvořící deskový kapacitor. Výše popisovaný akcelerometr měří zrychlení pouze v jednom směru (v jedné ose). Pro vznik akcelerometru,​ který měří ve dvou osách, je nutné přidat další dílčí strukturu akcelerometru,​ tentokrát pootočenou o 90°. Dnešní akcelerometry jsou běžně tříosé. U nich je nutné aplikovat jednu strukturu výškově pohyblivou.+
  
-== Konstrukce MEMS gyroskopu== +STM32F4 Discovery
-{{ :​playground:​8_mems_gyro.png?​direct&​350|}} +
-Typickou strukturou ​ jsou CVG gyroskopy. Obecně se využívá mechanicky rezonující struktura (těleso) o určité hmotnosti umístěná pomocí pružin v pevném mechanickém rámu (pouzdře). Pokud se začne s takovou strukturou otáčet, ovšem kolmo vůči vibracím, začne na toto pohybující se těleso působit Coriolisova síla. Ta je úměrná úhlové rychlosti otáčení. Poté při pohybu (vibrující) soustavy od vnitřního okraje kružnice směrem k vnějšímu okraji a současnému otáčení celého systému doprava, dochází k působení Coriolisovy síly směrem doleva. V opačném případě, pohybuje-li se (vibrující) soustava z vnějšího kraje, směrem k vnitřnímu okraji kružnice, ovšem se zachovaným směrem otáčení (tedy doprava) tohoto snímače, dochází k působení Coriolisovy síly směrem doprava. Tuto polohu zaznamenává snímač pracující na principu deskového kondenzátoru.+
  
  
  
-==== Použitý hardware ==== 
-== STM32F3Discovery == 
-{{ :​playground:​stm32f3discovery.jpg?​direct&​150|}} 
-Zvolený kit je založen na procesoru STM32F3VC. Jedná se o 32-bitový mikroprocesor s architekturou ARM a jádrem Cortex-M4. 
-Jádro série F3 podporuje DSP a FPU instrukce, které mohou být výhodné při zpracování rychlých logických dějů, nebo také při výpočtech s čísly s plovoucí řadovou čárkou. Jako zdroj hodinového signálu je možné použít interní RC oscilátor s rezonanční frekvencí 8MHz násobený PLL násobičem až 16x. Další možnost zdroje hodinového signálu je využití externího krystalového rezonátoru v rozsahu frekvencí 4 až 32MHz. I v tomto případě je možné využít násobení taktu PLL (fázovým závěsem). Maximální taktovací kmitočet procesoru může být ale nanejvýše 72 MHz. 
  
-Ze zadání požadované MEMS snímače (ackelerometr LSM303DLHC a gyroskop L3GD20) jsou již implementovány na desce. Komunikace mezi mikrokontrolérem a akcelerometrem probíhá pomocí I2C sběrnice. V případě gyroskopu a miktrokontroléru probíhá komunikace pomocí SPI rozhraní (ikdyž gyroskop umožňuje též komunikaci prostřednictvím I2C).  ​+Key Features
  
-== SD karta ==+    STM32F407VGT6 microcontroller featuring 32-bit ARM Cortex-M4F core, 1 MB Flash, 192 KB RAM in 
 +    an LQFP100 package 
 +    On-board ST-LINK/V2 with selection mode switch to use the kit as a standalone ST-LINK/V2  
 +    (with SWD connector for programming and debugging) 
 +    Board power supply: through USB bus or from an external 5 V supply voltage 
 +    External application power supply: 3 V and 5 V 
 +    LIS302DL or LIS3DSH ST MEMS 3-axis accelerometer 
 +    MP45DT02, ST MEMS audio sensor, omni-directional digital microphone 
 +    CS43L22, audio DAC with integrated class D speaker driver 
 +    Eight LEDs: 
 +    LD1 (red/green) for USB communication 
 +    LD2 (red) for 3.3 V power on 
 +    Four user LEDs, LD3 (orange), LD4 (green), LD5 (red) and LD6 (blue) 
 +    2 USB OTG LEDs LD7 (green) VBus and LD8 (red) over-current 
 +    Two push buttons (user and reset) 
 +    USB OTG FS with micro-AB connector 
 +    Extension header for all LQFP100 I/Os for quick connection to prototyping board and easy probing
  
-SD karty mohou komunikovat ve dvou módech. První mód se označuje jako režim SPI, a ten druhý jako SD režim (na těchto dvou módech je závislé označení pinů na SD kartě). +----
-Vzhledem k tomu, že mikrokontrolér STM32F3 nedisponuje SDIO rozhraním (jako například STM32F4), je výhodnější využít komunikační režim přes SPI. SPI režim je sekundárním komunikačním protokolem využívající SPI kanál. Karta je defaultně přednastavena ke komunikaci v SD režimu. Pokud je vyžadována komunikace v SPI režimu, je nutné tento režim během prvního resetovacího příkazu aktivovat (nezapomenout na CRC, které je v SD režimu defaultně zapnuto). Samotná komunikace přes SPI kontrolu dat nevyžaduje,​ je možné ji ale zapnout.+
  
-==== Použitý software ​====+====== Software ====== 
  
-== MEMS snímače == +V hlavním souboru main.c probíha inicializace ADC evodníkuUSB device audio class audio kodeku ​pro přehrávání audio výstupu.
-Program je psán v programu EmBitz a kompilován ​iloženým kompilátorem ARM GCC. Pro samotný projekt bylo využito poměrně nových HAL knihoven uvedených výrobcem mikroprocesorukteré jsou více abstraktně orientované,​ než dosud standardní SPL knihovny. U těchto knihoven není nutné nastavovat periferie (časovače,​ komunikační rozhraní) na úrovni bitů, ale za pomocí již definovaných funkcí. Přerušení ​jiné rutiny se zde realizují pomocí callbacků, namísto klasických obsluh přerušení. Původním záměrem byl vývoj vlastních knihoven ​pro oba MEMS senzory, nicméně po určitém čase zkoušení a experimentování byla zvolena taktika ​epoužití již napsaných knihovenZa tímto účelem byly využity vzorová řešení od STM. Tato vzorová řešení obsahují již pěkně napsané knihovny, ovšem struktura a zřetězení těchto knihoven pro obsluhu jednotlivých snímačů byla téměř žalostná. Z tohoto důvodu byly knihovny pro oba snímače upraveny s ohledem na univerzálnost následovně:​+
  
-{{ :​playground:​bez_nazvu.png?​direct&​700 |}}+Použité knihovny v soubotu main.c
  
-Ke každému .c souboru je připojen hlavičkový soubor (.h). Obě knihovny vyšší vrstvy (L3GD20.c a LSM303DLHC.c) umožňují kompletní práci se snímači, jako vyčítání naměřených hodnot, konfiguraci měření, včetně konfigurace filtrů. Knihovny nižší vrstvy (L3GD20_SPI.c a LSM303DLHC_I2C.c) zprostředkovávají ​ komunikaci mezi snímači a mikrokontrolérem. Tímto způsobem je zde dosažená určitá míra univerzálnosti,​ kdy je možné při změně platformy přepsat pouze knihovnu nižší vrstvy (_SPI.C, příp. _I2C.c). 
  
-Výsledné změřené hodnoty je poté nutné dopočítat s ohledem na zvolený měřící rozsah snímačeNaměřené hodnoty tedy nejsou přímo ocejchovány v příslušných jednotkáchMusí se tedy dopočítat jako hodnota z celkového měřícího rozsahu+  * #include "​stm32f4xx_hal.h" 
-Výstupem akcelerometru jsou poté hodnoty přetížení v [mG]V případě gyroskopu jsou jím [°/s]+  * #include "​usb_device.h" 
 +  * #include "​stm32f4xx_hal_adc.h" 
 +  * #include "​cs43l22.h" 
 +  * #include "​stm32f4_discovery_audio.h"
  
  
 +    assert_param(IS_ADC_CHANNEL(sConfig->​ADC_CHANNEL_1));​
 +    hadc->​Instance->​SMPR2 &= ~ADC_SMPR2(ADC_SMPR2_SMP0,​ sConfig->​Channel);​
 +    hadc->​Instance->​SMPR2 |= ADC_SMPR2(sConfig->​SamplingTime,​ sConfig->​Channel);​
 +    void ADC_Init(hadc);​
 +    cs43l22_Init(29,​ OUTPUT_DEVICE_SPEAKER,​ 60, AUDIO_FREQUENCY_48K);​
  
-<code cpp> 
-//obsluha vycitani dat z akcelerometru 
  
-void ACCELERO_ReadAcc(void) ​         //funkce cteni akcelerometru,​ nasleduje vycteni hodnot pomoci ​ BSP_ACCELERO_GetXYZ(buffer);​ +Nejprve je inicializován AD převodník a přiřazeným kanálem číslo jedna, který odpovídá převodníku ADC1. Na tento převodník je přivedeno napětí ​potenciometrukterý ovládá Volume přehrávání audio výstupu. Následně jsou přiřazeny patřičné parametry a vzorkovací frekvence.
-+
-  int16_t buffer[3] = {0}; +
-  static int16_t xval_akceler,​ yval_akcelerzval_akceler = 0x00;+
  
-  BSP_ACCELERO_GetXYZ(buffer);​+Dále je inicializován audio kodek, kde je přižen výstupní pin na Jack 3.5 mm, zvolen typ výstupního zařízení,​ počáteční hlasitost v procentech a vrozkovací frekvence na 48 kHz. Stejná je vzorkovací frekvence AD převodníku a rychlost přenosu po USB.
  
-  // prepocet mericiho rozsahu 
-  xval_akceler = (buffer[0]*2*1000)/​32768;​ 
-  yval_akceler = (buffer[1]*2*1000)/​32768;​ 
-  zval_akceler = (buffer[2]*2*1000)/​32768;​ 
-    ​ 
-} 
-</​code>​ 
  
-<code cpp> 
-//obsluha vycitani dat z gyroskopu 
  
-void GYRO_ReadAng(void) 
-{ 
- 
-  float Buffer[3]; 
-  float Xval_gyro,​Yval_gyro,​Zval_gyro = 0x00; 
- 
-  BSP_GYRO_GetXYZ(Buffer);​ 
- 
-  Xval_gyro = (ABS(Buffer[0]))*500/​32768 ; 
-  Yval_gyro = (ABS(Buffer[1]))*500/​32768 ; 
-  Zval_gyro = (ABS(Buffer[2]))*500/​32768 ; 
- 
-} 
-</​code>​ 
-Kódy je vhodné pro zápis hodnot na SD kartu upravit o předání výstupního parametru pomocí ukazatele. 
- 
- 
-== SD karta == 
-Jak již bylo zmíněno výše, je nutné zvolit SPI režim komunikace mezi SD kartou a mikrokontrolérem. V tomto případě je možné využít jednu SPI sběrnici pro obsluhu SD karty a obsluhu gyroskopu současně. Poté je možné přepínat mezi oběma součástkami pomocí pinu CS (chip select). Vzhledem k tomu, že mikrokontrolér obsahuje více SPI rozhraní, bylo pro obsluhu SD karty voleno jiné rozhraní. 
- 
-Aby SD karta byla čitelná i pro klasický počítač, musí se na ní implementovat souborový systém (např. FAT). V souladu s tímto souborovým systémem se na tuto kartu i zapisuje. K tomuto účelu je možné napsat vlastní knihovnu, případně využít volné knihovny dostupné na internetu. Jednou z nejznámějších dostupných knihoven, obsluhující souborový systém může bát FatFS, určená pro mikroprocesorové systémy. K ní je ovšem nutné dopsat kód obsluhující komunikaci SPI, mezi procesorem a kartou. 
- 
-==== Demonstrace funkčnosti knihoven ==== 
- 
-{{:​playground:​20160117_163127.mp4|}} 
- 
-{{:​playground:​20160117_163157.mp4|}} 
- 
-==== Závěr ==== 
-Práci na projektu jsem koncipoval následovně. Nejdříve jsem se seznamoval s HAL knihovnami, které pro mě byly zcela nové, a se kterými jsem doposud neměl žádné praktické zkušenosti. Následně jsem chtěl ​ vyřešit obsluhu SD karty, jelikož byla pro projekt dle mého stěžejní. Nicméně jsem se u tohoto bodu zadání zasekl na poměrně dlouhou dobu. Zde mě zejména zmíněné nové HAL knihovny práci určitě neulehčily. V současné době je na těchto knihovnách postaveno velmi málo funkčních řešení. Inspirace bylo tedy málo. Tento požadavek ze zadání projektu se nepovedl bohužel splnit. Knihovny pro akcelerometr a gyroskop byly inspirovány ze vzorů od výrobce vývojové desky. Byly pouze upraveny pro větší přehlednost a kompatibilitu mezi dalšími platformami. Jsou tedy plně funkční. ​ 
- 
-  
-==== Literatura a zdroje ==== 
-[1] http://​www.hw.cz/​clanek/​2006111901 
-[2] KEMPE, V. Inertial MEMS: Principles and Practice. New York: Cambridge University Press, 2011, xiv, 497 s. ISBN 978-0-521-76658-6. 
-[3] <​http://​automatizace.hw.cz/​integrovane-mems-gyroskopy>​ 
  
playground/playground.1453046534.txt.gz · Poslední úprava: 2016/01/17 17:02 autor: Jan Dvořák