Синхронизация NTPD с сигналом 1PPS

У меня есть AHRS (справочная система определения направления), которая взаимодействует с моим C++ приложением. Я получаю поток сообщений 50 Гц через Ethernet от AHRS, и как часть этого сообщения я получаю время UTC. В моей системе также будет работать NTPD в качестве сервера времени для нашей встроенной сети. AHRS также имеет выход 1PPS, который указывает второе время пролонгации для UTC. Я хотел бы синхронизировать время NTPD с UTC. После некоторых исследований я обнаружил, что есть методы, которые используют последовательный порт в качестве входа для 1PPS. Из того, что я могу найти, эти методы используют GPSD для считывания 1PPS и связи с NTPD для синхронизации системного времени. Однако GPSD ожидает сообщение в формате NMEA от GPS. У меня этого нет.

На мой взгляд, у меня есть несколько дополнительных подходов:

  1. Не используйте GPSD. Напишите программу, которая читает 1PPS, а сообщение Ethernet содержит UTC, а затем каким-то образом передает эту информацию в NTPD.

  2. Используйте GPSD. Напишите программу, которая перепаковывает сообщение Ethernet во что-то, что может быть отправлено в GPSD, и позволяйте ему обрабатывать взаимодействие с NTPD.

  3. Что-то другое?

Любые предложения будут очень признательны.

РЕДАКТИРОВАТЬ: Я прошу прощения за этот плохо построенный вопрос.

Мое решение этой проблемы заключается в следующем: 1 - интерфейс 1PPS к порту RS232, который, как оказалось, является стандартным подходом, который обрабатывается GPSD. 2 - написать пользовательское приложение C++ для чтения сообщений Ethernet, содержащих UTC, и из этого построить сообщение NMEA, содержащее UTC. 3 - передать сообщение NMEA в GPSD, который, в свою очередь, взаимодействует с NTPD для синхронизации информации GPS/1PPS с системным временем.

2 ответа

Существуют примеры, которые показывают, как сигнал PPS может быть считан при использовании последовательного порта, например, путем подключения его к выводу, поддерживающему прерывание, - это может быть RingIndicator (RI) или что-то еще с сопоставимыми функциями. проблема, которую я вижу, состоит в том, что любой вид управляемой кодом службы прерывания имеет свои задержки и джиттер. это определяется дизайном вашей системы (и, если вы делаете это, своей собственной системой обработки специальных обработчиков прерываний - на ПК даже старые добрые ISA-шины, представленные обработчиками NMI, могут видеть такие эффекты).

насколько я понимаю, люди, которые выполняют синхронизацию времени на "компьютере", используют настоящий аппаратный счетчик таймера (например, с 64 битами) и защелку, которая срабатывает для выборки и удержания значения таймера при каждом входящем импульсе 1PPS. - люди делают это уже с PTP через Ethernet с небольшим изменением, что специальный край входящих данных используется в качестве триггера, и этот отправитель и получатель могут быть синхронизированы, используя дополнительную программную логику, которая получает результирующее значение из встроенного РТР-аппаратно-защелки. смотрите здесь: https://en.wikipedia.org/wiki/Precision_Time_Protocol

Например, 802.1AS: http://www.ieee802.org/1/pages/802.1as.html описал википедию в разделе "Связанные инициативы" следующим образом: "IEEE 802.1AS-2011 является частью IEEE Audio Video Bridging (AVB).) группа стандартов, дополнительно расширенная Целевой группой IEEE 802.1 по чувствительной ко времени сети (TSN), которая определяет профиль для использования IEEE 1588-2008 для синхронизации времени по виртуальной мостовой локальной сети (согласно определению IEEE 802.1Q) В частности, 802.1AS определяет, как IEEE 802.3 (Ethernet), IEEE 802.11 (Wi-Fi) и MoCA могут быть частями одного и того же домена синхронизации PTP ".

некоторые статьи (на немецком языке): https://www.elektronikpraxis.vogel.de/ethernet-fuer-multimediadienste-im-automobil-a-157124/index4.html и некоторые презентации: http://www.ieee802.org/1/files/public/docs2008/as-kbstanton-8021AS-overview-for-dot11aa-1108.pdf

Мое обоснование вашего вопроса: да, это возможно. но это дизайн с ограниченной точностью из-за различных внутренних вещей, таких как задержка и дрожание обработчика прерываний, который вы вынуждены использовать. Трудно сказать достижимую общую точность для каждого импульса и в долгосрочной перспективе, но она может находиться в диапазоне от 10 мс при запуске с одним импульсом до 0,1 мс. - делать это значит доказывать это. долгосрочные наблюдения должны помочь вам обнародовать истинные практические ограничения с вашим конкретным компьютером и выбранной программной средой.

Я не знаю, почему вы хотели бы управлять устройством PPS с сигналом, который доставляется через кадры Ethernet. Более того, PPS не работает так, как вы, кажется, думаете. В сигнале PPS нет временного кода, поэтому вы не можете синхронизировать время с сигналом PPS. Сигнал PPS просто используется для информирования компьютера о длительности секунды.

Другие вопросы по тегам