Наносекундная точность прерывания на микропроцессоре 64 МГц

В настоящее время я разрабатываю печатную плату с Bluetooth-микроконтроллером nRF52832 64 МГц. У меня есть прерывание, связанное с этим MCU, которое необходимо обнаружить с точностью до 1-3 наносекунд.

К сожалению, 64-мегагерцовый микроконтроллер имеет тактовый цикл 15,625 нс, что означает, что прерывание может быть распознано с опозданием до 15,625 нс (с учетом нулевой задержки прерывания на данный момент). Обратите внимание, что на прерывание не нужно действовать сразу, мне нужно только знать, в какое время оно поступило.

Есть ли способ использовать внешнюю схему для повышения точности? Я рассматривал возможность использования внешнего наносекундного таймера для измерения смещения и отправки его на MCU каждый раз, когда срабатывает прерывание. К сожалению, мне трудно найти таймеры, которые могут работать с такой скоростью.

Я могу заменить MCU на более быстрый процессор, но не более ~ 180 МГц, что все равно будет 5,56 нс за такт. По этой причине креативное внешнее решение было бы идеальным.

Вероятно, вам следует рассмотреть возможность использования FPGA с быстрыми часами.
Спасибо, но, к сожалению, я ограничен по размеру и бюджету - я надеюсь, что есть альтернативное решение, прежде чем принять решение об использовании FPGA.
Точность 1 нс по сравнению с какой ссылкой? Подходит ли это для преобразователя времени в цифру? Каков источник сигнала и время его нарастания?
+1 за время-цифровой преобразователь, но это будет недешево. Полезно знать больше о реальной проблеме, которую нужно решить.
Приношу свои извинения, под «точностью» выше я, кажется, имел в виду точность. Пока измерение ns непротиворечиво, его не нужно синхронизировать с каким-либо конкретным эталоном. Это прерывание исходит от модуля DWM1000 — сверхширокополосного модуля, используемого для определения местоположения внутри помещений. Этот модуль управляется нашим микроконтроллером nRF52. Процесс выглядит следующим образом: 1) DWM1000 отправляет прерывание 2) MCU дает команду DWM1000 ответить при задержке = [нс смещение + часы_циклы * 15,625 нс позже] 3) Вычисленное выше значение задержки используется в дальнейших расчетах. Это значение задержки должно быть точным для наших расчетов.
ПЛИС однозначно. Но не только fpga, для этого потребуется что-то еще. Не уверен, как они на самом деле это делают, я бы измерил фазу сигнала по отношению к часам FPGA.
Вот тдк с разрешением 250 пс, выглядит недорого.
@tomnexus В качестве примечания для вас и ОП: разрешение точность.
Хм. Я никогда не работал на таких скоростях. Но рассматривали ли вы источник тока, питающий конденсатор, сбрасывающий конденсатор на каждом фронте тактовой частоты 64 МГц и использующий дискретизатор для аналогового напряжения на конденсаторе, когда наступает событие, чтобы зафиксировать значение для последующего считывания с помощью АЦП? Что-то вроде нескольких десятков мА в конденсаторе 220 нФ? Хотя, возможно, все, что я делаю, — это разбрасываюсь проблемами.
@jonk, конечно, но просмотрите таблицу данных, это неплохо, и есть другие с разрешением 40 пс. Для точной синхронизации OP потребуются опорные часы с низким джиттером, определенно не встроенные часы микропроцессора.
@tomnexus Я пропустил некоторые комментарии из-за того, что этот сайт «обрезает» комментарии, если я не заставлю их. ОП написал, что точность не нужна. Просто низкая стоимость. Кстати, таблица данных, связанная со страницей, которую вы упомянули, дает мне ОШИБКУ, а не таблицу данных.
TDC-GP1 - не рекомендуется для нового дизайна
Я не могу избавиться от мысли, что совокупные ошибки и неточности в других частях вашей системы, таких как отслеживание печатной платы и емкость разъема, и это только два, перевешивают преимущества ее части 1..3 нс.
и даже если вы нашли гораздо более быстрый микроконтроллер, нет причин предполагать, что периферийные устройства работают так быстро, им не нужно соответствовать скорости процессора, поэтому скорость некоторых из них ограничена долей скорости системы / процессора. Прочтите таблицы данных, чтобы узнать больше (при условии, что вы можете заменить детали).
Некоторые PIC имеют периферийные устройства для измерения времени и напряжения.

