Individální projekty MPOA

Mikroprocesory s architekturou ARM

Uživatelské nástroje

Nástroje pro tento web


2019:hb100-radar

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
2019:hb100-radar [2020/01/19 19:06]
Tuan Ha [Realizace]
2019:hb100-radar [2020/01/20 16:48] (aktuální)
Tuan Ha
Řádek 1: Řádek 1:
-====Úvod====+=====Úvod=====
 Tato práce se zabývá návrhem a realizací radarového čidla HB100. Jedná se o senzor měření rychlosti, jehož princip je založený na Doplerově jevu. Výsledná frekvence je dána rozdílem přijaté a vyslané frekvence Tato práce se zabývá návrhem a realizací radarového čidla HB100. Jedná se o senzor měření rychlosti, jehož princip je založený na Doplerově jevu. Výsledná frekvence je dána rozdílem přijaté a vyslané frekvence
 (10.525 GHz). Modul má výstup pro analogový signál, který chrakterizuje detekovaný pohyb (sinusový signál o frekvenci dané rychlostí objektu). Tento signál bylo nutno zesílit, proto byla vztvořena externí destička, která mimo jiné slouží i k napájení senzoru (+5V). (10.525 GHz). Modul má výstup pro analogový signál, který chrakterizuje detekovaný pohyb (sinusový signál o frekvenci dané rychlostí objektu). Tento signál bylo nutno zesílit, proto byla vztvořena externí destička, která mimo jiné slouží i k napájení senzoru (+5V).
Řádek 5: Řádek 5:
 Přenos je realizován pomocí virtuálního COM portu. Přenos je realizován pomocí virtuálního COM portu.
  
-====Realizace====  +=====Realizace===== 
-Na obrázku je schéma externí destičky. Velikost zesílení byla zvolena tak, aby bylo možné detekovat pohyb v přímé blízkosti senzoru pro jednodušší testování. +====Destička==== 
-{{tha:​tha_deska.png}}+Na obrázku je schéma externí destičky. Velikost zesílení byla zvolena tak, aby bylo možné detekovat pohyb v přímé blízkosti senzoru pro jednodušší testování.Výsledný analogový signál ze senzoru je přiveden na AD převodník ADC 1 (pin PA1)\\ 
 +{{2019:​tha:​schema.png?​350}} ​  ​{{2019:​tha:​tha_deska.png?250}}\\ 
 +====FFT==== 
 +K vytvoření firmwaru sloužil nástroj STM32CubeMX,​ schopný generovat kód s již nakonfigurovanými periferiemi (ADC, VCP ..). Jako uživatelské rozhraní posloužilo IDE od IAR EW, které má knihovnu CMSIS - DSP v základu.\\ 
 +CMSIS nabízí mnoho způsobů výpočtu spektra, mezi nejpoužívanější patří výpočet komplexní (CFFT) a reálného (RFFT) FFT. V kódu jsou implementovány oba způsoby a na následujících obrázcích je jejich srovnání. Obě dvě spektra jsou měřeny bez pohybu ve vnějším okolí.\\
  
-====Výsledky==== +{{2019:​tha:​RFFT.png?​350}} ​  ​{{2019:​tha:​CFFT.png?​350}}\\ 
-  +Na levém obrázku je spektrum RFFT a na pravém CFFT (resp. jeho modul). Oproti CFFT má RFFT jednodušší výpočet, ale vykazuje vyšší zašumění spektra. Pro realizaci byl vybrán CFFT s výpočtem modulu. Data byly vyextrahovány z debuggeru IAR a vykresleny v matlabu.\\
-====Zdrojové kódy====+
  
