Individální projekty MPOA

Mikroprocesory s architekturou ARM

Uživatelské nástroje

Nástroje pro tento web


2017:vib-analysis

Zadání

Naprogramujte na vývojovém kitu s STM32F407VET6 program pro kompletní zpracování analogového signálu z jednoosého akcelerometru, zahrnující vstupní FIR filtry, detekci otáček a FFT analýzu. Výsledky FFT ukládejte na SD kartu a RMS hodnotu vibrací posílejte v reálném čase přes UART do PC.

Úvod

V současné době Průmyslu 4.0 je velkým trendem měření různých veličin během výrobního procesu. Měření vibrací je jednou ze složek, které se v mnoha společnostech monitorují. V minulosti měli některé společnosti speciálního člověka, který stroje obcházel a sluchem „kontroloval“ kondici ložisek, dnes tyto lidi nahrazuje program, který má v počítači na ploše oddělení údržby.

Průběžným měřením vibrací u rotačních stroj je možné zjisti například kondici ložisek, nesouosoti hřídelí nebo uvolnění mechanických součástí. Velkou výhodou tohoto systému je možnost předejít závadě a odstavení výrobní linky. Opravu je možné pak provést v plánovaném termínu.

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í

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í: 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:

SW řešení

Ovládací software a jeho hlavní části popisuje následující obrázek:

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ů:

 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;
     }

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.

Zdrojový kód IIR filtru složeného ze dvou bloků:

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);
}

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: 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:

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);
}

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:

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.txt · Poslední úprava: 2018/01/14 11:22 autor: Ondřej Fišer