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 10:48]
Ondřej Fišer
2017:vib-analysis [2018/01/14 11:22] (aktuální)
Ondřej Fišer
Řádek 8: Řádek 8:
 Cílem projektu je HW řešení předzesilovačů pro zesílení vstupního signálu z akcelerometru a připojení čtečky na SD karetu. Dále je cílem vytvořit ovládací SW pro mikrokontrolér v prostředí Embitz. Cílem projektu je HW řešení předzesilovačů pro zesílení vstupního signálu z akcelerometru a připojení čtečky na SD karetu. Dále je cílem vytvořit ovládací SW pro mikrokontrolér v prostředí Embitz.
 ====== HW řešení ====== ====== HW řešení ======
-Základem řešení je vývojová deska STM32_F4VE osazená mikroprocesorem STM32F407VET6. Jako měřící prvek byl vybrán precizní akcelerometr ADXL1002 od společnosti Analog Devices. Tento akcelerometr pracuje ve frekvenčním pásmu do 11 kHz. Je napájen nesymterickým napětím a výstupní střídavé napětí posouvá ofset roven polovině napájecího napětí. ​Na následujícím obrázku je blokové ​schéma zařízení:​+Základem řešení je vývojová deska STM32_F4VE osazená mikroprocesorem STM32F407VET6. Jako měřící prvek byl vybrán precizní akcelerometr ADXL1002 od společnosti Analog Devices. Tento akcelerometr pracuje ve frekvenčním pásmu do 11 kHz. Je napájen nesymterickým napětím a výstupní střídavé napětí posouvá ofset roven polovině napájecího napětí. ​ 
 + 
 +**Blokové ​schéma zařízení:​**
 {{ :​2017:​vibro_fiser:​blokac.png?​600 |}} {{ :​2017:​vibro_fiser:​blokac.png?​600 |}}
  ​Předzesilovače jsou připojeny k pinům ​ 23-25, na kterých jsou namapovány vstupy IN1 AD převodníků 1-3. IC2A funguje jako rozdílový zesilovač a odstraňuje stejnosměrnou složku, další zesilovače slouží k zesílení signálu třemi cestami s různými zesíleními - tak aby vždy byla využita dynamika AD převodníku. V zapojení nejsou záměrně využity žádné vazební kondenzátory,​ neboť svými parametry velmi znepřesňují měření. Posledním důležitým obvodem vstupní části je digitální potenciometr MCP4461, pomocí kterého je možné libovolně nastavovat offset všem zesilovačům.  ​Předzesilovače jsou připojeny k pinům ​ 23-25, na kterých jsou namapovány vstupy IN1 AD převodníků 1-3. IC2A funguje jako rozdílový zesilovač a odstraňuje stejnosměrnou složku, další zesilovače slouží k zesílení signálu třemi cestami s různými zesíleními - tak aby vždy byla využita dynamika AD převodníku. V zapojení nejsou záměrně využity žádné vazební kondenzátory,​ neboť svými parametry velmi znepřesňují měření. Posledním důležitým obvodem vstupní části je digitální potenciometr MCP4461, pomocí kterého je možné libovolně nastavovat offset všem zesilovačům.
 +
 **Schéma předzesilovače:​** **Schéma předzesilovače:​**
 {{ :​2017:​vibro_fiser:​schema_predzes.png?​600 |}} {{ :​2017:​vibro_fiser:​schema_predzes.png?​600 |}}
 ====== SW řešení ====== ====== SW řešení ======
-{{ :2017:​vibro_fiser:​cubemx.png?​600 |}} +**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 |}}
 +===== 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 a 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>
 + ​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 v2[2];
 + static double accu;
 + static double y[2];
 + static double vn1;
 + accu=sample/​2+coef[0][2]*v1[0]+coef[0][4]*v2[0];​
 + vn1 = 2* accu;
 + accu=coef[0][0]*vn1+coef[0][1]*v1[0]+coef[0][3]*v2[0];​
 + y[0]=2*accu;​
 +
 + v2[0]=v1[0];​
 + v1[0]=vn1;​
 +
 + accu=y[0]/​2+coef[1][2]*v1[1]+coef[1][4]*v2[1];​
 + vn1 = 2* accu;
 + accu=coef[1][0]*vn1+coef[1][1]*v1[1]+coef[1][3]*v2[1];​
 + y[1]=2*accu;​
 +
 + v2[1]=v1[1];​
 + v1[1]=vn1;​
 +
 + sample=y[1];​
 +
 +  return( sample);
 +}
 +</​code>​
 +===== 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.1515836880.txt.gz · Poslední úprava: 2018/01/13 10:48 autor: Ondřej Fišer