Как синхронизировать два микроконтроллера с точностью до микросекунды?

37

Мне нужно синхронизировать два микроконтроллера, чтобы они могли измерять скорость распространяющихся волн. Измерения временной задержки должны иметь точность микросекунды (погрешность менее 1/2 микросекунды).

У меня есть два микроконтроллера ( ATmega328 ), которые используют кристалл 12 МГц.

Они оба оснащены приемопередатчиками Bluetooth. Приемопередатчики Bluetooth отправляют и получают пакеты с дрожанием ~ 15 миллисекунд.

Я надеюсь синхронизировать микроконтроллеры, используя приемопередатчики Bluetooth или какой-либо другой творческий метод.

Я пытался синхронизировать их, касаясь их вместе, но мне нужно, чтобы они оставались синхронизированными в течение примерно 10 минут, и их часы дрейфовали слишком быстро. Возможно, если бы можно было точно предсказать смещение часов, этот метод сработал бы.

Как мне добиться этой синхронизации?

Kevin
источник
2
Не могли бы вы рассказать нам, что вы пытаетесь сделать и почему устройства должны быть синхронизированы? Может быть, специфика вашего приложения может указать решение. Как общая проблема, это не очень легко, особенно для небольших беспроводных устройств.
Ник Алексеев
2
Невозможно добиться синхронизации, опираясь на Bluetooth. Дрожание в 15 мс - это слишком много, чтобы получить синхронизацию 0,5 мкс. Вам нужно что-то с очень низким джиттером и фиксированной задержкой, которое можно исправить. Было бы проще, если бы вы могли получить одинаковые часы для них обоих, и буферизовать часы, чтобы сбалансировать задержки.
Travisbartley
Извините за задержку. Целью проекта является удаление проводов из существующей конструкции ручных цифровых измерительных инструментов. Пользователь хотел иметь беспроводной дизайн, поскольку он повреждает текущие провода. Модули измеряют распространение волн в стоячих деревьях, которые достаточно быстры, чтобы обеспечить синхронизацию 0,5 мкс между обоими датчиками.
Кевин
Cheap-o беспроводной: инфракрасный. Одного ИК-импульса может быть достаточно для повторной синхронизации часов, когда они немного разошлись.
JimmyB
1
В этой статье предлагается система Bluetooth 4.0 с синхронизацией ~ 10 мкс, с экспериментальным тестом.
user2943160

Ответы:

23

Я не хочу идти дождь на твоем беспроводном параде. Вы столкнулись с жестким, но неожиданным требованием. Нечто подобное требует переоценки всей конструкции системы.

Первое , что приходит на ум, - отключить оба блока от одного генератора. У вас есть связь Bluetooth, которая намекает на то, что дальность порядка 10м. Вы можете подключить свои устройства с помощью коаксиального кабеля RG174 или оптоволоконного кабеля, который будет нести часы.

Второй , существует прецизионные генераторы. В порядке увеличения точности и стоимости.

  • TCXO (кварцевый генератор с температурной компенсацией). Обычно дрейф от 1 до 3 промилле.
  • OCXO (управляемый печью кварцевый генератор). Дрифт порядка 0,02 ppm. Некоторые OCXO имеют дрейф до 0,0001 ч / млн.
  • Атомные часы (например, Рубидиум ). Я упоминаю атомные часы в основном, чтобы дать ориентир. Подробнее об этом здесь .

В-третьих , прецизионный генератор обучен с GPS. Каждый спутник GPS имеет несколько атомных часов на борту. Обычно в поле зрения есть множество спутников GPS. GPS используется для точного определения времени (менее известное использование по сравнению с спутниковой навигацией). Большинство приемников GPS имеют выход 1PPS (один импульс в секунду), который обеспечивает синхронизацию с точностью до 50 нс.
Чтобы иметь дрейф 0,5 мкс в течение 600 с (10 минут), ваши часы (12 МГц в вашей нынешней конструкции) должны иметь дрейф менее 0,0008 ppm. Но если вы можете исправить ошибку синхронизации время от внешнего источника с небольшим смещением, требования к смещению в часах могут быть более смягчены. Если вы можете исправить каждую секунду, то ваши часы могут иметь отклонение 0,5 стр / мин.

