Jump to content

    
Sign in to follow this  
SapegoAL

Подсчитать импульсы

Recommended Posts

Добрый день. Процессор stm32f042, хотя думаю что это не принципиально.
Мне надо подсчитать импульсы таймером.
Так как разведена плата, попадает на 3 канал (PB0 [TIM3_CH3])
Пытаюсь настроить согласно даташиту:
1. Включаю тактирование таймера
2. TIM3->CCMR2 = TIM_CCMR2_CC3S_0; // Включаю 3 канал
3. TIM3->CCER = TIM_CCER_CC3P; // По заднему фронту
4. TIM3->SMCR = TIM_SMCR_SMS | TIM_SMCR_TS_1 | TIM_SMCR_TS_0; // Перевести в режим Ext Mode 1
5. TIM3->DIER = TIM_DIER_UIE; // // Включить прерывание по переполнению
Ну и когда идёт счёт
TIM3->CR1 = TIM_CR1_CEN; // Включить таймер

Ноги настроены правильно...
Счёт не идёт.

По схеме таймера в даташите особо непонятно, хотя описано, что в этом Ext Mode 1, вроде как можно. С другой стороны есть разночтение там пишется TI а не CH. И не совсем понятно, допускается ли подключение 3 канала.

Кто делал? Что не так?

Share this post


Link to post
Share on other sites
1 hour ago, SapegoAL said:

5. TIM3->DIER = TIM_DIER_UIE; // // Включить прерывание по переполнению

Что не так сейчас и не вспомню, считал я внешнюю частоту, все работало. Вечером посмотрю, может найду код настройки, если раньше не решится.

Но вод по пункту 5 есть вопрос. В кубеиде (или атоллик) включить прерывания вот так мало, надо еще написать: NVIC_EnableIRQ(TIM16_IRQn); Без этого не работает, во всяком случае у меня и при работе с регистрами. Хотя, может просто не указали этот момент.

Edited by Vlad_G

Share this post


Link to post
Share on other sites

Вот здесь у меня STM32F072 считает импульсы от вентилятора первым каналом таймера 3. Так настраиваю:

RCC->APB1ENR |= RCC_APB1ENR_TIM3EN;	
TIM3->SMCR = TIM_SMCR_TS_2 | TIM_SMCR_TS_0 | TIM_SMCR_SMS; // TS=101, SMS=111 - external trigger on input1					TIM3->CCMR1 = TIM_CCMR1_CC1S_0; // CC1 is input mapped on channel TI1
TIM3->CR1 = TIM_CR1_CE

Так считаю:

void sys_tick_handler(void){
  static uint32_t actr = 0;
  ++Tms;
  if(++actr == 1000){ // RPM counter
    Coolerspeed[0] = TIM3->CNT/2;
    TIM3->CNT = 0;
    actr = 0;
  }	
}
Edited by Eddy_Em
борьба с ветряными мельницами

Share this post


Link to post
Share on other sites
2 часа назад, SapegoAL сказал:

Так как разведена плата, попадает на 3 канал

Описание там, конечно, для сильных духом. Но если внимательно посмотреть на картинку 128 (TI2 external clock connection example) или на описание битов SMS - видно, что на входной мультиплексор поступают сигналы TI1F (выход модуля совпадения канала 1), TI2F (выход модуля совпадения канала 2), TRGI (выход внутреннего триггера), ETRF (выход внешнего триггера, есть только у таймера 2 - TIM2_CH1_ETR), CK_INT (такты системной шины). На вход мультиплексора внутреннего триггера поступают сигналы ITRx (выходы других таймеров), TI1_ED (хз, но канал 1), TI1FP (вход канала 1) TI2FP (вход канала 2), ETRF. как видно, вход канала 3 сюла не заведен. Вывод - считать импульсы с канала 3 не получится. Единственный шанс - если эта же нога также заведена на один из счетных входов таймеров 1, 2, 15 или 14 - тогда один из этих таймеров можно использовать как предделитель и таймером3 считать импульсы с соответствующего входа ITRx, но это не ваш случай - на PB0 выведен только выход TIM1_CH2N. Так что увы - или менять разводку, или настраивать канал 3 на захват и считать прерывания захвата на каждый импульс (но тогда проще считать прерывания EXTI и не мучать таймер).

Share this post


Link to post
Share on other sites

Вот картинка. Жаль, конечно, что ST так сделали, что считать внешние импульсы или обрабатывать энкодер можно лишь на каналах 1 и 2… А еще всякие TIM14 и т.д. не умеют считать! В вышеприведенной железяке сам на это напоролся, разведя плату так, чтобы частоту вращения второго кулера считать первым каналом TIM14, пришлось делать это на EXTI.

2020.11.12_13:49:36.png

Edited by Eddy_Em

Share this post


Link to post
Share on other sites

Всем спасибо за участие. Если честно я так и думал. На картинке видно, что не заведено, но всё таки надеялся... ))
Рядом свободная нога, думал соплю кину, так там TIM14_CH1... ))
Придётся проводничёк кидать на PA8. Там TIM1.ch1.
Может и EXTI можно попробовать, но проц слабенький, скорее всего не буду экспериментировать.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this