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

 
 
> STM32: Синхронизация таймеров, Точный подсчет времени между импульсами
Haamu
сообщение Jan 23 2016, 16:04
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 90
Регистрация: 12-12-13
Пользователь №: 79 587



Контроллер STM32L151. Стоит необходимость очень точного (до тика контроллера) измерения времени между некоторыми событиями. Последовательность событий такая:
1) Дергаю ногой 1, в этот момент надо начать отсчет времени.
2) В момент появления сигнала на ноге 2 нужно сохранить посчитанный временой интервал, дернуть ногой 3 и стартонуть отсчет второго интервала, при этом сделать это всё максимально синхронно!
3) В момент появления сигнала на ноге 4 сохранить второй временой интервал. На этом всё.
Собственно вопрос в том, как так по хитрому настроить срабатывание таймеров, чтобы сделать всё этом максимально синхронно? Сразу уточню, что ноги подключена как попало, поэтому использовать их как внешний триггер не получится.

Сообщение отредактировал Haamu - Jan 23 2016, 16:05
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 6)
scifi
сообщение Jan 23 2016, 19:29
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(Haamu @ Jan 23 2016, 19:04) *
Сразу уточню, что ноги подключена как попало, поэтому использовать их как внешний триггер не получится.

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

Нет, кто-то там наверху мог помочь и сделать "как попало" так, чтобы получилось "как должно быть", но так не бывает.
Go to the top of the page
 
+Quote Post
AVI-crak
сообщение Jan 24 2016, 02:46
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 182
Регистрация: 16-10-15
Пользователь №: 88 894



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

Ну, в случае если запуск точности не требует - то можно. Весь смысл - не вылезать из прерывания, а лишь переходить из одного - в другое. Код прерывания разместить в памяти. Не в курсе - но если есть CCRAM - то только там. Только таким способом можно быть 100% уверенным в нулевой латентности событий.
Go to the top of the page
 
+Quote Post
Tarbal
сообщение Jan 24 2016, 04:21
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439



Достаточно одного таймера с двумя input capture. Настраиваете параметры триггера и прерывание на второй таймер ставите. В прерывании считаете разность в регистрах, что и есть точное время между событиями. Обязательно считать в беззнаковой арифметике, тогда переполнение таймера между срабатываниями не исказит результат.
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Jan 25 2016, 08:33
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(Haamu @ Jan 23 2016, 19:04) *
2) В момент появления сигнала на ноге 2 нужно сохранить посчитанный временой интервал, дернуть ногой 3 и стартонуть отсчет второго интервала, при этом сделать это всё максимально синхронно!

Ну как бы уже видно, что "до тика процессора" у вас не получится.
Go to the top of the page
 
+Quote Post
Haamu
сообщение Jan 26 2016, 06:44
Сообщение #6


Частый гость
**

Группа: Участник
Сообщений: 90
Регистрация: 12-12-13
Пользователь №: 79 587



А в случае, если все-же завести эти сигналы на нужные ноги контроллера, как тогда это можно настроить и какие сигнала на какие ноги заводить?
Go to the top of the page
 
+Quote Post
scifi
сообщение Jan 26 2016, 07:34
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



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

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

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

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

 


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


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