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

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

|
Приветствую всех. Стоит задача вести счёт импульсов, приходящих по пяти каналам. Импульсы уже прямоугольные, сформированные, длительность 10 нс, интервал между импульсами скачет случайным образом, в худшем случае два импульса "слипаются в один". Измерять надо в течение 20 мс, за это время может набежать до 500 тыс. импульсов. По прикидкам, STM32F4 может таткировать свои таймеры 168 МГц и регистрировать импульсы такой длительности. Два 32-разрядных таймеров запустить напрямую, ещё три 16-битных - по прерываниям увеличивать програмный счётчик, чтобы вместилось 500 тыс. импульсов. Собственно, вопрос: может кто возился с подобным и есть ли какие противопоказания для такого использования СТМ? Спасибо.
|
|
|
|
|
 |
Ответов
|
Jun 2 2014, 02:10
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
Непосредственно по вопросу, если это спасёт, то делитель на ETR МК асинхронный. То есть, предельная частота поступающая на вход может быть выше чем CLK/2. Но есть и ещё один вопрос. При подключении цепочки таймеров, если нет механизма включения/ отключения входной частоты (счёт на лету), сложно контролировать точность счёта, при переполнении, так как нет механизма параллельной фиксации значений нескольких таймеров. Короче лучше такую вещь сделать внешей, по отношению к МК. По крайней мере, за минусом последнего таймера в цепочке.
|
|
|
|
|
Jun 2 2014, 03:52
|
Гуру
     
Группа: Свой
Сообщений: 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.
|
|
|
|
|
Jun 2 2014, 04:53
|

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

|
Цитата(jcxz @ Jun 2 2014, 12:50)  Как это не важно? А как вы их потом разбирать на отдельные счётчики будете если не побитно? Вы наверное не понимаете суть идеи. При ПОСТ обработке весь разбор происходит. А при накоплении данных никакой обработки - только чтение состояния параллельного порта ввода и сохранение в массив. Ведь ТС ясно говорит, что длительность пачки импульсов не превышает 20мс... При этом, благодаря ДМА и большому объёму ОЗУ, пост обработку можно проводить параллельно с накоплением второго (теневого) буфера...
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
|
Jun 2 2014, 09:25
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(demiurg_spb @ Jun 2 2014, 15:03)  При ПОСТ обработке весь разбор происходит. А при накоплении данных никакой обработки - только чтение состояния параллельного порта ввода и сохранение в массив. Вы считаете что DMA работает на частоте, превышающей частоту CPU? Для регистрациии 10нс-импульсов потребуется считывать с GPIO с частотой как минимум ==200МГц. CPU выбранный ТС имеет макс. частоту 168МГц. И это не учитывая что GPIO обычно работает на частоте в разы ниже частоты ядра; не учитывая скорости памяти (которая к тому-же внешняя понадобится). Цитата(demiurg_spb @ Jun 2 2014, 15:03)  Ведь ТС ясно говорит, что длительность пачки импульсов не превышает 20мс... При этом, благодаря ДМА и большому объёму ОЗУ, пост обработку можно проводить параллельно с накоплением второго (теневого) буфера... Где это он такое говорит? Вот его слова: Цитата(uu5jkb @ Jun 1 2014, 19:43)  Этой дорогой и пойду, если ничего другого не придумаю. Только импульсы от ФЭУ в перерывах между счётом не исчезают, надо будет регистр поставить, который в нужный момент будет их состояния запоминать. И какая тут ещё может быть параллельная обработка процессором? Во! если уж так хочется, то я придумал как можно DMA задействовать ТСу не хвататет таймеров в CPU? Не беда! Заводим один источник импульсов на вход SCLK SPI-порта, переводим его в Slave, максимальная разрядность, настраиваем DMA на приём с него в одно слово ОЗУ (без инкремента/декремента адреса). И всё! По окончании интервала счёта считываем содержимое числа оставшихся пересылок DMA-канала, умножаем на разрядность SPI, делим на 2 - получаем число импульсов. Хотя тут тоже - нужна разрядность SPI хотя-бы 16 (лучше - больше), и желательно - FIFO в SPI. И не забываем про счётчики-делители на входе перед CPU!
|
|
|
|
|
Jun 3 2014, 03:44
|

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

|
Цитата(jcxz @ Jun 2 2014, 17:35)  Вы считаете что DMA работает на частоте, превышающей частоту CPU?  К чему этот юмор? Конечно не считаю. Я предварительно оценил максимальную синхронную частоту захвата до 16 каналов дискретного ввода, при использовании DMA в сообщении №19. И я уверен, что есть ряд задач (например не слишком шустрый логический анализатор), где его можно использовать. Увы не в этот раз. Цитата Где это он такое говорит? В первом сообщении ТС. Цитата И какая тут ещё может быть параллельная обработка процессором? Такая, о которой я уже три раза вам говорил.
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
|
Jun 3 2014, 04:04
|
Гуру
     
Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702

|
Цитата(demiurg_spb @ Jun 3 2014, 11:54)  Я предварительно оценил максимальную синхронную частоту захвата до 16 каналов дискретного ввода, при использовании DMA в сообщении №19. И я уверен, что есть ряд задач (например не слишком шустрый логический анализатор), где его можно использовать. Увы не в этот раз. Кажется, у модуля DCMI больше шансов быть задействованным в логическом анализаторе. Тот вариант, который предлагаете Вы тоже имеет право на жизнь. Таким образом я успешно реализовал самодиагностику линии CAN (обрыв, КЗ, норма, доминанта), о чем года три назад писал на форуме. Связка TIM, DMA и GPIO на аппаратном уровне как раз в той задаче, когда, работая по прерываниям, уже не успеваешь.
|
|
|
|
Сообщений в этой теме
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        jcxz Цитата(adnega @ Jun 3 2014, 14:14) Тот ва... Jun 3 2014, 05:09         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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|