<p style="padding:0 0 0 0; margin:0 0 0 0;">zdravim,</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;">chtel jsem s tim merenim nejdrive zaukolovat studenta, ktery zrovna neco s merenim frekvence dela, ale projevil se jako malo akcni, tak jsem to zkusil napsat sam a mam tu takovou zahadu...</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;">- vzal jsem 32f469 discovery, ktery byl zrovna po ruce a umi citac na 180MHz.. </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;">- pomoci 16-bit TIM8 a Input capture 1 na nabeznou a Input capture 2 na sestupnou hranu plnim v preruseni dve pole temi capture hodnotami</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;">- po skonceni mericiho intervalu to prepocitam - ze dvou sousednich capture vypocitam interval mezi nimi.. (pro pozadovanou frekvenci cca 2000Hz to je uz pres periodu citace.., ale to neva, staci jeden if a dva ruzne vypocty..)</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;">- sectu vsechny intervaly a vydelim poctem a spocitam z toho frekvenci.. tohle funguje fajn.. rozliseni na mHz sedi s generatorem.. (ted to mam uz pres komparator, z generatoru jde sinus...)</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;">ted jsem jeste chtel pridat preruseni od preteceni citace, kde se bude jen inkrementovat promenna, abych mohl porovnat co se nameri pokud vezmu jen prvni a posledni hranu a to mezi nimi spocitam jako n*delka citace..</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;">no nicmene po pridani toho preruseni zaclo blbnout mereni frekvence, uz to nebylo 2000.003 Hz (s generatorem nastavenym na 2k), ale zacly se tam objevovat cisla jako 1988 apod.. </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;">to se asi vyresilo zmenou preempt. priority toho preruseni HAL_NVIC_SetPriority(TIM8_UP_TIM13_IRQn, 1,0); coz uplne nechapu proc.. (capture preruseni je 0,0)</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;">myslel jsem, ze se se proste nejdriv vykona jedno a pak druhe, nic moc dlouheho se tam nedela, aby to tech radove 250us co je mezi hranami nestihalo.. zkousel jsem i "odstranit" defaultni HAL_TIM_IRQHandler(&htim8); (jen vynulovat dany flag, ale to take nepomohlo..)</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;">takze ted funguje mereni frekvence, ale ten citac preteceni dava na muj vkus prilis rozdilne vysledky.. 3280-3287 , cekal bych maximalne rozdil o 1-2.. zacatek a konec mericiho intervalu </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;">merici interval je dany HAL_Delay(1200); coz asi sedi dobre, protoze pocet capture udalosti za tento interval se lisi max. o jednicku..</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;">tak kdyby prosim nekdo tusil co delam spatne tak budu rad, chtel jsem to zitra jet omerit do Pruhonic s tou protonovou elektronikou...</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;">diky</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;">v.p.</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;">prumer f, stdev, min, max, pocet capture udalosti, to same pro sestupnou hranu, pocet overflow udalosti timeru..</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;">zhruba po pulce jsem zvysil o 1mHz frekvenci generatoru</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;">2000.0036 000.25283 1999.0775 2000.8330 02403 2000.0040 000.25277 1999.1441 2000.8108 02403 03280</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;">2000.0037 000.25213 1999.0775 2000.7663 02403 2000.0037 000.25873 1999.0997 2001.1000 02403 03287</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;">2000.0038 000.25065 1998.8999 2000.9442 02403 2000.0035 000.25082 1999.1663 2000.8330 02403 03284</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;">2000.0036 000.25054 1999.1219 2000.9665 02403 2000.0037 000.26431 1999.1663 2000.7663 02403 03284</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;">2000.0036 000.25113 1999.1441 2000.9220 02403 2000.0038 000.25522 1998.9887 2000.8553 02403 03284</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;">2000.0038 000.25457 1999.2107 2000.8330 02403 2000.0037 000.25393 1999.0997 2000.8108 02403 03285</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;">2000.0039 000.25858 1998.9887 2000.8108 02403 2000.0039 000.25096 1999.1663 2000.8775 02403 03284</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;">2000.0047 000.24779 1999.2107 2000.8553 02403 2000.0047 000.24856 1999.1441 2000.8330 02403 03285</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;">2000.0048 000.25248 1999.0775 2000.8998 02404 2000.0045 000.24580 1999.1885 2000.8330 02403 03282</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;">2000.0047 000.24880 1999.1441 2001.0555 02403 2000.0048 000.25746 1999.1441 2000.8998 02403 03282</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;">2000.0048 000.25074 1999.2107 2000.8330 02403 2000.0047 000.25710 1999.1441 2000.8108 02403 03283</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;">main:</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;">MX_GPIO_Init();</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> MX_TIM1_Init();</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> MX_USART3_UART_Init();</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> MX_USART6_UART_Init();</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> MX_TIM2_Init();</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> MX_TIM8_Init();</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> /* USER CODE BEGIN 2 */</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, SET);</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, SET);</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> HAL_GPIO_WritePin(LED3_GPIO_Port, LED3_Pin, SET);</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> HAL_GPIO_WritePin(LED4_GPIO_Port, LED4_Pin, SET);</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> HAL_TIM_IC_Start_IT(&htim8, TIM_CHANNEL_1);<span style="white-space: pre;"> </span>//enable capture interrupt</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> HAL_TIM_IC_Start_IT(&htim8, TIM_CHANNEL_2);</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> HAL_Delay(20);</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> TIM8->DIER &= 0xFFF8; <span style="white-space: pre;"> </span>//disable IC1, IC2, Overflow</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> /* USER CODE END 2 */</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> /* Infinite loop */</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> /* USER CODE BEGIN WHILE */</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> while (1)</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> {</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> /* USER CODE END WHILE */</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> /* USER CODE BEGIN 3 */</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>// HAL_UART_Transmit_IT(&huart3, (uint8_t*)aTxStartMessage, 10);</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span> HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, RESET);</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span> if(trigger_flag>0){</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span> trigger_flag = 0;</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span> periodcount = 0;</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span> index1 = 0;</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span> index2 = 0;</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span> freq1 = 0;</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span> freq2 = 0;</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span> stdev1 = 0;</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span> stdev2 = 0;</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span> suma1 = 0;</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span> suma2 = 0;</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span> freq1_min = 0;</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span> freq1_max = 0;</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span> freq2_min = 0;</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span> freq2_max = 0;</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span> HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, RESET);</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span> //HAL_TIM_IC_Start_IT(&htim8, TIM_CHANNEL_1);<span style="white-space: pre;"> </span>//enable capture interrupt</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span> //HAL_TIM_IC_Start_IT(&htim8, TIM_CHANNEL_2);</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span> TIM8->SR &= 0xFFFFFFF8; <span style="white-space: pre;"> </span>//clear flags?</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span> HAL_Delay(2);</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span> TIM8->DIER |= 0x07; <span style="white-space: pre;"> </span>//enable IC1, IC2, Overflow</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span> HAL_Delay(1200);<span style="white-space: pre;"> </span>//measure for 1.2 sec</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span> //HAL_TIM_IC_Stop_IT(&htim8, TIM_CHANNEL_1);<span style="white-space: pre;"> </span>//disable</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span> //HAL_TIM_IC_Stop_IT(&htim8, TIM_CHANNEL_2);</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span> TIM8->DIER &= 0xFFFFFFF8; <span style="white-space: pre;"> </span>//disable IC1, IC2, Overflow</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span> HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, SET);</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span> HAL_GPIO_WritePin(LED3_GPIO_Port, LED3_Pin, RESET);</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span> if(index1>10){</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span> for(unsigned int il=0; il<(index1-1);il++){<span style="white-space: pre;"> </span>//rising edge</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span> if(incap1[il]<incap1[il+1]){</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span> rescap1[il]=65536-incap1[il]+incap1[il+1];</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span> }else{</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span> rescap1[il]=131072-incap1[il]+incap1[il+1];</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span> };</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span> };</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span> for(unsigned int ik=0; ik<(index1-1);ik++){</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span> suma1 += rescap1[ik];</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span> };</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span> freq1 = index1-1;</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span> freq1 /= suma1;</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span> freq1 *= f_constant;</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span> er_sum = 0;</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span> freq1_min = freq1;<span style="white-space: pre;"> </span>//initialize the min-max freq values...</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span> freq1_max = freq1;</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span> for(unsigned int im=0; im<(index1-1);im++){</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span> temp_f = f_constant;</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span> temp_f /= rescap1[im];</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span> if(temp_f < freq1_min) {freq1_min = temp_f;};</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span> if(temp_f > freq1_max) {freq1_max = temp_f;};</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span> er_f = freq1;</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span> er_f -= temp_f;</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span> pow_f = er_f;</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span> pow_f *=er_f;</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span> er_sum +=pow_f;</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span> };</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span> stdev1 = er_sum;</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span> stdev1 /= (index1-2);<span style="white-space: pre;"> </span>//std.dev. suma(diff^2)/(n-1)</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span> stdev1 = sqrt(stdev1);</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span> };</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span> if(index2 > 10){</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>stejne jako pro rising edge, akorat index2...</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span> };</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span> HAL_GPIO_WritePin(LED3_GPIO_Port, LED3_Pin, SET);</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span> HAL_GPIO_WritePin(LED4_GPIO_Port, LED4_Pin, RESET);</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span> sprintf(buffers,"%09.4f %09.5f %09.4f %09.4f %05u ",freq1,stdev1,freq1_min,freq1_max,index1);</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span> strl = strlen(buffers);</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span> HAL_UART_Transmit_IT(&huart3, buffers, strl);</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span> HAL_Delay(10);</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span> HAL_UART_Transmit_IT(&huart6, buffers, strl);</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span> HAL_Delay(10);</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span> sprintf(buffers,"%09.4f %09.5f %09.4f %09.4f %05u %05u\r\n",freq2,stdev2,freq2_min,freq2_max,index2, periodcount);</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span> strl = strlen(buffers);</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span> HAL_UART_Transmit_IT(&huart3, buffers, strl);</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span> HAL_Delay(10);</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span> HAL_UART_Transmit_IT(&huart6, buffers, strl);</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span> HAL_Delay(10);</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span> HAL_GPIO_WritePin(LED4_GPIO_Port, LED4_Pin, SET);</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span> }else{</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span> HAL_Delay(1);</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span> };</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> };</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;">preruseni:</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;">void TIM8_UP_TIM13_IRQHandler(void)</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;">{</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> /* USER CODE BEGIN TIM8_UP_TIM13_IRQn 0 */</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>if(TIM8->SR & 0x01){<span style="white-space: pre;"> </span>//timer overflow</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span> periodcount++;</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;">//<span style="white-space: pre;"> </span> TIM8->SR &= 0xFFFFFFFE;</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>};</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> /* USER CODE END TIM8_UP_TIM13_IRQn 0 */</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> HAL_TIM_IRQHandler(&htim8);</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> /* USER CODE BEGIN TIM8_UP_TIM13_IRQn 1 */</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> /* USER CODE END TIM8_UP_TIM13_IRQn 1 */</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;">}</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;">/**</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> * @brief This function handles TIM8 capture compare interrupt.</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> */</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;">void TIM8_CC_IRQHandler(void)</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;">{</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> /* USER CODE BEGIN TIM8_CC_IRQn 0 */</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> if(TIM8->SR & 0x02){<span style="white-space: pre;"> </span>//Input capture channel 1</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> <span style="white-space: pre;"> </span> incap1[index1]= TIM8->CCR1;</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> index1++;</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> // TIM8->SR &= 0xFFFFFFFD;</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> };</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> if(TIM8->SR & 0x04){<span style="white-space: pre;"> </span>//Input capture channel 2</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> <span style="white-space: pre;"> </span> incap2[index2]= TIM8->CCR2;</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> <span style="white-space: pre;"> </span> index2++;</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> <span style="white-space: pre;"> </span>// TIM8->SR &= 0xFFFFFFFB;</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> };</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> /* USER CODE END TIM8_CC_IRQn 0 */</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> HAL_TIM_IRQHandler(&htim8);</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> /* USER CODE BEGIN TIM8_CC_IRQn 1 */</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> /* USER CODE END TIM8_CC_IRQn 1 */</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;">}</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;">volatile unsigned int incap1[5000];</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;">volatile unsigned int incap2[5000];</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;">volatile unsigned int index1 = 0;</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;">volatile unsigned int index2 = 0;</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;">volatile unsigned int periodcount = 0;</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;">volatile unsigned char trigger_flag = 0;</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;">unsigned long int rescap1[5000];</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;">unsigned long int rescap2[5000];</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;">unsigned long int suma1=0;</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;">unsigned long int suma2=0;</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;">unsigned long int avg1=0;</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;">unsigned long int avg2=0;</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;">unsigned long int esum1=0;</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;">unsigned long int esum2=0;</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;">unsigned int diff1 = 0;</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;">unsigned int diff2 = 0;</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;">unsigned long int power1 = 0;</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;">unsigned long int power2 = 0;</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;">unsigned char strl = 0;</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;">char buffers[200];</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;">double freq1 = 0;</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;">double freq2 = 0;</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;">double freq1_min = 0;</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;">double freq1_max = 0;</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;">double freq2_min = 0;</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;">double freq2_max = 0;</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;">double temp_f = 0;</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;">double er_f = 0;</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;">double pow_f = 0;</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;">double er_sum = 0;</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;">double stdev1 = 0;</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;">double stdev2 = 0;</p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>
<p style="padding:0 0 0 0; margin:0 0 0 0;">______________________________________________________________<br />
> Od: "Jan Waclawek" <konfera@efton.sk><br />
> Komu: "HW-news" <hw-list@list.hw.cz><br />
> Datum: 23.10.2019 12:36<br />
> Předmět: Re: mereni frekvence s stm32<br />
></p>
No dobre, ale aj v tom PLL je pointa v tom filtri.<br />
<br />
Ak sa urobi ten filter dobre, tak ten capture/DMA na hrany bude fungovat<br />
dobre, a potom sa moze pouzit aj fourierka ako pan kolega Mrazik bol<br />
spomenul.<br />
<br />
Ale ak je toho sumu vela, tak z toho to capture/DMA "povybera" niektore<br />
hrany, a z toho podla mna uz nic rozumneho nepojde vytiahnut.<br />
<br />
Z cite technickej stranky, ak by mal pan kolega Petrucha problem rozchodit<br />
to capture/DMA, myslim, ze mu tu viaceri vieme s tym poradit/pomoct, je to<br />
relativne lahke cvicenie s asi tuctom registrov.<br />
<br />
wek<br />
<br />
<br />
<br />
----- Original Message ---------------<br />
<br />
>To bylo kvůli tomu, aby se prostým počítáním period změřil kmitočet s rozlišením lepším než 1Hz, <br />
>když je k dispozici měřicí okno do 2s (viz původní příspěvek).<br />
>Myslím že to tak bylo, měřilo se 1s a pokud by bylo PLL 100x, tak byl výsledek s rozlišením 0,01Hz.<br />
>Jak jsem psal, bylo to realizované standardní logikou, nebyl tam žádný MCU.<br />
><br />
>Tomáš<br />
><br />
><br />
><br />
>To ze sa da pomocou PLL a vhodneho filtra lovit zo sumu je jasne.<br />
>Ako tomu ale pomoze vynasobit frekv. PLL ked sa tym vynasobi aj chyba?<br />
>Tu by som povedal, ze diablik vysokeho nasobku spocival v niecom inom <br />
> <br />
>j.<br />
> <br />
>From: Hw-list [mailto:hw-list-bounces@list.hw.cz] On Behalf Of Tomáš Hamouz<br />
>Sent: 23. októbra 2019 11:53<br />
>To: HW-news<br />
>Subject: Re: mereni frekvence s stm32<br />
> <br />
>Kdysi jsem narazil na krásný magnetometr, řešený diskrétní logikou, ale neuložil si ho a už nenašel:-(<br />
>(kdyby si někdo vzpomněl, prosím pošlete odkaz)<br />
><br />
>Do jaké míry tomu měření můžete pomoct analogovým HW?<br />
>Princip byl takový, že se podle přijatého signálu pomocí PLL řídil VCO na nějakém vysokém násobku (100x?) a měřil se kmitočet toho VCO.<br />
>PLL se chytne i na zašuměném signálu a zbytek je už jednoduchý. <br />
><br />
>Tomáš<br />
><br />
><br />
>> Zdravim,<br />
>> <br />
>> kdyz bych chtel pomoci STM32 merit co nejpresneji frekvenci v<br />
>> rozsahu cca 1000-3000 Hz, jak na to? Signal je k dispozici cca 1-2<br />
>> s, behem teto doby je potreba udelat co nejpresnejsi mereni.. signal<br />
>> je pred komparatorem dost zasumeny (SNR cca 10-25dB) - je to pro<br />
>> hratky s protonovym precesnim magnetometrem, kdyby to nekoho<br />
>> zajimalo...(pozdeji treba s Overhauserovym magnetometrem)<br />
>> <br />
>> Pokud jsem to spravne pochopil, tak High Resolution Timer ma sice<br />
>> nejake "events" priraditelne treba k vystupu komparatoru, ale jinak asi neni pro tento ucel vhodny?<br />
>> <br />
>> Cili pouzit normalni 32-bit general purpose timer, taktovat ho co<br />
>> nejvyssi frekvenci - 180MHz treba pro STM32F446RE.. a pouzit input<br />
>> capture.. chteli bychom zkusit jestli ovzorkovani vsech nabeznych a<br />
>> sestupnych hran oproti prostemu zmereni prvni a posledni hrany treba<br />
>> z baliku 3000 period signalu 2000Hz (1.5s delka mereni) prinese nejake zlepseni..<br />
>> <br />
>> Diky<br />
>> V.P.<br />
>> _______________________________________________<br />
>> HW-list mailing list - sponsored by www.HW.cz<br />
>> Hw-list@list.hw.cz<br />
>> <a href="http://list.hw.cz/mailman/listinfo/hw-list">http://list.hw.cz/mailman/listinfo/hw-list</a><br />
_______________________________________________<br />
HW-list mailing list - sponsored by www.HW.cz<br />
Hw-list@list.hw.cz<br />
<a href="http://list.hw.cz/mailman/listinfo/hw-list">http://list.hw.cz/mailman/listinfo/hw-list</a><br />