В настоящее время я разрабатываю печатную плату с Bluetooth-микроконтроллером nRF52832 64 МГц. У меня есть прерывание, связанное с этим MCU, которое необходимо обнаружить с точностью до 1-3 наносекунд.
К сожалению, 64-мегагерцовый микроконтроллер имеет тактовый цикл 15,625 нс, что означает, что прерывание может быть распознано с опозданием до 15,625 нс (с учетом нулевой задержки прерывания на данный момент). Обратите внимание, что на прерывание не нужно действовать сразу, мне нужно только знать, в какое время оно поступило.
Есть ли способ использовать внешнюю схему для повышения точности? Я рассматривал возможность использования внешнего наносекундного таймера для измерения смещения и отправки его на MCU каждый раз, когда срабатывает прерывание. К сожалению, мне трудно найти таймеры, которые могут работать с такой скоростью.
Я могу заменить MCU на более быстрый процессор, но не более ~ 180 МГц, что все равно будет 5,56 нс за такт. По этой причине креативное внешнее решение было бы идеальным.
Для системы оцифровки, чтобы обнаружить что-то с временным разрешением , он должен иметь частоту дискретизации не менее . Это следствие теоремы выборки Найквиста.
В вашем случае это означает, что любой контакт может вызвать прерывание, которое каким-то образом отмечает время возникновения фронта сигнала, вам понадобятся некоторые часы выборки (или, точнее, связанные с вашим приложением: счетчик, который может быть зафиксирован на внешнем сигнале ) работает как минимум на частоте 666,67 МГц.
Ничто, кроме этого, не подойдет, если только вы не сможете построить внешнюю систему, которая каким-то образом преобразует событие в нечто более медленное, что затем можно будет наблюдать впоследствии, чтобы вычислить время, когда оно произошло.
Итак, я бы предложил на самом деле подход, который вам рекомендовали в комментариях, а именно использование высокоскоростного счетчика, например, внутри FPGA, для захвата времени и чтения его, когда вы будете готовы с вашим MCU.
Или вы используете импульсную и очень быструю аналоговую электронику, чтобы, например, запустить, например, экспоненциальное затухание напряжения, которое вы можете периодически наблюдать и экстраполировать по наблюдаемой скорости затухания на момент времени, когда оно началось. Таким образом, вы фактически обмениваете разрешение АЦП (вывод прерывания: «1-битный АЦП», если хотите) на временное разрешение. Вам все равно понадобится довольно хороший АЦП и соответствующая скорость процессора.
В конце концов, ваша проблема сложна, так как обнаружение импульсов с точностью до наносекунды является сложной проблемой , даже начиная с точки зрения разводки печатной платы (качество фронта вашего импульса зависит от ширины полосы сигнала, которую вы можете передать на печатной плате). трасса – а для сигнала с основной частотой 1/(1нс) = 1 ГГц это уже становится нетривиально).
Вам, вероятно, понадобится либо очень быстрая FPGA, либо вышеупомянутый аналоговый преобразователь время-функция, умеренно быстрый АЦП и умеренно быстрый FPGA для работы с данными АЦП.
Я только что прочитал о преобразователях времени в цифру. Максим (например, MAX35102) и TI предлагают такие (другие фирмы, конечно, тоже).
Насколько я читал, существуют разные подходы, но, например, TI TDC7200 использует внутренний кольцевой генератор (который работает на довольно высоких скоростях, обеспечивая высокое разрешение) для запуска счетчика.
Кольцевой генератор синхронизируется с внешними часами, поэтому вам необходимо убедиться, что ваши потребности в точности удовлетворяются качеством этих часов.
С помощью различных приемов можно добиться высокой точности синхронизации; однако действие MCU на прерывание вряд ли будет иметь такую точность.
Один из вариантов состоит в том, чтобы запустить генератор и сравнить его с нониусным измерением времени опорного генератора . Для этого требуется генератор, который можно запустить с известной фазой (обычно это линия задержки и инвертирующий вентиль), и эталон времени с фазовым детектором. Фазовый детектор дает точную коррекцию, применяемую к грубой синхронизации, обеспечиваемой обычным счетчиком.
Нониусному таймеру требуется много времени, поэтому скромные часы (20 МГц) могут работать на счет до сотни, пока завершается измерение фазы. Таким образом, для завершения определения времени в 1 нс может потребоваться несколько микросекунд.
пользователь2233709
инуши
pjc50
бобфлюкс
инуши
пользователь76844
томнексус
придурок
придурок
томнексус
придурок
НержавеющаяСтальКрыса
ТониМ
Старожил
аналоговые системы рф