Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: STM32: Синхронизация таймеров
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Haamu
Контроллер STM32L151. Стоит необходимость очень точного (до тика контроллера) измерения времени между некоторыми событиями. Последовательность событий такая:
1) Дергаю ногой 1, в этот момент надо начать отсчет времени.
2) В момент появления сигнала на ноге 2 нужно сохранить посчитанный временой интервал, дернуть ногой 3 и стартонуть отсчет второго интервала, при этом сделать это всё максимально синхронно!
3) В момент появления сигнала на ноге 4 сохранить второй временой интервал. На этом всё.
Собственно вопрос в том, как так по хитрому настроить срабатывание таймеров, чтобы сделать всё этом максимально синхронно? Сразу уточню, что ноги подключена как попало, поэтому использовать их как внешний триггер не получится.
scifi
Цитата(Haamu @ Jan 23 2016, 19:04) *
Сразу уточню, что ноги подключена как попало, поэтому использовать их как внешний триггер не получится.

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

Нет, кто-то там наверху мог помочь и сделать "как попало" так, чтобы получилось "как должно быть", но так не бывает.
AVI-crak
Цитата(Haamu @ Jan 23 2016, 23:04) *
Собственно вопрос в том, как так по хитрому настроить срабатывание таймеров, чтобы сделать всё этом максимально синхронно?

Ну, в случае если запуск точности не требует - то можно. Весь смысл - не вылезать из прерывания, а лишь переходить из одного - в другое. Код прерывания разместить в памяти. Не в курсе - но если есть CCRAM - то только там. Только таким способом можно быть 100% уверенным в нулевой латентности событий.
Tarbal
Достаточно одного таймера с двумя input capture. Настраиваете параметры триггера и прерывание на второй таймер ставите. В прерывании считаете разность в регистрах, что и есть точное время между событиями. Обязательно считать в беззнаковой арифметике, тогда переполнение таймера между срабатываниями не исказит результат.
SasaVitebsk
Цитата(Haamu @ Jan 23 2016, 19:04) *
2) В момент появления сигнала на ноге 2 нужно сохранить посчитанный временой интервал, дернуть ногой 3 и стартонуть отсчет второго интервала, при этом сделать это всё максимально синхронно!

Ну как бы уже видно, что "до тика процессора" у вас не получится.
Haamu
А в случае, если все-же завести эти сигналы на нужные ноги контроллера, как тогда это можно настроить и какие сигнала на какие ноги заводить?
scifi
Цитата(Haamu @ Jan 26 2016, 09:44) *
А в случае, если все-же завести эти сигналы на нужные ноги контроллера, как тогда это можно настроить и какие сигнала на какие ноги заводить?

Ну так Tarbal рассказал, как надо:
Цитата(Tarbal @ Jan 24 2016, 07:21) *
Достаточно одного таймера с двумя input capture. Настраиваете параметры триггера и прерывание на второй таймер ставите. В прерывании считаете разность в регистрах, что и есть точное время между событиями. Обязательно считать в беззнаковой арифметике, тогда переполнение таймера между срабатываниями не исказит результат.

Даташит вроде бы говорит, что таймеры TIM2, TIM3 и TIM4 могут тактироваться на частоте процессора. Выбирайте любой из них, подключайте 2 канала - и вперёд.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.