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

 
 
> Счётчик десятинаносекундных импульсов на STM32F4
uu5jkb
сообщение Jun 1 2014, 05:23
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 4-02-09
Пользователь №: 44 400



Приветствую всех.
Стоит задача вести счёт импульсов, приходящих по пяти каналам. Импульсы уже прямоугольные, сформированные, длительность 10 нс, интервал между импульсами скачет случайным образом, в худшем случае два импульса "слипаются в один". Измерять надо в течение 20 мс, за это время может набежать до 500 тыс. импульсов. По прикидкам, STM32F4 может таткировать свои таймеры 168 МГц и регистрировать импульсы такой длительности. Два 32-разрядных таймеров запустить напрямую, ещё три 16-битных - по прерываниям увеличивать програмный счётчик, чтобы вместилось 500 тыс. импульсов.
Собственно, вопрос: может кто возился с подобным и есть ли какие противопоказания для такого использования СТМ?
Спасибо.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
SasaVitebsk
сообщение Jun 2 2014, 02:10
Сообщение #2


Гуру
******

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



Непосредственно по вопросу, если это спасёт, то делитель на ETR МК асинхронный. То есть, предельная частота поступающая на вход может быть выше чем CLK/2.
Но есть и ещё один вопрос. При подключении цепочки таймеров, если нет механизма включения/ отключения входной частоты (счёт на лету), сложно контролировать точность счёта, при переполнении, так как нет механизма параллельной фиксации значений нескольких таймеров.
Короче лучше такую вещь сделать внешей, по отношению к МК. По крайней мере, за минусом последнего таймера в цепочке.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jun 2 2014, 03:52
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(SasaVitebsk @ Jun 2 2014, 12:20) *
Но есть и ещё один вопрос. При подключении цепочки таймеров, если нет механизма включения/ отключения входной частоты (счёт на лету), сложно контролировать точность счёта, при переполнении, так как нет механизма параллельной фиксации значений нескольких таймеров.

В чём сложность-то?
Код
uint i, i1, i2 = timerLow;
do {
  i1 = i2;
  i = timerHigh;
  i2 = timerLow;
} while (i1 > i2);
return i << N | i2;


Цитата(demiurg_spb @ Jun 2 2014, 12:53) *
Запустить ДМА по первому событию на чтение порта, складывать всё в буфер (да, его размер должен быть достаточным) по прошествии пачки импульсов уже не в реальном времени проводить пост-обработку данных.

Не хватит быстродействия. Тем более для 5-и каналов работающих на частоте близкой к тактовой CPU.
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Jun 2 2014, 04:26
Сообщение #4


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(jcxz @ Jun 2 2014, 12:02) *
Не хватит быстродействия. Тем более для 5-и каналов работающих на частоте близкой к тактовой CPU.
Количество каналов при таком способе не важно, т.к. за раз читается весь порт сразу и могут быть сохранены состояния аж 16 дискретных каналов ввода.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jun 2 2014, 04:40
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Как это не важно? А как вы их потом разбирать на отдельные счётчики будете если не побитно?
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Jun 2 2014, 04:53
Сообщение #6


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(jcxz @ Jun 2 2014, 12:50) *
Как это не важно? А как вы их потом разбирать на отдельные счётчики будете если не побитно?

Вы наверное не понимаете суть идеи.
При ПОСТ обработке весь разбор происходит.
А при накоплении данных никакой обработки - только чтение состояния параллельного порта ввода и сохранение в массив.
Ведь ТС ясно говорит, что длительность пачки импульсов не превышает 20мс...
При этом, благодаря ДМА и большому объёму ОЗУ, пост обработку можно проводить параллельно с накоплением второго (теневого) буфера...


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jun 2 2014, 09:25
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(demiurg_spb @ Jun 2 2014, 15:03) *
При ПОСТ обработке весь разбор происходит.
А при накоплении данных никакой обработки - только чтение состояния параллельного порта ввода и сохранение в массив.

Вы считаете что DMA работает на частоте, превышающей частоту CPU? biggrin.gif
Для регистрациии 10нс-импульсов потребуется считывать с GPIO с частотой как минимум ==200МГц.
CPU выбранный ТС имеет макс. частоту 168МГц.
И это не учитывая что GPIO обычно работает на частоте в разы ниже частоты ядра; не учитывая скорости памяти
(которая к тому-же внешняя понадобится).

