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

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

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

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

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

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

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

Не могли бы вы рассказать нам, что вы пытаетесь сделать и почему устройства должны быть синхронизированы? Возможно, специфика вашего приложения подскажет решение. Как правило, это не очень простая проблема, особенно для небольших беспроводных устройств.
Невозможно добиться синхронизации, полагаясь на Bluetooth. Джиттер в 15 мс — это слишком много для синхронизации 0,5 мкс. Вам нужно что-то с очень низким джиттером и фиксированной задержкой, которую можно исправить. Было бы проще, если бы вы могли получить одни часы для обоих из них и буферизовать часы, чтобы сбалансировать задержки.
Извините за задержку. Цель проекта — убрать провода из существующей конструкции ручных цифровых измерительных инструментов. Пользователь хотел беспроводную конструкцию, так как он повреждал текущие провода. Устройства измеряют распространение волн в стоящих деревьях, которые достаточно быстры, чтобы обеспечить синхронизацию 0,5 мкс между обоими датчиками.
Дешевая беспроводная связь: инфракрасная. Одного ИК-импульса может быть достаточно для повторной синхронизации часов, когда они немного разошлись.
В этом документе предлагается система Bluetooth 4.0 с синхронизацией ~ 10 мкс с экспериментальным тестом.
@Kevin: Нигде в своем вопросе вы не упомянули, что синхронизация должна быть беспроводной ... только позже в своем комментарии. Это важная информация! Вы ожидаете, что читатели прочитают ваши мысли?
Bluetooth = игрушки. Вы, вероятно, не можете использовать его для любой формы производительности в реальном времени, не говоря уже о микросекундной точности.

Ответы (4)

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

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

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

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

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

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

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

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

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

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

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

Т я м е н + Е Икс т г п С н г п С н + 1 г п С н

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

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

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

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

Точность 1,5 мкс в сценарии с одним переходом и средняя точность 0,5 мкс на переход в случае с несколькими переходами были продемонстрированы путем предоставления экспериментальных результатов. Хороший.
Это также может представлять интерес: протокол синхронизации времени для сенсорных сетей .

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

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