впервые на stackexchange, надеюсь, я в правильном месте. Я работаю над проектом, в котором мне нужно поставить метку времени события (которое будет обнаружено по электрическому импульсу) до нескольких десятков наносекунд и синхронизировать с GPS (потому что будет несколько таких модулей, которые необходимо синхронизировать вместе). ). Я искал простое решение arduino/raspberry, но, похоже, оно не будет лучше, чем 1-2 нас, далеко от ~ 30 нс.
Я думал использовать выход 1PPS (1 Гц) GPS, чтобы получить очень точное время, а затем найти временной интервал между этим импульсом и импульсом датчика, подсчитывая циклы внешних высокоточных часов. Я нашел часы, которые обеспечат погрешность менее 30 нс по сравнению с 1 с PPS (40 МГц, 10ppb, джиттер 1 пс).
Теперь проблема в том, как мне подсчитать эти тактовые циклы? Мой опыт по этому вопросу очень близок к 0, как и у моего товарища по команде. Любая помощь очень ценится.
РЕДАКТИРОВАТЬ: кажется, что это очень сложно для тех, кто имеет только опыт работы с микроконтроллером, отправляет данные через последовательный порт. Идеальным продуктом для моего приложения было бы что-то вроде этого: http://www.ti.com/product/TDC7201/description Просто подключите два импульса к контактам START и STOP, и он вернет временной интервал. Единственная разница в том, что мне нужно измерение 1 с (против 8 мс), но с точностью 10-50 нс (против 50 пс). В основном измерение в 1000 раз дольше с точностью в 1000 раз меньше.
Подсчет циклов между импульсами PPS не является хорошим подходом. Даже при использовании часов со стабильностью 10 частей на миллиард вам все равно необходимо оценивать рассогласование между различными единицами измерения.
Использование встроенного GPS-приемника с отметкой времени является хорошим подходом. Обратите внимание, однако, что будет нелегко получить среднеквадратичную точность 30 нс в реальных условиях. 30 нс соответствуют точности позиционирования всего 9 м. В то время как большинство приемников легко достигают этого для положения с фильтром Калмана, вы увидите больше нарушений ваших временных меток (когда получатель не может использовать скрытую марковскую модель ), если вы также не усредните несколько событий.
Многолучевой прием является вашим главным противником (для объектов, находящихся на расстоянии нескольких десятков километров друг от друга, и событий, происходящих в течение долей секунды). Многолучевое распространение каким-то образом будет подавлено приемником, но лучшее, что вы можете сделать, это использовать хорошую антенну (дроссельное кольцо или что-то подобное) и выбрать хорошее место. Также может помочь установка на штатив.
Калибровка групповой задержки обычно не требуется для 30 нс, если все ваши модули используют одинаковую настройку (имеет значение длина кабеля антенны, а также усилители и т.п.).
Гораздо более высокая точность может быть достигнута, если вы сможете измерить событие в диапазоне сигналов GPS, то есть через радиочастотный интерфейс ресивера . Это свяжет синхронизацию непосредственно с полученными сигналами и даст возможность устранить несколько источников ошибок. Если вам не нужен результат в близком к реальному времени, вы можете записать сигналы GPS вместе с триггером и выполнить их постобработку. Это даст высокую точность относительного положения и времени (дифференциальный GPS).
Я не знаком с Arduino Uno, но, вероятно, у него есть модуль счетчика, который может измерять временные интервалы. Но это будет ограничено тактовой частотой, которая, вероятно, слишком мала для того, что вы хотите. Вам лучше переключиться на Arduino Due, у него наверняка есть такая возможность и он может работать на частоте 96 МГц. Изучите периферийное устройство счетчика/таймера (техническое описание). Используйте его для захвата
По этим цифрам можно рассчитать точный интервал между последним импульсом и событием.
Обратите внимание, что программировать периферийное устройство непросто. И если ваш опыт в программировании микроконтроллеров равен нулю, вам сначала придется довести его до разумного уровня. Этому не научишься за неделю. Если у вас есть базовые навыки программирования и есть хороший инструктор, месяц может быть хорошей догадкой. И понимание таймера приходит после этого..
Я работал с R&D co. у которого когда-то была сеть с аналогичными требованиями для синхронного TDM в общей сети. Восходящий мультиплексор измерил фазовую ошибку узкого импульса от каждого «отправителя», так что нисходящие цели могли быть не только синхронизированы по фазе с общим потоком битов в их собственном временном интервале, но и синхронизированы по фазе из-за «расширения линии» или задержки или любая другая фазовая ошибка. Затем ретранслятор отправлял команды фазовой коррекции каждому отправителю, когда это необходимо, чтобы обеспечить идеальную синхронизацию центральной точки.
Чтобы выполнить что-либо подобное, ваш детектор фазовой ошибки должен иметь большее разрешение, чем требуемая ошибка, а дрейф во времени любого несинхронизированного отправителя должен преобразовываться во временной интервал, который можно скорректировать в пределах диапазона фазового детектора +/- xx нс. Использование обнаружения фазы ULF/VLF, например, дает больший фазовый диапазон, но при умножении до разрешения частоты, которое дает фазовую синхронизацию в районе 10 нс, требуется либо очень стабильный тактовый генератор с низким фазовым шумом, либо широкая полоса пропускания канала.
WWVB очень стабилен <1e-12 в f, но неадекватная полоса пропускания для коррекции лучше, чем несколько мс, из-за несущей 60 кГц с полосой пропускания в несколько кГц. Переведите это значение в ns, и пропускная способность вашей сети для исправления фазовых ошибок должна быть на 1e6 выше по частоте.
Начните с точных спецификаций требований для каждого местоположения и определите свою фазовую точность, которой вы можете достичь при обнаружении фазовой ошибки в нс. Я сомневаюсь, что какой-либо Arduino сможет решить эту проблему без специального аппаратного интерфейса для измерения фазовой ошибки в наносекундах.
Я разработал множество различных доплеровских приборов от ОНЧ до УВЧ, поэтому здесь я говорю только об общих чертах.
джмс
мкейт
пользователь126881
Але..ченски
Крис Стрэттон
мкейт
пользователь126881
Крис Стрэттон
мкейт
томнексус
пользователь126881
томнексус
томнексус
пользователь126881
Андрей