Цитата(demiurg_spb @ Jun 2 2014, 15:03) *
Ведь ТС ясно говорит, что длительность пачки импульсов не превышает 20мс...
При этом, благодаря ДМА и большому объёму ОЗУ, пост обработку можно проводить параллельно с накоплением второго (теневого) буфера...

Где это он такое говорит? Вот его слова:
Цитата(uu5jkb @ Jun 1 2014, 19:43) *
Этой дорогой и пойду, если ничего другого не придумаю. Только импульсы от ФЭУ в перерывах между счётом не исчезают, надо будет регистр поставить, который в нужный момент будет их состояния запоминать.

И какая тут ещё может быть параллельная обработка процессором?

Во! если уж так хочется, то я придумал как можно DMA задействовать rolleyes.gif
ТСу не хвататет таймеров в CPU? Не беда! Заводим один источник импульсов на вход SCLK SPI-порта, переводим его в Slave, максимальная разрядность, настраиваем DMA
на приём с него в одно слово ОЗУ (без инкремента/декремента адреса).
И всё! По окончании интервала счёта считываем содержимое числа оставшихся пересылок DMA-канала, умножаем на разрядность SPI, делим на 2 - получаем число импульсов. cheers.gif
Хотя тут тоже - нужна разрядность SPI хотя-бы 16 (лучше - больше), и желательно - FIFO в SPI. И не забываем про счётчики-делители на входе перед CPU!
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Jun 3 2014, 03:44
Сообщение #8


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(jcxz @ Jun 2 2014, 17:35) *
Вы считаете что DMA работает на частоте, превышающей частоту CPU? biggrin.gif
К чему этот юмор? Конечно не считаю.
Я предварительно оценил максимальную синхронную частоту захвата до 16 каналов дискретного ввода, при использовании DMA в сообщении №19.
И я уверен, что есть ряд задач (например не слишком шустрый логический анализатор), где его можно использовать.
Увы не в этот раз.
Цитата
Где это он такое говорит?
В первом сообщении ТС.
Цитата
И какая тут ещё может быть параллельная обработка процессором?
Такая, о которой я уже три раза вам говорил.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
adnega
сообщение Jun 3 2014, 04:04
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(demiurg_spb @ Jun 3 2014, 11:54) *
Я предварительно оценил максимальную синхронную частоту захвата до 16 каналов дискретного ввода, при использовании DMA в сообщении №19.
И я уверен, что есть ряд задач (например не слишком шустрый логический анализатор), где его можно использовать.
Увы не в этот раз.

Кажется, у модуля DCMI больше шансов быть задействованным в логическом анализаторе.
Тот вариант, который предлагаете Вы тоже имеет право на жизнь. Таким образом я успешно реализовал самодиагностику линии CAN (обрыв, КЗ, норма, доминанта), о чем года три назад писал на форуме. Связка TIM, DMA и GPIO на аппаратном уровне как раз в той задаче, когда, работая по прерываниям, уже не успеваешь.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jun 3 2014, 05:09
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(adnega @ Jun 3 2014, 14:14) *
Тот вариант, который предлагаете Вы тоже имеет право на жизнь. Таким образом я успешно реализовал самодиагностику линии CAN (обрыв, КЗ, норма, доминанта), о чем года три назад писал на форуме. Связка TIM, DMA и GPIO на аппаратном уровне как раз в той задаче, когда, работая по прерываниям, уже не успеваешь.

