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

STM32: Синхронизация таймеров

Контроллер STM32L151. Стоит необходимость очень точного (до тика контроллера) измерения времени между некоторыми событиями. Последовательность событий такая:

1) Дергаю ногой 1, в этот момент надо начать отсчет времени.

2) В момент появления сигнала на ноге 2 нужно сохранить посчитанный временой интервал, дернуть ногой 3 и стартонуть отсчет второго интервала, при этом сделать это всё максимально синхронно!

3) В момент появления сигнала на ноге 4 сохранить второй временой интервал. На этом всё.

Собственно вопрос в том, как так по хитрому настроить срабатывание таймеров, чтобы сделать всё этом максимально синхронно? Сразу уточню, что ноги подключена как попало, поэтому использовать их как внешний триггер не получится.

Изменено пользователем Haamu

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


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

Сразу уточню, что ноги подключена как попало, поэтому использовать их как внешний триггер не получится.

Тушите свет, сливайте воду, все расходимся.

Для начала надо придумать схему синхронизации таймеров (внутри STM32 их много, они хитрые и дают множество вариантов взаимодействия). Потом распределить ноги, потом рисовать схему и плату.

А вот так задним числом - без вариантов.

 

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

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


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

Собственно вопрос в том, как так по хитрому настроить срабатывание таймеров, чтобы сделать всё этом максимально синхронно?

Ну, в случае если запуск точности не требует - то можно. Весь смысл - не вылезать из прерывания, а лишь переходить из одного - в другое. Код прерывания разместить в памяти. Не в курсе - но если есть CCRAM - то только там. Только таким способом можно быть 100% уверенным в нулевой латентности событий.

 

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


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

Достаточно одного таймера с двумя input capture. Настраиваете параметры триггера и прерывание на второй таймер ставите. В прерывании считаете разность в регистрах, что и есть точное время между событиями. Обязательно считать в беззнаковой арифметике, тогда переполнение таймера между срабатываниями не исказит результат.

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


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

2) В момент появления сигнала на ноге 2 нужно сохранить посчитанный временой интервал, дернуть ногой 3 и стартонуть отсчет второго интервала, при этом сделать это всё максимально синхронно!

Ну как бы уже видно, что "до тика процессора" у вас не получится.

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


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

А в случае, если все-же завести эти сигналы на нужные ноги контроллера, как тогда это можно настроить и какие сигнала на какие ноги заводить?

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


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

А в случае, если все-же завести эти сигналы на нужные ноги контроллера, как тогда это можно настроить и какие сигнала на какие ноги заводить?

Ну так Tarbal рассказал, как надо:

Достаточно одного таймера с двумя input capture. Настраиваете параметры триггера и прерывание на второй таймер ставите. В прерывании считаете разность в регистрах, что и есть точное время между событиями. Обязательно считать в беззнаковой арифметике, тогда переполнение таймера между срабатываниями не исказит результат.

Даташит вроде бы говорит, что таймеры TIM2, TIM3 и TIM4 могут тактироваться на частоте процессора. Выбирайте любой из них, подключайте 2 канала - и вперёд.

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


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

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

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

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

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

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

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

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

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

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