Individální projekty MPOA

Mikroprocesory s architekturou ARM

Uživatelské nástroje

Nástroje pro tento web


2017:vib-analysis

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
2017:vib-analysis [2018/01/13 11:26]
Ondřej Fišer
2017:vib-analysis [2018/01/14 11:22] (aktuální)
Ondřej Fišer
Řádek 17: Řádek 17:
 {{ :​2017:​vibro_fiser:​schema_predzes.png?​600 |}} {{ :​2017:​vibro_fiser:​schema_predzes.png?​600 |}}
 ====== SW řešení ====== ====== SW řešení ======
-Prvním blokem je vlastní AD převodník. Prvním problémem, který bylo nutné vyřešit bylo periodické vzorkování a přepínání převodník mezi sebou v případě vysoké nebo nízké vstupní úrovně signálu. Periodické vzorkování je řešeno tak, že časovač Timer2 přetéká každých 10 us a tím spustí jeden převod AD převodníku. Tím je zajištěna vzorkovací frekvence 100 kHz. Následně po dokončení převodu nastává další přerušení a data se z převodníku vyčtou (není použito DMA). Přepínání převodníků mezi sebou je řešeno tak, že v proměnné je držena minimální a maximální hodnota vstupních vzorků a kdykoliv během měření dojde k překročení limitu hladin 96 nebo 4000 je převodník vypnut a zapnut další s menším zesílením. Naopak pokud je signál příliš malý tak dojde po skončení periody k přepnutí převodníku s vyšším zesílením. ​ 
- 
 **Ovládací software a jeho hlavní části popisuje následující obrázek:** **Ovládací software a jeho hlavní části popisuje následující obrázek:**
 {{ :​2017:​vibro_fiser:​blokacsw.png?​600 |}} {{ :​2017:​vibro_fiser:​blokacsw.png?​600 |}}
-Následuje blok IIR filtrutento blok může částečně kompenzovat rezonanční křivku akcelerometru ​zvětšit tak šířku pásma ve kterém zařízení může měřitZdrojový kód vychází z +===== AD převodník ===== 
 +Prvním blokem je vlastní AD převodník. Prvním problémem, který bylo nutné vyřešit bylo periodické vzorkování a přepínání převodník mezi sebou v případě vysoké nebo nízké vstupní úrovně signálu. Periodické vzorkování je řešeno tak, že časovač Timer2 přetéká každých 10 us tím spustí jeden převod 12ti bitového AD převodníku. Tím je zajištěna vzorkovací frekvence 100 kHz. Následně po dokončení převodu nastává další přerušení a data se z převodníku vyčtou (není použito DMA). Přepínání převodníků mezi sebou je řešeno tak, že v proměnné je držena minimální a maximální hodnota vstupních vzorků a kdykoliv během ​měření dojde k překročení limitu hladin 96 nebo 4000 je převodník vypnut a zapnut další s menším zesílením. Naopak pokud je signál příliš malý tak dojde po skončení periody k přepnutí převodníku s vyšším zesílením
  
 +**Obsluha okamžitého přepínání AD převodníků:​**
 <code c> <code c>
-short IIR( float coef[][5], ​short sample)+ ​if(maximumADC<​adcVal) maximumADC=adcVal;​ 
 + ​if(minimumADC>​adcVal) minimumADC=adcVal;​ 
 + ​if((adcSET==1)&&​((maximumADC>​4000)||(minimumADC<​96))) 
 +     { 
 +         ​maximumADC=2048;​ 
 +        HAL_ADC_Stop(&​hadc1);​ 
 +        HAL_ADC_Start_IT(&​hadc2);​ 
 +        adcSET=2; 
 +     } 
 +if((adcSET==2)&&​((maximumADC>​4000)||(minimumADC<​96))) 
 +     { 
 +         ​maximumADC=2048;​ 
 +        HAL_ADC_Stop(&​hadc2);​ 
 +        HAL_ADC_Start_IT(&​hadc3);​ 
 +        adcSET=3; 
 +     } 
 +</​code>​ 
 +===== IIR filtr ===== 
 +Následuje blok IIR filtru, tento blok může částečně kompenzovat rezonanční křivku akcelerometru a zvětšit tak šířku pásma ve kterém zařízení může měřit. Zdrojový kód vychází z následujícího obrázku rovnic, dále je z něj patrné že je tento filtr rozdělen do dvou bloků. Koeficienty byly vygenerovány pomocí programu Matlab. 
 +{{ :​2017:​vibro_fiser:​df2graf.png?​400 |}}{{ :​2017:​vibro_fiser:​df2diff2.png?​400 |}} 
 + 
 +**Zdrojový kód IIR filtru složeného ze dvou bloků:** 
 +<code c> 
 +uint16_t ​IIR( float coef[][5], ​uint16_t ADCval)
 { {
          static double v1[2];          static double v1[2];
Řádek 52: Řádek 75:
 } }
 </​code>​ </​code>​