У меня в нескольких проектах на LPC17xx так реализован программный UART (аппаратных не хватает). Не только RX, но и TX.
С честным оверсэмплингом ==16.
И дело не в неуспевании. Зачем лишне грузить CPU?
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- uu5jkb   Счётчик десятинаносекундных импульсов на STM32F4   Jun 1 2014, 05:23
- - Xenia   Цитата(uu5jkb @ Jun 1 2014, 13:33) Импуль...   Jun 1 2014, 05:38
|- - adnega   Цитата(Xenia @ Jun 1 2014, 13:48) позволя...   Jun 1 2014, 06:01
|- - Xenia   Цитата(adnega @ Jun 1 2014, 14:11) Кста, ...   Jun 3 2014, 16:05
- - jcxz   Цитата(uu5jkb @ Jun 1 2014, 15:33) Стоит ...   Jun 1 2014, 07:18
|- - A. Fig Lee   Цитата(jcxz @ Jun 1 2014, 07:28) Другой в...   Jun 1 2014, 07:42
|- - jcxz   Цитата(A. Fig Lee @ Jun 1 2014, 17:40) Ум...   Jun 1 2014, 07:46
|- - HHIMERA   Цитата(A. Fig Lee @ Jun 1 2014, 14:52) ST...   Jun 1 2014, 11:41
|- - A. Fig Lee   Цитата(HHIMERA @ Jun 1 2014, 11:51) И STM...   Jun 2 2014, 07:14
|- - HHIMERA   Цитата(A. Fig Lee @ Jun 2 2014, 14:24) Да...   Jun 2 2014, 14:23
|- - Xenia   Цитата(HHIMERA @ Jun 2 2014, 22:33) ...   Jun 2 2014, 15:08
- - uu5jkb   Цитата(Xenia @ Jun 1 2014, 13:48) ...макс...   Jun 1 2014, 09:33
|- - jcxz   Цитата(uu5jkb @ Jun 1 2014, 19:43) Это но...   Jun 1 2014, 09:51
|- - Tanya   Цитата(uu5jkb @ Jun 1 2014, 17:43) Это но...   Jun 3 2014, 00:31
- - A. Fig Lee   Я бы поначалу глянул, хватит ли таймеров у СТМ32. ...   Jun 1 2014, 10:28
- - Golikov A.   CPLD лучше ставить. Всяко лучше чем на рассыпухе с...   Jun 1 2014, 11:45
|- - demiurg_spb   Как альтернативный вариант: Запустить ДМА по перво...   Jun 2 2014, 02:43
|- - adnega   Цитата(demiurg_spb @ Jun 2 2014, 13:03) П...   Jun 2 2014, 05:12
||- - demiurg_spb   Цитата(adnega @ Jun 2 2014, 13:22) Не сов...   Jun 2 2014, 05:27
|- - demiurg_spb   Цитата(adnega @ Jun 3 2014, 12:14) Кажетс...   Jun 3 2014, 04:17
||- - adnega   Цитата(demiurg_spb @ Jun 3 2014, 12:27) Л...   Jun 3 2014, 04:53
|- - adnega   Цитата(jcxz @ Jun 3 2014, 13:19) У меня в...   Jun 3 2014, 06:35
|- - jcxz   Цитата(adnega @ Jun 3 2014, 16:45) Теперь...   Jun 3 2014, 11:44
|- - adnega   Цитата(jcxz @ Jun 3 2014, 19:54) По-моему...   Jun 3 2014, 12:48
- - _pv   DCMI на вход вроде до FCLK/2 разгоняется. но всё р...   Jun 2 2014, 06:25
- - A. Fig Lee   А почему проблемы? Потому что не железо подбираетс...   Jun 2 2014, 09:46
|- - adnega   Цитата(A. Fig Lee @ Jun 2 2014, 17:56) А ...   Jun 2 2014, 10:33
|- - jcxz   Цитата(adnega @ Jun 2 2014, 20:43) 4. Точ...   Jun 2 2014, 14:44
- - HHIMERA   Потому что проблема надуманная... Делов то... макс...   Jun 2 2014, 15:18
- - Golikov A.   а как расшифровывается ETR?   Jun 2 2014, 15:33
|- - A. Fig Lee   Цитата(Golikov A. @ Jun 2 2014, 15:43) а ...   Jun 2 2014, 22:15
- - Golikov A.   ЦитатаExternal TRigger спасибо Цитатасчет фотонов...   Jun 3 2014, 00:37
|- - Tanya   Цитата(Golikov A. @ Jun 3 2014, 08:47) ко...   Jun 3 2014, 02:25
- - Леонид Иванович   10 лет назад решал подобную задачу - делал двухкан...   Jun 3 2014, 04:27
- - alexen   Цитата(Xenia @ Jun 4 2014, 00:15) огранич...   Jun 3 2014, 17:34
|- - Леонид Иванович   Цитата(alexen @ Jun 4 2014, 00:44) Таймер...   Jun 3 2014, 17:43
- - alexen   Цитата(Леонид Иванович @ Jun 4 2014, 01:5...   Jun 3 2014, 18:17
|- - jcxz   В LPC17xx - частота периферии получается делением ...   Jun 3 2014, 22:14
- - uu5jkb   Убедили. Потратил некторое время на знакомство с П...   Jul 13 2014, 17:13
- - Golikov A.   Ну... код ничего для начальной курсовой. 1. Капит...   Jul 13 2014, 21:44


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

 


RSS Текстовая версия Сейчас: 19th July 2025 - 23:51
Рейтинг@Mail.ru


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