уже совсем незнаю что делать.
Вот прерывание по захвату диапазон частоты 0-1500Гц, неправильно меряет. TIM2 настроен с частотой 24МГц, захват по переднему фронту с нулевым фильтром, по идее TIM2 не будет переполняться при частоте больше 366Гц, при входном сигнале 150Гц, 30Гц заходит в условие if(perepolnenia_T2==0) когда perepolnenia_T2=0, что впринципе указавает на то что либо таймер не успевает переполниться, что ерунда какаято получается. Подскажите какая особенность может в работе с захватом? Ну погрешность, но не такая же.
Код
void TIM2_IRQHandler(void)
{
if(TIM_GetITStatus(TIM2,TIM_IT_CC1)!=RESET)
{
TIM2->SR = (uint16_t)~TIM_IT_CC1;
TIM2->CNT=0;
u32 temp_freq=freq;
count_deg_A=0;
count_deg_C=180;
if(perepolnenia_T2==0)
{
freq=(TIM2->CCR1)/10;
freq=FREQ_CPU/freq; }
}
else
{
temp_freq=(TIM2->CCR1)+0xFFFF*perepolnenia_T2;
temp_freq=temp_freq/10;
freq=(uint16_t)(FREQ_CPU/temp_freq);
}
perepolnenia_T2=0;
n_speed=6*freq/Z_ROTOR;
}
if(TIM_GetITStatus(TIM2,TIM_IT_Update)!=RESET)
{
TIM2->SR = (uint16_t)~TIM_IT_Update;
perepolnenia_T2++;
if(perepolnenia_T2>3001)
{
freq=0;
n_speed=0;
}
}
}
Или может есть у кого исходник для определения частоты сигнала в диапазоне 0-1500 Гц.
Сообщение отредактировал ELEKTROS - Sep 15 2011, 13:38