Ник Алексеев
источник
Однажды я работал над проектом, в котором нам нужно было добиться такой точности на серверах, работающих в центрах обработки данных по всему миру. Там проще всего было использовать GPS. Оказалось, что не все машины / центры обработки данных могут получить доступ к GPS, поэтому наше решение оказалось довольно сложной задачей. Делать это с микроконтроллерами будет еще сложнее.
NomadAlien
4
+1 за «требует переоценки всей конструкции системы».
1
В зависимости от вашего бюджета, вы можете купить устройства GPS, которые выдают программируемую частоту (0-10 МГц), выровненную по фазе с сигналом GPS, за ~ 150 долларов США. Посмотрите на uBlox LEA-6T. Они заявляют, что импульсный выходной сигнал ошибки среднеквадратичного отклонения составляет 30 нС, 99% <60 нс.
Коннор Вольф
9

Модули GPS с выходом 1pps легко доступны и недороги.

На самом деле нет необходимости привязывать генератор ЦП к GPS (например, с помощью ФАПЧ). До тех пор, пока вы можете «метить время» внешних событий относительно тактовой частоты ЦП, относительно просто интерполировать время передачи и приема вашей волны между любыми двумя событиями PPS.

Часто можно использовать комбинацию аппаратного таймера на микроконтроллере вместе с программным счетчиком для его событий переполнения, чтобы создать счетчик циклов ЦП произвольной ширины. Может быть сложно правильно обрабатывать события опрокидывания, как счетчика оборудования, так и счетчика программного обеспечения, но, в конце концов, у вас может быть, скажем, 32-разрядный счетчик, который рассчитывает с частотой тактовой частоты процессора (обеспечивая высокое разрешение ) и переворачивается с периодом, превышающим интервалы, которые вы пытаетесь измерить (например, 429 секунд при 10 МГц).

Вы можете использовать этот счетчик для отметки времени различных внешних событий. Если одно из этих событий представляет собой импульсы в 1 pps от приемника GPS, то базовая долговременная точность тактовой частоты процессора становится безразличной. Единственное, что имеет значение, это его краткосрочная стабильность. Вы можете сохранить метки времени GPS в буфере FIFO и сравнить метки времени других событий со значениями в этом буфере. Поскольку вы знаете, что GPS-импульсы находятся на расстоянии ровно одной секунды, вы можете узнать точное время любого другого события путем интерполяции.

GPSnGPSn+1TimenTimen+1ExtGPSnGPSn+1

Timen+ExtGPSnGPSn+1GPSn

Наконец, если у вас есть эта установка, работающая на двух отдельных системах, каждая с собственным GPS-приемником, вы можете сравнить время, рассчитанное для различных событий в двух системах, с высокой точностью (обычно порядка ± 100 нс), даже если Часы процессора двух систем не синхронизированы.

Дэйв Твид
источник
Не могли бы вы рассказать немного о том, как это будет работать? У меня проблемы с пониманием из текущего объяснения.
NickHalden
@NickHalden: ОК, готово.
Дэйв Твид
Хммм, хорошо, разве это не зависит от частоты процессора, которая постоянна между двумя 1-секундными импульсами? Например, возьмем особенно ужасную схему кварцевого генератора, где 99% импульсов происходят между 0,00 и 0,05 секундами, а затем окончательный 1% происходит между 0,05 и 1,00 с. Разве этот патологически сконструированный пример не облажался или я все еще что-то упустил?
NickHalden
Да, это то, что означает «краткосрочная стабильность».
Дэйв Твид
Ах, это было там, когда я прокомментировал? Ха-ха, это смущает. В любом случае, спасибо за объяснение +1 от меня.
NickHalden
8

Я уже реализовал беспроводную синхронизацию часов для микроконтроллеров, но только с точностью до миллисекунды, что было достаточно для приложения. Из моего прочтения эта статья довольно хорошо объясняет микросекундную синхронизацию: http://www.math.u-szeged.hu/tagok/mmaroti/okt/2010t/ftsp.pdf

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

Кини
источник
Точность 1,5 мкс в сценарии с одним скачком и средняя точность 0,5 мкс на прыжок в случае множественного скачка были продемонстрированы с помощью экспериментальных результатов. Ницца.
Ли Аунг Ип
1
Это также может представлять интерес: Синхронизирующий протокол для сенсорных сетей
Ник Алексеев
3

Ознакомьтесь с протоколом синхронизации часов Bluetooth (CSP), который является необязательной частью профиля устройства работоспособности (HDP). Разделы в этом документе, относящиеся к CSP, составляют 2.1 и 8.

У меня еще не было возможности попробовать это самому, но, насколько я могу судить, BlueZ (официальный стек протоколов Bluetooth для Linux) только что добавил поддержку HDP , включая поддержку CSP. Таким образом, даже если это не похоже на то, что вы будете работать на платформе, поддерживающей стек BlueZ, но, возможно, код, по крайней мере, обеспечит хорошую эталонную реализацию.

nocnokneo
источник