Ответы (2)

Теоретические соображения

Для системы оцифровки, чтобы обнаружить что-то с временным разрешением Δ т , он должен иметь частоту дискретизации не менее 2 Δ т . Это следствие теоремы выборки Найквиста.

В вашем случае это означает, что любой контакт может вызвать прерывание, которое каким-то образом отмечает время возникновения фронта сигнала, вам понадобятся некоторые часы выборки (или, точнее, связанные с вашим приложением: счетчик, который может быть зафиксирован на внешнем сигнале ) работает как минимум на частоте 666,67 МГц.

практические соображения

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

Итак, я бы предложил на самом деле подход, который вам рекомендовали в комментариях, а именно использование высокоскоростного счетчика, например, внутри FPGA, для захвата времени и чтения его, когда вы будете готовы с вашим MCU.

Или вы используете импульсную и очень быструю аналоговую электронику, чтобы, например, запустить, например, экспоненциальное затухание напряжения, которое вы можете периодически наблюдать и экстраполировать по наблюдаемой скорости затухания на момент времени, когда оно началось. Таким образом, вы фактически обмениваете разрешение АЦП (вывод прерывания: «1-битный АЦП», если хотите) на временное разрешение. Вам все равно понадобится довольно хороший АЦП и соответствующая скорость процессора.

В конце концов, ваша проблема сложна, так как обнаружение импульсов с точностью до наносекунды является сложной проблемой , даже начиная с точки зрения разводки печатной платы (качество фронта вашего импульса зависит от ширины полосы сигнала, которую вы можете передать на печатной плате). трасса – а для сигнала с основной частотой 1/(1нс) = 1 ГГц это уже становится нетривиально).

Вам, вероятно, понадобится либо очень быстрая FPGA, либо вышеупомянутый аналоговый преобразователь время-функция, умеренно быстрый АЦП и умеренно быстрый FPGA для работы с данными АЦП.

сотрите это.

Я только что прочитал о преобразователях времени в цифру. Максим (например, MAX35102) и TI предлагают такие (другие фирмы, конечно, тоже).

Насколько я читал, существуют разные подходы, но, например, TI TDC7200 использует внутренний кольцевой генератор (который работает на довольно высоких скоростях, обеспечивая высокое разрешение) для запуска счетчика.

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

Я бы лично попробовал злоупотребить десериализатором FPGA. Можно получить относительно недорогие FPGA с сериализаторами, способными передавать данные со скоростью более 1 Гбит/с, что должно обеспечивать разрешение не менее 1 нс. Однако может потребоваться выполнить некоторую внешнюю калибровку, чтобы получить абсолютную задержку.
Спасибо вам и всем, кто порекомендовал TDC! Потребовалось некоторое исследование, чтобы найти один с достаточно коротким диапазоном измерения, но, к счастью, TI производит TDC7201 , который снижает время до 0,25 нс и аналогичен тому, что вы предложили. Думаю, я попробую!

С помощью различных приемов можно добиться высокой точности синхронизации; однако действие MCU на прерывание вряд ли будет иметь такую ​​точность.

Один из вариантов состоит в том, чтобы запустить генератор и сравнить его с нониусным измерением времени опорного генератора . Для этого требуется генератор, который можно запустить с известной фазой (обычно это линия задержки и инвертирующий вентиль), и эталон времени с фазовым детектором. Фазовый детектор дает точную коррекцию, применяемую к грубой синхронизации, обеспечиваемой обычным счетчиком.

Нониусному таймеру требуется много времени, поэтому скромные часы (20 МГц) могут работать на счет до сотни, пока завершается измерение фазы. Таким образом, для завершения определения времени в 1 нс может потребоваться несколько микросекунд.