-====Závěr====+Pro přesné určení frekvence z modulu je nutné nastavit rozlišení spekrta. Toto rozlišení je dané velikostí tzv. "​Binu"​. Bin je disktrétní elementátrní hodnota vypočteného spektra. Výpočet binu se realizuje podílem - vzorkovací frekvence/​počet prvků, kde maximální hodnota prvků je 2048 a vzorkovací frekvence je dána nstavenou rychlostí ADC. Minimální vzorkovací frekvence ADC je 1,3125 MHz (předdělička 16 pro PCLK2 a 8 pro samotné ADC). 
 +S touto frekvencí vychází velikost binu (tedy i minimální rozlišení) na 641 Hz, takto hrubá velikost je nevhodná (chůze ​100Hz). Proto je mezi vzorky vloženo úmělé zpoždění k snížení vzorkovací frekvence. Nevýhodou této metody je, že nelze přesně určit velikost vzorkovací frekvence, ta je nyní dána zpožděním HAL_delay a dobou provedení instrukcí (navzorkování ADC, uložení atd.). Předpokládám vyšší uplatnění doby zpoždění HAL_delay(0.8). Vzorkovací frekvence bude tedy 1250 Hz a velikost binu 0.61 Hz. 
 +<code c> 
 +    for(int i 0;i < TEST_LENGTH_SAMPLES;​i++){ ​ //delka 2048 
 +  
 + HAL_ADC_PollForConversion(&​hadc1,​ HAL_MAX_DELAY);​ 
 + testInput[i] ​HAL_ADC_GetValue(&​hadc1);​ 
 +                        HAL_Delay(0.8);//​ snizeni vzorkovaci frekvence 
 + 
 +
 +</​code>​ 
 + 
 +====Detekce==== 
 +Po navzorkovaní je na vstupní data aplikována CFFT a kde je poté detekován bin s nejvyšší hodnotou pomocí arm_max_f32(). Před detekcí je navíc nulována stejnosměrná složka, aby nedošlo k její detekci. Pokud maximální hodnota vyhovuje podmínce tresholdu je poslána pomocí VCP do PC. Podmínka treshold se uplatní v případě, že v okolí není detekován pohyb. Potom do PC vyšle hodnotu 0. 
 +<code c> 
 +    /*vypocet CFFT*/ 
 +    arm_cfft_f32(&​arm_cfft_sR_f32_len1024,​ testInput, ifftFlag, doBitReverse);​ 
 +    /* vypocet modulu */ 
 +    arm_cmplx_mag_f32(testInput,​ testOutput, fftSize);  
 +    /*nulovani stejnosmerne slozky*/ 
 +    testOutput[0] = 0; 
 +    /*vypocet max hodnoty modulu*/ 
 +    arm_max_f32(testOutput,​ fftSize, &​maxValue,​ &​testIndex);​ 
 +     
 +    /*podminka - citlivost detekce pohybu*/ 
 +    if(maxValue <= THRESHOLD) 
 +      testIndex = 0; 
 +    position = testIndex;  
 +</​code>​ 
 +====VCP (Virtual COM port)==== 
 +Dalším krokem je poslání výsledku pomocí sériové linky do PC, kde jsou data zpracovány. Ty jsou ve firmwaru poslány následovně. 
 +<code c> 
 +    sprintf(buffer,"​%d\r\n0000",​position);​  
 +    CDC_Transmit_FS(buffer,​6);//​ max 4ciferne cislo + /r + /n = 6 
 +</​code>​ 
 +V proměnné position je uložena aktuální pozice maximálního binu. Tato hodnota je uložena jako string do buffer a prvních 6 bytů buffer je posláno po lince. Na příjmací straně jsou pomocí knihovny serial (python) data dekódovány po znak\n včetně. Na příjmací strně může dojít k problémům ve vyrovnávací paměti. Pokud z vývojové desky například posíláme jednociferné číslo například 1, tak poslané data budou mít tvar buffer = "1 /r /n X X X " kde X představují nahodilé hodnoty. Skript v pythonu dekóduje hodnotu 1 bez problému, ale ve vyrovnávací paměti zůstanou zbylé tři nedefinované hodnoty, které se připojí na začítek dalších dat. Problém řeší definování hodnot X jako nuly, které výslednou hodnotu neovlivňují.\\ 
 + 
 +Skript v pythonu po spuštění vykresluje graf rychlosti (km/h) v reálném času. 
 +<code python>​ 
 +    data = data*((1/​0.0008)/​2048) #prepocet bin->​frekvenci 
 +    y.append((data)/​(19.49))#​ prepocet na rychlost km/h datasheet 
 +</​code>​ 
 + 
 + 
 + 
 +=====Výsledky===== 
 +Ukázka videa:​https://​www.youtube.com/​watch?​v=JGoTKWbEG4E&​feature=youtu.be 
 + 
 +Pro kontrolu byly navzorkovány data stejného pohybu a transformována do spektra v Matlabu. Na obrázku je znázorněné spektrum pohybu větráku. Spektrální čára 654.bin odpovídá rychlosti 20,48 km/h a 327.bin odpovídá 10,24 km/h. Na binu 1024 dochází k zrcadlení spektra. Detektor není vytvořen k detekci kruhového pohybu, proto dochází ke generaci dvou harmonických signálů. 
 +{{ 2019:​tha:​spektrum.png }} 
 +====Zdrojové kódy==== 
 +https://​mega.nz/#​F!L0cUwKLJ!BFwxEzVCoT_sDPsceQKR3Q
2019/hb100-radar.1579457213.txt.gz · Poslední úprava: 2020/01/19 19:06 autor: Tuan Ha