реклама на сайте
подробности

 
 
> Сброс таймера захвата STM32F100, Автоматический сброс
ELEKTROS
сообщение Jul 11 2011, 10:36
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 294
Регистрация: 29-06-11
Пользователь №: 65 952



Скажите к примеру конфирурирую TIM2 на захват:
Код
  TIM_ICInitStruct.TIM_Channel=TIM_Channel_1;
  TIM_ICInitStruct.TIM_ICPolarity=TIM_ICPolarity_Falling;
  TIM_ICInitStruct.TIM_ICSelection=TIM_ICSelection_DirectTI;
  TIM_ICInitStruct.TIM_ICPrescaler=TIM_ICPSC_DIV1;
  TIM_ICInitStruct.TIM_ICFilter=0;
  TIM_ICInit(TIM2, &TIM_ICInitStruct);

Будет ли таймер сбрасываться сам при захвате? или нужно обнулять счётчик вручную? или где еще чего прописать чтобы он сам сбрасывался?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 5)
AHTOXA
сообщение Jul 11 2011, 10:46
Сообщение #2


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Не будет. Обнулять вручную тоже не нужноsm.gif
Представьте, что вы используете не один, а несколько модулей захвата, и каждый из них сбрасывает счётчик. Ерунда получится.
Просто запоминайте состояние предыдущего захвата, и высчитывайте разницу.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
ELEKTROS
сообщение Jul 11 2011, 10:59
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 294
Регистрация: 29-06-11
Пользователь №: 65 952



Так я же один всево то использую sm.gif.
Конкретна задача: сигнал частотой от 0 до 1500Гц, дискретность 1 герц. Тактирование ядра, да и таймера 24 МГц, приходиться три различных делителя таймера использовать: 2000, 15,1, чтобы покрыть весь диапазон, и считаю что лучше производить сброс, чем делать условие и разность двух значений.

Сообщение отредактировал ELEKTROS - Jul 11 2011, 11:03
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Jul 11 2011, 11:15
Сообщение #4


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(ELEKTROS @ Jul 11 2011, 16:59) *
Так я же один всево то использую sm.gif.

Это покаsm.gif
Цитата(ELEKTROS @ Jul 11 2011, 16:59) *
считаю что лучше производить сброс, чем делать условие и разность двух значений.

Условия не надо, просто разность. Ну или если уж так охота делать сброс, то вручную. Хотя это сильно снизит точность, потому что добавится время на вход в прерывание.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
ELEKTROS
сообщение Jul 11 2011, 11:23
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 294
Регистрация: 29-06-11
Пользователь №: 65 952



Прерывания и так использую, там с фронтом некоторый процесс синхронизировать требуется.
Go to the top of the page
 
+Quote Post
ELEKTROS
сообщение Sep 15 2011, 13:12
Сообщение #6


Местный
***

Группа: Участник
Сообщений: 294
Регистрация: 29-06-11
Пользователь №: 65 952



уже совсем незнаю что делать.
Вот прерывание по захвату диапазон частоты 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
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 20:19
Рейтинг@Mail.ru


Страница сгенерированна за 0.0138 секунд с 7
ELECTRONIX ©2004-2016