-{{ :​2017:​vibro_fiser:​cubemx.png?600 |}}+===== Numerická integrace ===== 
 +Část numerické integrace je tvořena prostým sumováním vzorkům z AD převodníku (přepočítaných na reálnou hodnotu po zesílení danou větví). Po každé periodě signálu dojde k vynulování integrační proměnné, tak aby nedošlo vlivem šumu (více v kapitole Závěr) "​ujetí"​ hodnoty po integrování směrem k nekonečnu. 
 + 
 +**Simulace integrování v programu Matlab:** 
 +{{ :​2017:​vibro_fiser:​integrace.png?600 |}} 
 +Vlevo je originální sinusový signál, vpravo je signál po integraci. 
 +===== SD karta ===== 
 +Čtečka SD karet je připojena pomocí 1 bitové datové sběrnice k rozhraní SDIO. Rozhraní běží na kmitočtu 24 MHz a v softwarové implementaci je využito knihovny fatfs.h pro obsluhu práce SD kartou a souborovým systémem FAT32.  
 + 
 +**Zdrojový kód obsluhy práce s SD kartou:** 
 +<code c> 
 +if(BSP_SD_Init()==MSD_OK) 
 +
 +fresult=f_mount(&​fatfs,"",​1);​ 
 +fresult=f_open(&​myfile,"​vibro.dat",​FA_CREATE_ALWAYS|FA_WRITE);​ 
 +sprintf((char*)buffer,"​%d;​%f;​%f",​vzorek,​realADC,​Integrace);​ 
 +f_printf(&​myfile,​(const char*)buffer);​ 
 +f_close(&​myfile);​ 
 +
 +</​code>​ 
 +===== Konfigurace STM32CubeMX ===== 
 +Inicializační kódy jsou vygenerovány ve studiu STM32CubeMX. Hodiny jsou nakonfigurovány tak aby procesor pracoval na nejvyšších možných kmitočtech. V tomto projektu jsou využity následující periferie: ADC1, ADC2, ADC3, RCC, SDIO, TIM2, USART2. Middleware je využita pouze pouze knihovna FATFS. 
 + 
 +**Mapování pinů a konfigrace hodiny mikrokontroléru:​** 
 +{{ :​2017:​vibro_fiser:​cubemx.png?​800 |}} 
 + 
 +====== Závěr ====== 
 +V rámci tohoto projektu byla realizována deska předzesilovačů pro akcelerometr ADXL1002. Dále bylo implementováno periodické vzorkování AD převodníků,​ jejich přepínání podle úrovně signálu, IIR filtr a integrování vstupního signálu. Vstupy AD převodníků jsou zatížené poměrně vysokým šumem, který je způsobený nevhodným napájením analogové části (včetně referenčního vstupu) mikrokontroléru. Toto napájení je spojené s digitálním napájením,​ stejně tak není oddělená analogová a digitální zem. Pokud by byla vhodně řešeno zapojení země a referenční vstup by byl spojen s napájecím napětím akcelerometru,​ tak by se přesnost měření celkově zlepšila a nebylo by nutné nulovat integrační proměnnou po každé periodě. 
 +Průběžné výsledky zpracování signálu je možné sledovat na UARTu nebo na SD kartě. 
 + 
 +FFT analýza nebyla z časových důvodů implementována. Další práce bude spočívat v implementaci FFT analýzi (vysoké rozlišení bude pravděpodobně vyžadovat větší externí RAM paměť) a implementaci FreeRTOS pro jednodušší práci s dalšími periferiemi (RS485-ModBUS,​ OLED display, teplotní čidla atd.).
  
 +Použitá vývojová prostředí:​ Embitz, STM32CubeMX,​ Matlab
  
2017/vib-analysis.1515839207.txt.gz · Poslední úprava: 2018/01/13 11:26 autor: Ondřej Fišer