Перейти к содержанию
    

STM32F0 - таймер: сколько "тиков" была на входе "1"

Добрый день

Никак не соображу, возможно ли таймер заставить посчитать количество тактов, в течение которых на каком-то входе была "1"?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

9 minutes ago, Arlleex said:

На каком-либо произвольном - нет.

На входе захвата - вполне.

Хмм.. Как?

Вход захвата вполне устраивает, но никак не соображу как настроить. Там, как я понимаю, только счётный вход по выбираемому фронту

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

18 минут назад, toweroff сказал:

Хмм.. Как?

У практически любого МК таймер можно тактировать от внешнего источника и от внутреннего. Не путайте вход захвата и вход синхронизации таймера.

Таймер, будучи настроенным в режиме захвата (capture mode), считает в выбранном направлении и с настроенной частотой до тех пор, пока на внешнем входе захвата логический уровень не перейдет в определенное, заранее настроенное состояние (например, переход из 0 в 1).

Как настраивать таймер в режим захвата расписано на просторах гугла, в том числе тут. Ну плюс мануал на МК все-таки пошерстите в разделе TIM Capture mode:wink:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

10 minutes ago, Arlleex said:

У практически любого МК таймер можно тактировать от внешнего источника и от внутреннего. Не путайте вход захвата и вход синхронизации таймера.

Таймер, будучи настроенным в режиме захвата (capture mode), считает в выбранном направлении и с настроенной частотой до тех пор, пока на внешнем входе захвата логический уровень не перейдет в определенное, заранее настроенное состояние (например, переход из 0 в 1).

Ну так и я о чём? Именно переход с настраиваемым фронтом + настройка "дребезга". У меня его (перехода) может и вообще не быть - вход может находиться всё время в "0" или "1"

Мне нужно, чтобы таймер, тактируясь от внутреннего источника, в течение определенного времени считал пульсы, в которых некий вход в "1".

Пока только вот какая картина вырисовывается:

1. TIM1 управляет TIM2 и в конце времени счёта вычитывает счётчик TIM3

2. TIM2 генерит с нужной частотой PWM. Выход таймера через "И" подаётся на вход TIM3, настроенный на счёт, допустим, по "rise"-фронту

3. TIM3 просто считает

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 часа назад, toweroff сказал:

Ну так и я о чём? Именно переход с настраиваемым фронтом + настройка "дребезга". У меня его (перехода) может и вообще не быть - вход может находиться всё время в "0" или "1"

Мне нужно, чтобы таймер, тактируясь от внутреннего источника, в течение определенного времени считал пульсы, в которых некий вход в "1".

Пока только вот какая картина вырисовывается:

1. TIM1 управляет TIM2 и в конце времени счёта вычитывает счётчик TIM3

2. TIM2 генерит с нужной частотой PWM. Выход таймера через "И" подаётся на вход TIM3, настроенный на счёт, допустим, по "rise"-фронту

3. TIM3 просто считает

:))

Таймер с двумя/тремя каналами.

Первый канал - захват по пину с однократным запуском таймера и пересбросом по фронту.

Второй канал - на этот же пин с захватом по спаду во второй канал длительности "1" с генерацией прерывания.

Третий канал - в режиме сравнения - туда можно занести таймаут.

Какие примерно длительности нужно ловить и с какой периодичностью импульсов?

Это анти-ШИМ режим таймера.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Можно на одном канале сделать. Если настроить захват по обоим фронтам. Как только произошло событие перехода 0->1 значение счетчика сохранится в регистр захвата t1 - это отправная точка. Далее ждем события перехода 1->0, после которого опять сохранится значение счетчика в регистр захвата - это конечная точка t2. Потом "беззнаковое" вычитание t2 - t1 даст длительность периода в "тиках" таймера. Если будут переполнения, то считать количество переполнений n, и тогда длительность измеряемого периода увеличится на n * разрядность таймера. У меня на F3 так без проблем работает. А т.к. периферия у stm одинаковая почти, то и на F0 скорее всего прокатит. Можно пойти дальше и сделать ведомый таймер, который будет считать количество переполнений таймера-мастера...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В общем так...

В силу мелкого (20 ног) контроллера, используемых методов, необходимой периферии, выведенных на ноги таймеров и прочих пятен на Луне и сошедшихся звёзд, пришлось использовать два таймера и EXTI (один таймер в два канала как раз и задаёт режимы работы устройства, второй засекает время, прерывание пина инкрементирует счётчик)

Работает. Зато перешерстил описание таймеров, много полезного, оказывается :good3:

Те таймеры, которые могут именно иметь SlaveMode, уже заняты пинами другой периферии, отсюда и пляски

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...